显式禁用追踪后Bison/Yacc仍打印调试消息的问题咨询
解决方案
你看到的调试输出属于Flex词法分析器的追踪日志,而非Bison的语法解析调试信息,因此仅修改Bison相关的调试配置不会生效,可按以下步骤处理:
- 关闭Flex的调试选项,两种方式二选一即可:
- 在Flex代码的头部%option段添加
%option nodebug配置,修改后的头部代码如下:
%option noyywrap nodebug- 在Flex的生成命令中添加
--nodebug参数,修改后的生成命令如下:
start /B /WAIT /D "%(RootDir)%(Directory)" win_flex.exe --outfile="%(Filename).flex.cpp" --wincompat --nodebug "%(Filename)%(Extension)" exit /b %errorlevel% - 在Flex代码的头部%option段添加
- 清理旧的生成缓存:手动删除项目目录下由flex/bison自动生成的
.flex.cpp、.tab.cpp、.tab.h文件,避免Visual Studio复用之前生成的带调试代码的旧文件。 - 重新生成项目:执行VS的「清理解决方案」-「生成解决方案」操作,编译后的程序就不会再输出词法追踪日志。
你之前配置的YYDEBUG=0、%define parse.trace false都是仅作用于Bison的配置,对Flex的调试输出没有控制效果,因此之前的操作没有生效。
内容的提问来源于stack exchange,提问作者BenLewis
相关产品推荐
相关产品推荐

