Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
17 views

16 - Data Structure - Expression Parsing

Uploaded by

laraib
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

16 - Data Structure - Expression Parsing

Uploaded by

laraib
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Data Structure - Expression

Parsing

Bhabani Shankar Pradhan


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 Notation Postfix 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 + d) ∗+ab+cd ab+cd+∗

6 ((a + b) ∗ c) - d -∗+abcd ab+c∗d-

Parsing Expressions

As we have discussed, 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 −

As multiplication operation has precedence over addition, b * c will be


evaluated first. A table of operator precedence is provided later.

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.

Precedence and associativity determines the order of evaluation of an


expression. Following is an operator precedence and associativity table
(highest to lowest) −

Sr.No. Operator Precedence Associativity

1 Exponentiation ^ Highest Right


Associative

2 Multiplication ( ∗ ) & Division Second Left Associative


(/) Highest

3 Addition ( + ) & Subtraction Lowest Left Associative


(−)

The above table shows the default behavior of operators. At any point of time
in expression evaluation, the order can be altered by using parenthesis. For
example −

In a + b*c, the expression part b*c will be evaluated first, with multiplication as
precedence over addition. We here use parenthesis for a + b to be evaluated
first, like (a + b)*c.

Postfix Evaluation Algorithm

We shall now look at the algorithm on how to evaluate postfix notation −

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

Step 6 − pop the stack and perform operation

You might also like