0% found this document useful (0 votes)
71 views10 pages

Operator Precedence

The document discusses operator precedence parsing which involves defining precedence relationships between operators. It provides: 1) A precedence table that defines the precedence relationships between operators like id, +, *, and $. 2) An algorithm for operator precedence parsing that uses a stack to parse expressions based on the precedence relationships. 3) A method for constructing precedence functions by assigning integers to operator symbols based on precedence relationships to enable the parsing algorithm.

Uploaded by

SHILPA KELA
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views10 pages

Operator Precedence

The document discusses operator precedence parsing which involves defining precedence relationships between operators. It provides: 1) A precedence table that defines the precedence relationships between operators like id, +, *, and $. 2) An algorithm for operator precedence parsing that uses a stack to parse expressions based on the precedence relationships. 3) A method for constructing precedence functions by assigning integers to operator symbols based on precedence relationships to enable the parsing algorithm.

Uploaded by

SHILPA KELA
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 10

OPERATOR PRECEDENCE PARSING

OPERATOR GRAMMAR
• No Ɛ-transition.
• No two adjacent non-terminals.
Eg.
E  E op E | id
op  + | *
The above grammar is not an operator
grammar but:
E  E + E | E* E | id
OPERATOR PRECEDENCE

• If a has higher precedence over b; a .> b


• If a has lower precedence over b;a <. b
• If a and b have equal precedence; a =. b
Note:
– id has higher precedence than any other symbol
– $ has lowest precedence.
– if two operators have equal precedence, then we
check the Associativity of that particular operator.
PRECEDENCE TABLE

id + * $
id .> .> .>
+ <. .> <. .>
* <. .> .> .>
$ <. <. <. .>

Example: w=$id + id * id$


$<.id.>+<.id.>*<.id.>$
BASIC PRINCIPLE
• Scan input string left to right, try to detect .>
and put a pointer on its location.
• Now scan backwards till reaching <.
• String between <. And .> is our handle.
• Replace handle by the head of the respective
production.
• REPEAT until reaching start symbol.
ALGORITHM
w  input
a  input symbol
b  stack top
Repeat
{
if(a is $ and b is $)
return
if(a .> b)
push a into stack
move input pointer
else if(a <. b)
c  pop stack
until(c .> b)
else
error()
}
EXAMPLE
STACK INPUT ACTION/REMARK
$ id + id * id$ $ <. Id
$ id + id * id$ id >. +
$ + id * id$ $ <. +
$+ id * id$ + <. Id
$ + id * id$ id .> *
$+ * id$ + <. *
$+* id$ * <. Id
$ + * id $ id .> $
$+* $ * .> $
$+ $ + .> $
$ $ accept
PRECEDENCE FUNCTIONS
• Operator precedence parsers use precedence functions that map
terminal symbols to integers.
Algorithm for Constructing Precedence Functions
1. Create functions fa for each grammar terminal a and for the end of
string symbol.
2. Partition the symbols in groups so that fa and gb are in the same group
if a =· b (there can be symbols in the same group even if they are not
connected by this relation).
3. Create a directed graph whose nodes are in the groups, next for each
symbols a and b do: place an edge from the group of gb to the group of
fa if a <· b, otherwise if a ·> b place an edge from the group of fa to that
of gb.
4. If the constructed graph has a cycle then no precedence functions
exist. When there are no cycles collect the length of the longest paths
from the groups of fa and gb respectively.
• Consider the following table:

• Resulting graph:

gid fid

f* g*

g+ f+

f$ g$
• From the previous graph we extract the
following precedence functions:
id + * $
f 4 2 4 0
id 5 1 3 0

You might also like