【发布时间】:2020-10-02 23:55:00
【问题描述】:
我已经看到了为歧义和明确语法(相同语言)构建的解析表大小之间的比较。为模棱两可而创建的那个要小得多。使用的解析器是 SLR(1)。
我想问你,表示歧义语法的解析表(自底向上解析器的)的大小总是小于对应的明确语法的解析表的大小是否总是正确的?显然假设冲突得到了正确解决。
我做了一些研究,但我找不到任何证据或答案。
【问题讨论】:
标签: parsing compiler-construction lr bottom-up
我已经看到了为歧义和明确语法(相同语言)构建的解析表大小之间的比较。为模棱两可而创建的那个要小得多。使用的解析器是 SLR(1)。
我想问你,表示歧义语法的解析表(自底向上解析器的)的大小总是小于对应的明确语法的解析表的大小是否总是正确的?显然假设冲突得到了正确解决。
我做了一些研究,但我找不到任何证据或答案。
【问题讨论】:
标签: parsing compiler-construction lr bottom-up
并非总是如此。考虑平衡括号语言的经典语法
在 SLR(1) 自动机中明确的有 5 个状态。
S -> '(' S ')' S | \epsilon
同时,二义性文法在 SLR(1) 自动机中有 6 个状态。
S -> S S | '(' S ')' | \epsilon
因此,歧义语法的表大小大于明确语法的表大小。
a+ 语言的两个语法也是如此:S -> a S | a 和 S -> S S | S S S | a。
【讨论】: