【发布时间】:2021-05-31 23:24:08
【问题描述】:
我有一个语法,我被要求建立一个解析表并验证它是一个 LL(1) 语法。在构建解析表后,我注意到一些列是空的并且其中没有生产规则。这是否意味着它是错误建造的?或者它不是 LL(1)?或者可能缺少什么?
谢谢。
【问题讨论】:
标签: parsing compiler-construction ll
我有一个语法,我被要求建立一个解析表并验证它是一个 LL(1) 语法。在构建解析表后,我注意到一些列是空的并且其中没有生产规则。这是否意味着它是错误建造的?或者它不是 LL(1)?或者可能缺少什么?
谢谢。
【问题讨论】:
标签: parsing compiler-construction ll
这没什么好担心的。空列表示有一个永远不会开始生产的终端符号(除其他外)。例如,以这个简单的 LL(1) 语法为例:
S → abcdefg
这里,在 S 的行中,b、c、d、e、f 和 g 的列都将为空,a 的列将是规则 S → abcdefg。更具体地说,增强语法如下所示:
S' → S
S → abcdefg
解析表如下所示:
| a | b | c | d | e | f | g
---+---------+---+---+---+---+---+---
S'| S | | | | | |
S | abcdefg | | | | | |
请注意,大多数列都是空的。
【讨论】: