CS 112
Polish Notation
The name comes from the Polish mathematician/logician
Lukasiewicz, who introduced it.
Three types:
- Infix form
- Prefix form
- Postfix form
Infix form
Is exactly the fully parenthesized notation we have just
introduced. Let me remind you once again the
infix-expression := (infix-expression operand infix-expression)
infix-expression := atom
Examples
(3 * 7)
((1 + 3) * 2)
((1 + 3) * ( 2 - 3))
Main Feature: the binary operator is between the two operands.
Question: what if we do not put all the parentheses? Then there
are ambiguities on how to interpret an expression: is 1+2*3 the
same as (1+2)*3 or the same as 1+(2*3)? The precedence of
operators solves this problem.
Prefix form
Main Feature: the operator preceeds the two operands.
of fully parenthesized version:
prefix-expression := (operand prefix-expression prefix-expression)
prefix-expression := atom
of classic version, without parentheses (we
do not need them, because there is no longer any ambiguity on how
to match the operands to the operators):
prefix-expression := operand prefix-expression prefix-expression
prefix-expression := atom
Examples
(* 3 7) or simply * 3 7
(* ( + 1 3) 2) or simply * + 1 3 2
( * ( + 1 3) ( - 2 3)) or simply * + 1 3 - 2 3
Postfix form
Main Feature: the operator is after the two operands.
postfix-expression := (operand postfix-expression postfix-expression)
postfix-expression := atom
of classic version, without parentheses (we
do not need them, because there is no longer any ambiguity on how
to match the operands to the operators):
postfix-expression := operand postfix-expression postfix-expression
postfix-expression := atom
Examples
(3 7 *) or simply 3 7 *
((1 3 + ) 2 *) or simply 1 3 + 2 *
((1 3 +) ( 2 3 -) * ) or simply 1 3 + 2 3 - *
In class: do several examples of the same expression, in each of
the three Polish forms.
Ileana Streinu