如何在 Linux 上调试 LEX/FLEX 程序

use*_*047 4 c linux windows lex flex-lexer

如何在 Linux 上调试 LEX/FLEX 程序?编译和运行的代码如下:

lex example.l
gcc lex.yy.c -lfl
./a.out
<Enter your input>
Run Code Online (Sandbox Code Playgroud)

令牌是否-d可以调试 LEX/FLEX?如果是,我需要将其包含在代码中的哪一行进行编译?

Chr*_*odd 5

-d您在 flex 命令行上使用(lex -d example.l假设您的 lex 实际上是 flex,它在 Linux 上)。默认情况下,这将启用调试模式,该模式将打印出有关每个令牌被识别的信息。

您可以通过更改全局变量在词法分析器中动态打开和关闭调试模式yy_flex_debug- 将其设置为零将关闭调试打印并将其设置为非零将其重新打开。

即使您不使用-d编译生成的 C 代码-DFLEX_DEBUG,您也可以包含调试代码,尽管在这种情况下yy_flex_debug将默认为 0,因此您需要在某处将其设置为非零(在您的 main 函数中) ?或其他地方)来启用调试——为程序提供一个命令行选项来设置它是一个很好的方法。