我试图通过消除间接递归来消除CFG中的左递归,然后直接递归,如algorithm所示。
我将使用这个语法:
A = A a | A B C | B C | D D
当 i = 1 , j = 1 时,我们正在考虑替换 A - >形式的所有作品A :
A - > δ 1 γ| δ 2 γ| .. | δ k γ
所以,当我看到 A - >匹配的,我应该用
替换它A -> A a a | A B C a a | B C a | D D a
我肯定是错的
当你用生产本身取代产品时,有没有人能指出我如何更换产品?
注意:另外,我只是坚持第一条规则,所以为简单起见省略了其他规则
非常感谢任何帮助
[更新]尽可能接近原始的希腊符号。而且,我是否可能在错误的方向上接近这一点。当 i = 1 且 j = 1 时,A j - > A | A B C | B C | D D,但我应该使用A j - > B C | D D. 如果是这样,我会得到:
A -> B C A | B C B C | D D A | D D B C | B C | D D
因为那将消除该生产中的递归。这是一个更好的方向吗?
答案 0 :(得分:2)
这是食谱:
A → Aα1 | ... | Aαm | β1 | ... | βn
应转换为:
A → β1 A' | ... | βn A'
A' → α1 A' | ... | αm A' | ε
那是:
对于你的语法:
A = A a | A B C | B C | D D
你会得到:
A = B C A' | D D A'
A' = a A' | B C A' | ε