【问题标题】:Why does JFlap fail to build a usable LL(1) parser from my calculator grammar?为什么 JFlap 无法从我的计算器语法构建可用的 LL(1) 解析器?
【发布时间】:2020-05-28 21:54:35
【问题描述】:

我在JFlap中输入了如下语法:

E → TK
K → +TK
K → λ
T → FM
M → *FM
M → λ
F → i
F → (E)

并尝试解析i * (i + i)。我确信 LL(1) 语法是正确的,输入字符串应该被接受,但 JFlap 说该字符串被拒绝。 (见截图)。为什么?

【问题讨论】:

    标签: grammar ll jflap


    【解决方案1】:

    语法没问题。

    但是,您不知何故输入错误。请注意,您的解析表有一个 λ 列。这意味着 JFlap 将 λ 解释为一个字符,而不是一个空白的右侧,这可能是因为您键入了一个真正的 λ 而不是让 JFlap 自动填充它。如果你想要一个空的右手边,你应该把右手边留空。 JFlap 然后会将其显示为 λ,但不会将其视为符号。

    作为说明,这里是正确输入的语法(右侧为空)和我键入 λ 而不是将右侧留空的语法的屏幕截图。我在错误消息前一步停止了第二个解析,以便您可以看到报告的问题:由于M 没有空产生式,它会阻止解析器识别+ 符号。

    这是正确输入的语法:

    这是我以与您相同的方式生成的一个(如果我的猜测是正确的)。请注意,它在转换表中有一个 λ 列。您还会看到它在 FIRST 和 FOLLOW 集中的处理方式不同。

    作为后记,JFlap 似乎可以处理令牌中的大多数 Unicode 字符,但是使用 λ 字符作为令牌会触发各种错误。因此,即使您打算将 λ 用作合法字符,也不应该这样做。

    【讨论】:

    • 你说得对@rici,我没注意到。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 2020-03-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多