Kiz*_*aru 11 enums gcc bison flex-lexer
当我使用bison parser.y -d -t编译我的.y文件然后在我的flex文件中包含parser.tab.h文件时,gcc说"错误:数字常量之前的语法错误".它引用第32行,这是yytokentype枚举中的第一行.
enum yytokentype {
BREAK = 258,
... }
Run Code Online (Sandbox Code Playgroud)
该错误大约是"BREAK = 258".老实说,我不知道为什么会这样 - 我真的想使用生成的yylval,我需要从这个头文件中获取它.即使我在我的flex文件中声明yytokentype这样,我也会得到同样的错误.我可能做错什么?
Car*_*rum 20
是否BREAK在代码中的其他位置定义了?我从以下玩具示例中得到了类似的错误:
#define BREAK 10
enum yytokentype {
BREAK = 258
};
Run Code Online (Sandbox Code Playgroud)
构建示例:
$ cc -c file.c
file.c:4: error: expected identifier before numeric constant
Run Code Online (Sandbox Code Playgroud)
小智 6
据推测,BREAK已在flex输出文件中的某处定义,因此在预处理器运行之后,您将收到类似99 = 258之类的语句.试着看看cpp yy.lex.c或的输出gcc -E yy.lex.c.我查看了一个flex输出文件,但没有在其中的任何地方找到BREAK,只有YY_BREAK.