Operator Precedence Parsing
Operator Precedence Parsing
Leading
• Leading(A) ={a | a is left most terminal in some string
derived from A}
• A -> Ya ;Y is a single non-Terminal; Here Y can be ε;
• a ∈ Leading(A)
• E -> E+T|T; T->T*F|F; F->(E)|id
• Leading(F) = {(,id}; Leading(T) = {*}; Leading(E) = {+}
• A -> Y ; Y is a single non-Terminal; Here can be any
string;
• Leading(Y) ∈ Leading(A)
• {(,id} ∈ Leading(T); Due to T->F
• Leading(T) = {*,(,id}
• {*,(,id} ∈ Leading(E) ; Due to E->T
• Leading(E) = {+,*,(,id}
Leading
• Finally,
• Leading(F) = {(,id}
• Leading(T) = {*,(,id}
• Leading(E) = {+,*,(,id}
Trailing
• Trailing(A) ={a | a is right most terminal in some string
derived from A}
• A -> aY ; Y is a single non-Terminal; Here Y can be ε;
• a ∈ Trailing(A)
• E -> E+T|T; T->T*F|F; F->(E)|id
• Trailing(F) = {),id}; Trailing(T) = {*}; Trailing(E) = {+}
• A -> Y ; Y is a single non-Terminal; Here can be any
string;
• Trailing(Y) ∈ Trailing(A)
• {),id} ∈ Trailing(T) ; Due to T->F
• Trailing(T) = {*,),id}
• {*,),id} ∈ Trailing(E) ; Due to E->T
• Trailing(E) = {+,*,),id}
Trailing
• Finally,
• Trailing(F) = {),id}
• Trailing(T) = {*,),id}
• Trailing(E) = {+,*,),id}
Construction of Operator-precedence
relations : Rule-1
• $<a for all a ∈ Leading(StartSymbol)($ in row, a in column)
• b>$ for all b ∈ Trailing(StartSymbol)(b in row,$ in column)
• $<+; $<*; $<(; $<id;
• +<$; *<$; )<$; id<$;
+ * ( ) id $
+ >
* >
(
) >
id >
$ < < < <
• If Y -> ab𝛾; is ε or a single non-Terminal
then a = b;
+ * ( ) id $
+ >
* >
( =
) >
id >
$ < < < <
• If Y -> aA; a<b for all b in Leading(A)
• E -> E+T ==> +<* ; +<(; +<id
• T -> T*F ==> *<(; *<id
• F -> (E) ==> (<+; (<*; (<(; (<id
+ * ( ) id $
+ < < < >
* < < >
( < < < = <
) >
id >
$ < < < <
• If Y -> Ab; a>b for all a in Trailing(A)
• E -> E+T ==> +>+; *>+; )>+; id>+
• T -> T * F ==> *>*; )>*; id>*
• F -> (E) ==> * > ); +>); )>); id>)
+ * ( ) id $
+ > < < > < >
* > > < > < >
( < < < = <
) > > > >
id > > > >
$ < < < <