构造具有替换,因式分解和左递归删除的LL(1)语法

时间:2014-03-25 15:26:50

标签: compiler-construction context-free-grammar left-recursion pushdown-automaton

使用任何技术(替换,因子分解,左递归删除), 构造一个LL(1)语法,接受与G相同的语言。

G over Σ = {0, 1, 2}:
    S → Y | 1X
    X → 1X | 0
    Y → Y0 | 1X1 | 2X2

到目前为止我这样做了:

X是递归的,所以:

X -> 1F | 0F
F -> 1F | e

构建LL(1)还需要做什么,我可以考虑Y吗?

1 个答案:

答案 0 :(得分:0)

首先,X不是递归的,因为它的RHS不是以X开头的。而是它的尾递归并且没有问题。但是Y - > Y0告诉你Y是左递归的。在这种情况下,您执行以下操作:

S -> Y | 1X
X -> 1X | 0
Y -> 1X1F | 2X2F
F -> 0F | e

您可能还想添加和epsilon规则到X以及

X -> 1X | 0 | e

只是为了确保你永远不会以无限的句子结束。