GCC 说“数字常量之前有语法错误”在 bison 生成的头文件中

发布于 2024-09-14 03:48:43 字数 339 浏览 2 评论 0原文

当我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心作怪 2024-09-21 03:48:43

BREAK 是否在代码中的其他位置定义了?我从以下玩具示例中收到类似的错误:

#define BREAK 10
enum yytokentype {
    BREAK = 258
};

构建示例:

$ cc -c file.c 
file.c:4: error: expected identifier before numeric constant

Is BREAK defined somewhere else in your code? I get a similar error from the following toy example:

#define BREAK 10
enum yytokentype {
    BREAK = 258
};

Build example:

$ cc -c file.c 
file.c:4: error: expected identifier before numeric constant
早乙女 2024-09-21 03:48:43

据推测,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 or gcc -E yy.lex.c. I looked at a flex output file but did not find BREAK anywhere in it, only YY_BREAK.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文