我试图在这个语法中找到歧义,以便我可以删除它并将其转换为 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),但是对于我的生活,我找不到歧义。任何帮助都感激不尽。
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
。