#!/bin/awk -f function push(x) { stack[++sp] = x; } function pop() { if(sp > 0) sp--; else err = "Stack underflow"; } function top(){ if(sp > 0) print stack[sp]; } function eval(x) { if(x != "-" && (x ~ /^[-.0-9][0-9]*[.0-9]?[0-9]*$/)) push(x); else { second = stack[sp]; pop(); first = stack[sp]; pop(); if(x == "+") push(first + second); else if(x == "-") push(first - second); else if(x == "*") push(first * second); else if(x == "/") push(first / second); else err = "Bad operator: " + x; } } BEGIN { sp = 0; } { err = ""; for(i = 1; i <= NF; i++) { eval($i); if(err) break; } if(!err) top(); else print "Error:", err; }