Compiler construction 有人能告诉我如何使用规则从这个语法中消除左递归吗?
我正在尝试从语法中删除左递归,我有时可以这样做。我显然不知道规则,因为我只知道如何通过反复试验来做到这一点。我看到的规则如下: 在这个特殊的例子中,我知道我可以先从S规则中删除立即左递归,然后得到:Compiler construction 有人能告诉我如何使用规则从这个语法中消除左递归吗?,compiler-construction,context-free-grammar,Compiler Construction,Context Free Grammar,我正在尝试从语法中删除左递归,我有时可以这样做。我显然不知道规则,因为我只知道如何通过反复试验来做到这一点。我看到的规则如下: 在这个特殊的例子中,我知道我可以先从S规则中删除立即左递归,然后得到: S --> XSS' | aS' S' --> XS' | SbS' | epsilon X --> Xb | Sa | b 然后,从这里我可以将S产品合并到X产品中,以获得: X --> Xb | XSS' | aS'a | b 然后我可以从那里移除立即左递归,得到
S --> XSS' | aS'
S' --> XS' | SbS' | epsilon
X --> Xb | Sa | b
然后,从这里我可以将S产品合并到X产品中,以获得:
X --> Xb | XSS' | aS'a | b
然后我可以从那里移除立即左递归,得到最终的答案。但是,有人能给我解释一下规则吗,因为我没有遵循规则来得出最终答案。我有点幸运。我需要知道如何从任何给定的语法中删除左递归。任何帮助都将不胜感激。多谢各位
- 删除第一个递归调用A
- 在末尾添加一个“A”呼叫
X --> Xb | XSS' | aS'a | b