如何使用flex/bison提供的内置yyerror()函数?
切换到Flex/Bison默认yyerror()函数的操作步骤
删除自定义yyerror()实现:找到你代码中所有定义
yyerror(const char *msg)(或匹配的函数签名)的位置——不管是在Flex的.l文件、Bison的.y文件,还是单独的C源码文件里,直接删除整个函数的代码。如果保留自定义实现,编译器会报重复定义错误。确保Bison生成默认错误处理代码:编译Bison源文件时无需额外添加特殊选项。默认情况下,当Bison检测到你没有自定义yyerror()时,会自动在生成的解析器代码(如
parser.tab.c)中包含一个极简的默认yyerror()实现,它会将错误信息直接打印到标准错误输出。重新编译链接项目:按照你之前的编译流程重新执行,示例命令如下:
bison -d parser.y flex scanner.l gcc -o my_program parser.tab.c lex.yy.c -lfl(注:Windows下的GNU环境中,
-lfl参数可能根据实际版本调整,部分场景下无需添加该库)验证默认函数生效:故意输入不符合语法规则的内容触发错误,程序会输出类似
error: syntax error的默认提示,说明默认yyerror()已正常工作。
内容的提问来源于stack exchange,提问作者Nitin Bhakta
相关产品推荐
相关产品推荐

