Compiler construction 用替换、因子分解和左递归移除构造LL(1)文法
使用任何技术(替换、因子分解、左递归移除), 构造一个LL(1)语法,接受与G相同的语言Compiler construction 用替换、因子分解和左递归移除构造LL(1)文法,compiler-construction,context-free-grammar,left-recursion,pushdown-automaton,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吗?首先,X不是左递归的,因为它的RHS不是以X开头的。相反,它是尾部递归的,它是正确的。但是Y->Y0
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吗?首先,X不是左递归的,因为它的RHS不是以X开头的。相反,它是尾部递归的,它是正确的。但是Y->Y0告诉您Y是左递归的。在这种情况下,请执行以下操作:
S -> Y | 1X
X -> 1X | 0
Y -> 1X1F | 2X2F
F -> 0F | e
您可能还希望将和ε规则添加到X中,并使其生效
X -> 1X | 0 | e
只是为了确保你永远不会有无限的句子