Compiler errors YACC与上下文无关文法

Compiler errors YACC与上下文无关文法,compiler-errors,yacc,Compiler Errors,Yacc,我无法为以下问题导出yacc程序 a和b数量相等的字符串的语法如下 S->a S b S | b S a S |ε 我想知道是否有可能为它制作一个YACC程序。同样在编写代码时,我意识到如果输入的a和b不相等会怎样。在YACC中,我应该在哪里打印一些指示字符串无效的消息 yacc实现了LALR(1)语法的解析器;语法(我相信,还有语言)不是LALR(1)。(这与我下面的第一点有关。) 如果您使用bison(很可能),那么您可以使用%GLR选项生成GLR语法,在这种情况下,语法的简单音译就可以了。

我无法为以下问题导出yacc程序

a和b数量相等的字符串的语法如下

S->a S b S | b S a S |ε


我想知道是否有可能为它制作一个YACC程序。同样在编写代码时,我意识到如果输入的a和b不相等会怎样。在YACC中,我应该在哪里打印一些指示字符串无效的消息

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

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

  • 大多数有效字符串都有多个解析,bison的GLR解析器坚持最终结果不含糊。我不知道使用
    %dprec
    是否有一个简单的解决方案,但这是可能的

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