VS2022调试Win-flex bison生成的C语言程序

本文介绍了如何在VisualStudio2022(VS2022)环境下调试由Win-flexbison工具生成的C语言程序。首先,创建空项目,然后编写lex程序,接着使用win_flex生成C代码。在VS2022中添加生成的源文件,处理预编译指令,并解决可能出现的fopen安全警告。最后设置断点进行调试。
摘要由CSDN通过智能技术生成

Win-flex bison是flex和bison在Windows平台的一个移植版本,它支持flex(快速词法分析器)和bison(GNU解析器生成器)。

Win-flex bison的下载及安装可参看“Windows中使用Lex(Win flex-bison)”( https://www.toutiao.com/article/7129772321669431815/?log_from=ea0fcd1930299_1684406858264 )。

本文简单介绍一种在VS2022调试Win-flex bison生成的C语言程序的方法。

大致步骤如下:

1. 使用VS2022创建空项目

使用VS2022创建名为MyProject的空项目。项目所在目录为“D:\temp\MyProject”。

2. 编写lex程序(文本文件)

在目录“D:\temp\MyProject”中,使用文本编辑器(比如Notepad++)创建名为“a.l”文本文件(即lex程序),内容如下:

%{

int num_lines = 0, num_chars = 0;

%}

%%

\n ++num_lines; ++num_chars;

. ++num_chars;

%%

int main()

{

yyin = fopen("D:/temp/MyProject/a.l","r");

yylex();

fclose(yyin);

printf("lines = %d, chars = %d\n", num_lines, num_chars);

}

int yywrap()

{

return 1;

}

3. 使用win_flex生成C语言程序

在命令行窗口输入命令(wincompat参数,命令lex编译器创建Windows兼容的程序):

D:\Programs\win_flex_bison-latest\win_flex.exe --wincompat --outfile=D:\temp\MyProject\a.yy.c D:\temp\MyProject\a.l

正常执行后,生成文件“D:\temp\MyProject\a.yy.c”,这个文件较大,内容较多;生成的程序的核心函数是yylex,其函数定义由宏YY_DECL替代;其中的main函数就是“a.l”中定义的那个。

经上述步骤之后,目录“D:\temp\MyProject”中的内容如下图所示:

4. 在VS2022调试程序a.yy.c

在VS2022的中(即项目的“解决方案资源管理器”视图),将a.yy.c添加到上文创建的空项目MyProject中。为了达到更好的调试效果,需要将预编译指令“#line”注释掉,因为使用预编译指令“#line”时,调试时会到其使用的文件中(为了提高效率,可以使用替换窗口将字符串“#line”替换为“//#line”)

 

然后,在程序中感兴趣的地方设置断点,按正常调试方法进行调试即可。

 

5.若干错误的解决方法
5.1.error C4996

error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

错误解决方法可参看网页: 错误 C4996 ‘fopen‘: This function or variable may be unsafe. Consider using fopen_s instead. To disabl_fopen': this function or variable may be unsafe. c_R-G-B的博客-CSDN博客 

在项目属性对话框的预处理器中添加“_CRT_SECURE_NO_WARNINGS”。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexabc3000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值