【问题标题】:Is this BNF grammar LL(1)?这是 BNF 语法 LL(1) 吗?
【发布时间】:2012-09-16 13:52:54
【问题描述】:

如果下面的 BNF 语法是 LL(1),有人可以帮我确认一下吗:

S ::= A B B A
A ::= a
A ::=
B ::= b
B ::=

其中 S 是起始符号,非终结符 A 和 B 可以导出为 epsilon。我知道解析表中的单个单元格中是否有 2 个或多个产生式,那么语法不是 LL(1)。但是如果一个单元格已经包含 epsilon,我们可以在构建解析表时安全地用新的产生式替换它吗?

【问题讨论】:

  • 嗯,也许这不是 LL(1)。如果我被允许替换包含 epsilon 的解析表中的单元格,就像我在问题中提到的那样,那么它不会检测到 FIRST/FOLLOW 冲突。

标签: parsing grammar bnf ebnf ll


【解决方案1】:

这个文法是模棱两可的,因此对于任何 k 都不是 LL(1),也不是 LL(k)。

将单个ab 作为输入,并查看它可以与来自SAB 引用中的任何一个匹配。这样就有了两种不同的解析树,证明语法是歧义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多