【问题标题】:How to show grammar is not LL(1) and convert grammar to LL(1)如何显示语法不是 LL(1) 并将语法转换为 LL(1)
【发布时间】:2013-04-29 05:40:36
【问题描述】:

我正在尝试在此语法中找到歧义,以便将其删除并将其转换为 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

【问题讨论】:

    标签: parsing compiler-construction grammar context-free-grammar compiler-theory


    【解决方案1】:

    语法没有歧义。尽管如此,它不是 LL(1),因为当前瞻标记为 if 时,无法知道将使用 D 的两个产生式中的哪一个。

    要使其成为 LL(1),您需要 left-factor D

    【讨论】:

    • 另外,S 的产生式是左递归的,所以语法不是 LL(anything)。
    • 谢谢你们,这是正确的,我不得不离开因子 D 并从 S 中删除左递归
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多