VS2017中使用flex+bison

本文参考了https://blog.csdn.net/tankloverainbow/article/details/86653044

1.下载地址
https://jaist.dl.sourceforge.net/project/winflexbison/win_flex_bison-latest.zip
然后解压
2.在vs中新建一个控制台项目
3.向工程中添加win-flex_bison软件中的targets文件,具体步骤为
a. 右键单击工程 -> 在弹出的菜单中选择“生成依赖项” -> “生成自定义”
b. 在弹出的窗口下侧选择“查找现有的(F)...”,
然后进入刚才已经下好的win flex-bison文件夹下,
并依次进入\win_flex_bison-latest\custom_build_rules\文件夹中,
选择“win_flex_bison_custom_build.targets”文件。
c. 在当前对话框中出现了“in_flex_bison_custom_build.targets”文件选项,
选中该文件并点“确定”
4: 向工程中添加win_bison.exe和win_flex.exe文件所在的路径
具体步骤为:
(a)右键单击工程-> 在弹出的菜单中选择“属性” -> VC++目录->可执行文件目录
(b)左键单击“可执行文件目录”后面的白色区域,会出现下拉菜单的提示符,
选择该提示符后出现下拉菜单,选中“<编辑...>”后便会出现步骤3的对话框
(c)左键双击白色区域就能添加win_bison.exe和win_flex.exe文件所在的路径了,
这两个文件保存在win_flex_bison-latest软件的第一级目录下。

5.编译和运行lex文件
向工程中添加demo.l文件(貌似文件扩展名必须为.l)
内容如下:

%%
.|\n       ECHO;
%%
int yywrap(void)
{  
  return 1;    //如果返回0则表示要处理下一个输入流,返回1表示结束.
} 
int main(int argc, char** argv)
{
	freopen("1.txt","r",stdin);
    yylex();
    return 0;
}

按ctrl+alt+f7 重新完整编译,
此时项目目录下会自动多一个demo.flex.cpp文件,
把它也添加到项目中.

6.
项目右键->属性->C/C++->预处理器->
预定义宏,添加
;_CRT_SECURE_NO_WARNINGS  (分号和前面的项分开).
然后项目右键->属性->连接器->系统->子系统->控制台.
然后再按ctrl+alt+f7重新编译
7.在项目目录下准备一个1.txt文件
内容随意,然后ctrl+f5编译和运行,
会发现屏幕输出1.txt的内容
.说明配置和运行成功.
 

7.如果想实验flex+bison配合使用,可以试试下面的例子.
目的是求出每行两个数字的和.
则可以编写如下两个文件,
demo.l内容为:
 

%{
#include<stdlib.h>	
#include "demo.tab.h"
%}

%%
[1-9][0-9]* {
	yylval.ival=atoi(yytext);
	return NUM;
}

"+" {return '+';}
.|\n ;


%%
int yyerror(const char * format,...){
	printf("some error\n");
	return 1;
}

int yywrap(void)
{  
  return 1;  
} 

demo.y的内容为

%{
#include<stdio.h>
extern int yylex();
extern int yyerror(const char * format,...);


%}

%union{
	int ival;
}

%token<ival> NUM

%%
terms: term
	|terms term
	;

term: NUM  NUM{
	printf("%d+%d=%d\n",$1,$2,$1+$2);
};

%%
int main(int argc, char* argv[])
{
	freopen("1.txt","r",stdin);
    yyparse();
    return 0;
}

重新编译之后,项目目录下会多出3个文件
demo.flex.cpp  
demo.tab.cpp
demo.tab.h

加入到项目中,
然后重新编译和运行.
把1.txt的内容修改为
10  12
20  22

会发现输出
10+12=22
20+22=42

运行通过

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值