GCC 说“数字常量之前有语法错误”在 bison 生成的头文件中
当我使用 bison parser.y -d -t 编译 .y 文件,然后将 parser.tab.h 文件包含在我的 Flex 文件中时,gcc 说“错误:数字常量之前有语法错误”。它引用第 32 行,这是 yytokentype 枚举中的第一行。
enum yytokentype {
BREAK = 258,
... }
该错误与“BREAK = 258”行有关。老实说,我不知道为什么会发生这种情况——我真的很想使用生成的 yylval 并且我需要从这个头文件中获取它。即使我在 Flex 文件中像这样声明 yytokentype ,我也会得到相同的错误。我可能做错了什么吗?
When I compile my .y file with bison parser.y -d -t and then include the parser.tab.h file in my flex file, gcc says "error: syntax error before numeric constant." It's referencing line 32, which is the first line in the enum of yytokentype.
enum yytokentype {
BREAK = 258,
... }
The error is about the line "BREAK = 258." I honestly don't know why this is happening--I would really like to use the generated yylval and I need it from this header file. Even if I declared yytokentype like this in my flex file, I would get the same error. Anything I could be doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
BREAK
是否在代码中的其他位置定义了?我从以下玩具示例中收到类似的错误:构建示例:
Is
BREAK
defined somewhere else in your code? I get a similar error from the following toy example:Build example:
据推测,BREAK 已经在 Flex 输出文件中的某处定义,因此在预处理器运行后,您将得到类似 99 = 258 之类的语句。尝试查看 cpp yy.lex.c 或 gcc -E yy.lex.c 的输出。我查看了一个 Flex 输出文件,但在其中没有找到 BREAK,只有 YY_BREAK。
Presumably BREAK is already defined somewhere in the flex output file, so after the preprocessor runs you are getting a statement like 99 = 258 or something. Try looking at the output of
cpp yy.lex.c
orgcc -E yy.lex.c
. I looked at a flex output file but did not find BREAK anywhere in it, only YY_BREAK.