【问题标题】:YACC and Context Free GrammarsYACC 和上下文无关文法
【发布时间】: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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 2020-04-01
      • 1970-01-01
      • 2012-01-04
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      相关资源
      最近更新 更多