Parsing 如何显示语法不是LL(1)并将语法转换为LL(1)

Parsing 如何显示语法不是LL(1)并将语法转换为LL(1),parsing,compiler-construction,grammar,context-free-grammar,compiler-theory,Parsing,Compiler Construction,Grammar,Context Free Grammar,Compiler Theory,我试图找出这个语法中的歧义,这样我就可以删除它并将其转换为LL(1),然而,就我的一生而言,我找不到歧义。任何帮助都将不胜感激 D -> if (C) {S} | if (C) {S} else {S} S -> D | SA | A A -> V = T; V -> x | y T -> 1 | 2 C -> true | false 语法并不含糊。尽管如此,它不是LL(1),因为当前瞻令牌为if时,不可能知道将使用D的两个产品中的哪一个 要使它成为LL(

我试图找出这个语法中的歧义,这样我就可以删除它并将其转换为LL(1),然而,就我的一生而言,我找不到歧义。任何帮助都将不胜感激

D -> if (C) {S} | if (C) {S} else {S}
S -> D | SA | A
A -> V = T;
V -> x | y
T -> 1 | 2
C -> true | false

语法并不含糊。尽管如此,它不是LL(1),因为当前瞻令牌为
if
时,不可能知道将使用
D
的两个产品中的哪一个


要使它成为LL(1),您需要
D

此外,
S
的结果是左递归的,因此语法不是LL(任何)。谢谢你们,这是正确的,我必须左因子D并从S中删除左递归