DATASTRUCTURE & ALGORITHMS
Evaluation of Expression
Unit - 1
S.Kavitha
Head & Assistant Professor
Department of Computer Science
Sri Sarada Niketan College of Science for
Women,Karur.
EXPRESSION PARSING
The way to write arithmetic expression is known as a notation. An
arithmetic expression can be written in three different but equivalent
notations, i.e., without changing the essence or output of an
expression. These notations are
Infix Notation
Prefix (Polish) Notation
Postfix (Reverse-Polish) Notation
These notations are named as how they use operator in expression.
We shall learn the same here in this chapter.
INFIX NOTATION
We write expression in infix notation, e.g. a - b + c, where operators
are used in-between operands. It is easy for us humans to read,
write, and speak in infix notation but the same does not go well with
computing devices. An algorithm to process infix notation could be
difficult and costly in terms of time and space consumption.
Prefix Notation
In this notation, operator is prefixed to operands, i.e. operator is
written ahead of operands. For example, +ab. This is equivalent to
its infix notation a + b. Prefix notation is also known as Polish
Notation.
POSTFIX NOTATION
This notation style is known as Reversed
Polish Notation. In this notation style, the
operator is postfixed to the operands i.e., the
operator is written after the operands. For
example, ab+. This is equivalent to its infix
notation a + b.
The following table briefly tries to show the
difference in all three notations −
Sr.No. Infix Notation Prefix Postfix
Notation Notation
1 a+b +ab ab+
2 (a + b) ∗ c ∗+abc ab+c∗
3 a ∗ (b + c) ∗a+bc abc+∗
4 a/b+c/d +/ab/cd ab/cd/+
5 (a + b) ∗ (c + ∗ + a b + c d ab+cd+∗
d)
6 ((a + b) ∗ c) - - ∗ + a b c d ab+c∗d-
d
PARSING EXPRESSIONS
It is not a very efficient way to design an algorithm or
program to parse infix notations. Instead, these infix
notations are first converted into either postfix or prefix
notations and then computed.
To parse any arithmetic expression, we need to take care of
operator precedence and associativity also.
Precedence
When an operand is in between two different operators, which operator will
take the operand first, is decided by the precedence of an operator over others.
For example
ASSOCIATIVITY
Associativity describes the rule where operators with the same precedence appear in
an expression. For example, in expression a + b − c, both + and – have the same
precedence, then which part of the expression will be evaluated first, is determined by
associativity of those operators. Here, both + and − are left associative, so the
expression will be evaluated as (a + b) − c.
Sr.No. Operator Precedence Associativity
1 Exponentiation ^ Highest Right Associative
2 Multiplication ( ∗ Second Highest Left Associative
) & Division ( / )
3 Addition ( + ) & Lowest Left Associative
Subtraction ( − )
POSTFIX EVALUATION ALGORITHM
Step 1 − scan the expression from left to
right
Step 2 − if it is an operand push it to stack
Step 3 − if it is an operator pull operand from
stack and perform operation
Step 4 − store the output of step 3, back to
stack
Step 5 − scan the expression until all
operands are consumed
ALGORITHM TO EVALUATE INFIX
EXPRESSION
Until the end of the expression is reached, get one character and perform
only one of the steps (1) through (5):
If the character is an operand, push it onto the operand stack.
If the character is “(“, then push it onto the operator stack.
If the character is “)”, then “process” as explained above until the
corresponding “(” is encountered in the operator stack. At this stage POP
the operator stack and ignore “(.”
If we encounter an operator
If the operator stack is empty then push the operator onto the operator
stack.
The last value in the value stack will be the result.
ALGORITHM TO EVALUATE A PREFIX
EXPRESSION
Step 1: Start Evaluating expression from right to left or reverse the
expression
Step 2: If a character is an operand push it to Stack
Step 3: If the character is an operator
pop two elements from the Stack.
Operate on these elements according to the operator, and push the result
back to the Stack
Step 4: Step 2 and 3 will be repeated until the end has reached.
Step 5: The Result is stored at the top of the Stack, return it
Step 6: End