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

news/2024/11/15 1:19:18/

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”。

 

 


http://www.ppmy.cn/news/73621.html

相关文章

Rust 笔记:开发环境搭建与 rust 工具介绍

Rust 笔记 开发环境搭建与 rust 工具介绍 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/artic…

springcloud-alibaba (02)nacos学习笔记

nacos 一,介绍1. 什么是Spring Cloud Alibaba Nacos2. Nacos的特点和优势 二,安装和配置三,创建项目第一步,创建父工程第二步,创建基础公共模块第三步,创建服务模块第四步,开启多个实例 四&…

HTTP的状态码

HTTP 常⻅的状态码有哪些? 那「HTTP 是用于从互联网服务器传输超文本到本地浏览器的协议」,这种说法正确吗? 1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。 2xx 类状态码表示服务器成功处理了客户端的请求&a…

晶飞FLA5000光谱仪.FlaSpec格式解析批处理导出CSV文件

引言 首先说明下晶飞上位机软件存在的问题,实验所采用的FLA5000型号光谱仪,光谱波段从280-970nm,FWHM值为2.4nm。 1、上位机软件中的光谱数据复制功能基本是废的,最多只能到599.9nm,后面的数据全部消失。 2、上位机软…

MySQL—日志

文章目录 一、错误日志二、二进制日志2.1 介绍2.2 格式2.3 查看2.4 删除 三、查询日志四、慢查询日志 一、错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据…

Java-线程安全的四个经典案例和线程池

单例模式 有些对象,在一个程序中应该只有唯一 一个实例(光靠人保证不靠谱 借助语法来保证) 就可以使用单例模式 在单例模式下 对象的实例化被限制了 只能创建一个 多了的也创建不了 单例模式分为两种:饿汉模式和懒汉模式 饿汉模式…

防洪评价报告编制方法

新导则下防洪评价报告编制方法及洪水建模一:《防洪评价报告编制导则解读河道管理范围内建设项目编制导则》(SL/T808- 2021) 1.规范适用范围; 2.规范名词概念; 3.防洪评价计算类别及分析; 4.消除和减轻影…

离散数学_九章:关系(5)

🚩9.5 等价关系 1、等价关系(Equivalence Relations)等价关系等价的元素📘例1:模m同余 📘例2:字符串 📘例3:整除 2、等价类(Equivalence Classes&#xff09…