解决我的语法中的左递归问题

时间:2016-04-18 12:36:11

标签: parsing recursion compiler-construction grammar left-recursion

我的语法在第六个生产规则中有左递归的情况。

Left recursion

我通过替换规则6和7解决了这个问题:

Resolved left recursion

我在这个语法中找不到任何间接的左递归。

唯一困扰我的是最终制作规则,它有一个由两个非终端包围的终端。

我的两个问题是:

  • 我的解决左递归是否正确?
  • 最终的制作规则是左递归吗?我不知道该怎么做 对待这种特殊情况。

1 个答案:

答案 0 :(得分:1)

是的,你的决议是正确的。您可能希望删除epsilon规则以便于使用,但接受的字符串是正确的。

X -> -
X -> -Z
Z -> +
Z -> +Z
Z -> X + Y
... and Y is of the form 0* 1 (no syntax collisions)

作为一项检查,请注意您可以现在用两个新规则替换此最终规则,每个规则对应X的每次扩展:

Z -> -  + Y
Z -> -Z + Y

这将完全从Z规则中删除X,然后每个Z规则将以终端开始。

不,您的最终制作规则不再是左递归的。 X现在必须解析为以非终端开头的字符串。

不过,我不得不承认,我对这种语言的使用感到好奇。 : - )

相关问题