YACC和Context Free Grammars

时间:2014-11-14 12:45:42

标签: compiler-errors yacc

我无法为以下问题派生yacc程序。

具有相同数量的a&b; s和b的字符串的语法如下

S - > a S b S | b S a S |小量

我想知道是否有可能为它制作YACC计划。同时在制作代码时,我意识到如果输入没有等于a和b的话。我应该在YACC中打印一条消息,指出字符串无效?

1 个答案:

答案 0 :(得分:0)

yacc实现了LALR(1)语法的解析器;语法(而且,我相信,语言)不是LALR(1)。 (这与我在下面的第一点有关。)

如果您使用bison(很可能),那么您可以使用%glr选项生成GLR语法,在这种情况下,语法的天真音译将起作用。但是,您将遇到两个问题:

  1. 大多数有效字符串都有多个解析,而bison的GLR解析器坚持认为最终结果不明确。我不知道使用%dprec是否有一个简单的解决方案,但它可能。

  2. 在到达字符串末尾之前,您无法判断字符串是否与语法不匹配,因为任何字符串都是有效字符串的前缀。 (您只需添加足够的少数符号即可实现相等。)