0% found this document useful (0 votes)
2 views

Operator Prec Parsing

The document outlines the principles of operator grammar and precedence, emphasizing the absence of Ɛ-transitions and adjacent non-terminals. It details the operator precedence relation table, basic principles for scanning input strings, and an algorithm for operator precedence parsing. Additionally, it describes the construction of precedence functions and presents a precedence function table derived from a precedence graph.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Operator Prec Parsing

The document outlines the principles of operator grammar and precedence, emphasizing the absence of Ɛ-transitions and adjacent non-terminals. It details the operator precedence relation table, basic principles for scanning input strings, and an algorithm for operator precedence parsing. Additionally, it describes the construction of precedence functions and presents a precedence function table derived from a precedence graph.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

OPERATOR GRAMMAR

• No Ɛ-transition.
• No two adjacent non-terminals.
Eg.
E  E OP E | id | (E) | -E
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.
OPERATOR PRECEDENCE RELATION 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 precedence relation table:

• Resulting precedence graph:


gid fid

f* g*

g+ f+

f$ g$
OPERATOR PRECEDENCE FUNCTION TABLE

• 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