c - Bison 中的空 block 规则?

标签 c bison yacc lex flex-lexer

好的,让我解释一下我需要什么:

  • 我有一个描述 block 的规则,例如想想类 C 语言的 { .. }

  • block 可以包含语句,其规则定义(相当明显)如下:

    statements   :   statement
                 |   statements[previous] statement
                 ;
    
<小时/>

现在要注意的是:

如果我想要一段代码或一个 statements 规则在它不包含任何内容的情况下也有效,或者 - 为了使其更加通用 - 拥有一个完美的,该怎么办?不包含任何内容的有效程序。

尝试在规则中添加...虚无,这也很明显,会导致大约 100 多个移位归约冲突。

我该怎么办? 最肯定的是,让解析器因为没有语句而抛出语法错误,没有多大意义,不是吗?

最佳答案

嗯,这毕竟很简单:

    statements   :   statements[previous] statement
                 |   /* empty */
                 ;

并已修复。无论如何,没有移位归约冲突。

关于c - Bison 中的空 block 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23287651/

相关文章:

c - (gcc)go 中的打包结构

c++ - QMAKE_EXTRA_COMPILERS - 头文件之间的依赖性问题

c++ - Bison :轮类减少冲突

ios - iOS 的标准语法解析器是什么?

c++ - 我是否需要包含 "Windows.h"才能隐式使用 Windows API/与 Windows API 通信?

c - 如何正确循环嵌套 switch 语句以提供所示的输出?

c - 我如何在 C 中找到可以免费使用的端口?

parsing - 代码替换(a la #define)。莱克瑟?还是解析器?

c - 转移/减少 yacc 中的冲突

c - Yacc 程序给出错误 :"syntax error"