[英]Eliminating Immediate Left Recursion
我知道为了从包含 A⇒Aα 形式的产生式的语法中消除直接左递归,我需要用 A⇒βA' 和 A'⇒αA/∈ 替换它
我有以下产品,我需要消除直接左递归
E⇒E+T/T
E⇒E+T/T
T⇒T*F/T
F⇒(E)/(id)
我可以看到在消除后第一个生产变成
E⇒TE'
E'⇒+TE'/T∈
有人能解释一下这是怎么来的吗
这实际上只是遵循算法的问题。 让我们看一下一般情况。 根据算法的形式规则:
A => A a1 | ... | A aN | b1 | .. | bN
其中A a1, ..., A aN
是终结符和非终结符的非零左递归序列, b1, ..., bN
是不以终结符A
开头的终结符和非终结符序列。
该算法说我们需要将其替换为
A => b1 A' | ... | bN A'
A' => a1 A' | ... | aN A' | epsilon
让我们看看你的情况。 这里我们有
E => E + T | T
所以你可以认为a1
是序列+ T
因为E + T
是终结符和非终结符的左递归序列。 同样,您可以将B1
视为T
因为这是一个非左递归序列。 我们现在使用它来定义新的非终结符E
为:
E => b1 E'
因为b1
是T
这变成
E => T E'
定义E'
我们得到
E' => a1 E' | epsilon
因为a1
是+ T
这变成
E' => + T E' | epsilon
因此你最终得到了语法
E => T E'
E' => + T E' | epsilon
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.