When higher level programming languages came into existence one of the major hurdles faced by the computer scientists was to generate machine language instructions which would properly evaluate any arithmetic expression. To convert a complex assignment statement such as:

X = A/B + C * D - F * G/Q

into a correct
instruction sequence was a formidable task. That it is no longer considered so
formidable is a tribute to the elegant and simple solutions that the computer
scientists came out with. As of today this conversion is considered to be one
of the minor aspects of compiler writing. To fix the order of evaluation of an
expression each language assigns to each operator a priority. Even after
assigning priorities how can a compiler accept an expression and produce
correct code? The answer is given by reworking the expression into a form we
call *postfix* notation. If *e* is an expression with operators and
operands, the conventional way of writing *e* is called infix, because the
operators come in between the operands (Unary operators precede their operand).
The postfix form of an expression calls for each operator to appear after its
operands. For example:

infix; A*B/C has a postfix form: AB*C/

If we study the postfix form we see that the multiplication comes immediately after its two operands A and B. Now imagine that A * B is computed and stored in T. Then we have the division operator '/' coming immediately after its two operands T and C.

Notice three features of the postfix expression:

·The operands maintain the same order as in the equivalent infix expression.

·Parentheses are not needed to designate the expression unambiguously.

·While evaluating the postfix expression the priority of the operators is no longer relevant.