【发布时间】:2014-11-14 12:45:41
【问题描述】:
我无法为以下问题导出 yacc 程序。
a和b个数相等的字符串的语法如下
S -> a S b S | b S a S | ε
我想知道是否可以为它制作一个 YACC 程序。同样在编写代码时,我意识到如果输入的 a 和 b 不相等怎么办。我应该在 YACC 的哪个位置打印一些指示字符串无效的消息?
【问题讨论】:
标签: compiler-errors yacc
我无法为以下问题导出 yacc 程序。
a和b个数相等的字符串的语法如下
S -> a S b S | b S a S | ε
我想知道是否可以为它制作一个 YACC 程序。同样在编写代码时,我意识到如果输入的 a 和 b 不相等怎么办。我应该在 YACC 的哪个位置打印一些指示字符串无效的消息?
【问题讨论】:
标签: compiler-errors yacc
yacc 实现LALR(1) 语法的解析器;语法(我相信,语言)不是LALR(1)。 (这与我下面的第一点有关。)
如果您使用bison(这很可能),那么您可以使用%glr 选项生成 GLR 语法,在这种情况下,语法的简单音译会起作用。但是,你会遇到两个问题:
大多数有效字符串都有多次解析,bison 的 GLR 解析器坚持认为最终结果没有歧义。我不知道是否有使用%dprec 的简单解决方案,但有可能。
在到达字符串末尾之前,您无法判断字符串与语法不匹配,因为任何字符串都是有效字符串的前缀。 (您只需添加足够多的少数符号即可实现平等。)
【讨论】: