bison - -y/-yacc 标志在 bison 中起什么作用?

标签 bison

我搜索了手册页并找到了这个。但是这是什么意思?没有它,我的 Bison 文件无法编译,我想知道为什么它不能编译(诚然,我有一些移位/减少和减少/减少错误。但这不应该阻止它吗?)。

有人知道它实际上做了什么或者为什么它不能编译我的代码吗?

   -y, --yacc
          emulate POSIX Yacc

最佳答案

默认情况下,Bison 生成一组文件名,但 POSIX 需要一组不同的文件名。 -y 标志使 Bison 生成 POSIX 名称而不是它自己的一组名称。

对于输入文件名 grammar.y,Bison 通常会生成 grammar.tab.c(如果您请求,还会生成 grammar.tab.h)标题)。使用 -y 标志,Bison 生成 y.tab.cy.tab.h

请注意,-y 标志应该只影响输出文件名。它不应该影响可接受的语法,也不影响冲突的数量。

有趣的是,在相同的语法上,输出略有不同;操作行中有一个空语句:

$ diff y.tab.c grammar.tab.c
558c558
< #line 559 "y.tab.c"
---
> #line 559 "grammar.tab.c"
2828c2828
<     { stmt_type = STMT_NONE; }
---
>     { stmt_type = STMT_NONE; ;}
2833c2833
<     { stmt_type = STMT_LOAD; }
---
>     { stmt_type = STMT_LOAD; ;}
...

关于bison - -y/-yacc 标志在 bison 中起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970720/

相关文章:

c++ - Bison C++ 中间规则值因变体而丢失

c - 匹配单个问号的简单 Lex/Yacc 语法错误?

当与词法分析器中的 strdup() 一起使用时,flex/bison 中的 Char* 作为 YYSTYPE 仅返回标记中的第一个字符

c++ - 命名空间标准和 LLVM PassManagerInternal.h 文件

javascript - 用于自动分号插入的Bison错误恢复

c - flex bison,从文件读取时遇到标记后标记化停止

无法从 Bison 语法文件中检索语义值

c++ - Bison/Flex 以相反的顺序处理 token

c - Bison - 在简单的计算器中打印前缀符号

parsing - 我想写一个编译器;你推荐什么程序集(x86)/后端?是否使用 BISON?