首页 > 代码库 > 最左推导与最右推导

最左推导与最右推导

推导(derivation):从开始符号出发,每个重写步骤把一个非终结符号替换为它的某个产生式体。

最左推导(leftmost derivation):总是选择每个句型的最左非终结符号。

最右推导(rightmost derivation):总是选择每个句型的最右非终结符号。

 

看下面的产生式

E ::= E "+" E | E "*" E | "-" E | "(" E ")" | id

再看下面的串

-(id + id)

最左推导步骤

E => - E => - ( E ) => - ( E + E ) => - ( id + E ) => - ( id + id )

最右推导步骤

E => - E => - ( E ) => - ( E + E ) => - ( E + id ) => - ( id + id )