parsing - 消除这种间接左递归

标签 parsing compiler-construction grammar computation-theory

下面的语法已经离开了递归。

X 是起始符号。

X -> Xa | Zb
Z -> Zc | d | Xa

如何删除它?请逐步解释。

最佳答案

-- remove Z left recursion--

X -> Xa | Zb
Z -> dZ' | XaZ'
Z' -> cZ' | empty

--next remove Z --

X -> Xa | dZ'b | XaZ'b
Z' -> cZ' | empty

--next factorize X--

X -> XaX' | dZ'b
X'-> Z'b | empty
Z'-> cZ' | empty

--next remove X recursion--

X -> dZ'bX''
X'' -> a X'X'' | empty
X' -> Z'b | empty
Z' -> cZ' | empty

关于parsing - 消除这种间接左递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139548/

相关文章:

javascript - 任何好的 JavaScript BBCode 解析器?

c++ - 是否有用于模板使用的优化 C++ 编译器?

java - 为什么编译时会创建两个类文件?

c++ - VS2005、VS2008下C++生成的EXE速度; VS2010编译器

compiler-construction - 将语法转换为 LL(1) 语法 : some problems

parsing - 是否可以反转语法?

Java - 将字符串转换为 double 的最有效方法

c# - 无法使用 Linq 访问特定的 XML 文件 block

java - 只获取嵌套表的父行

c - BNF C 文法中的函数定义