windows10下词法分析器flex的安装使用编译和运行

Posted ase265

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows10下词法分析器flex的安装使用编译和运行相关的知识,希望对你有一定的参考价值。

《编译工程》

今天老师讲到了关于编译器工作的第一步:词法分析。
并介绍了用于词法分析的工具,其中提到了flex
flex全称——fast lexical analyzer generator,即快速词法分析器生成器

flex的输入要么是文件要么是标准输入(控制台等)
而其输入的文件由正则表达式和C代码的形式组成
flex的输入文件由三段组成,由两个%%这样的符号将文件划分为三部分

定义
%%
规则
%%
用户代码(C代码)

其中,定义分为两种:一种是变量声明,另一种是正则表达式声明
变量声明使用%{ 要声明的变量 %},声明格式与C语言相同
而正则表达式声明就不需要使用%{%}这个符号,直接定义即可,声明格式为:表达式名称:表达式

规则部分:一个规则一行,每行有两部分构成:
正则表达式 {动作函数}

代码部分:用户自定义过程,直接复制到lex.yy.c末尾

那么进入正题,windows下怎么安装flex呢?
下载网址:http://gnuwin32.sourceforge.net/packages/flex.htm

技术图片
进入网址后,下载“Complete package,except sources”,点击“Setup”链接即可。

下载完成后,将得到一个exe文件,直接安装。
全都安装好以后还要设置一下环境变量Path,即需要将flex的安装目录添加到Path中
打开右键->我的电脑→属性→高级系统设置->环境变量->系统变量->Path->编辑->新建->输入flex的安装目录具体到bin目录下->确定
退出后,打开CMD,输入flex - V,记住这里的v要大写。若安装成功就会显示flex的版本号

准备flex的输入文件find.l,给文件的内容为:

%%
[+-]?[0-9]+ ?{ printf("%s ", yytext); } ?/* Print integers /
????{?}??/
newline /
. ????{?}??/
For others, do nothing */
%%

void main(){
????yylex();
}

int yywrap(){
????return 1;
}

很显然,这段代码是用来匹配数字的,打开CMD,切换工作目录到当前文件下,输入命令:

flex find.l

将会得到一个lex.yy.c文件,lex.yy.c文件的内容很丰富
而在windows中想要编译.c文件则需要安装MinGW编译器(当然,编译.c文件不是只有MinGW一种选择,只是这里使用MinGW编译器罢了)
该编译器可直接前往官网下载,同样下载后需要将编译器的安装目录(需要具体到bin目录下)添加到Path中

添加完毕后,打开CMD,并切换到lex.yy.c文件的目录下

gcc lex.yy.c

执行命令后,将会得到a.exe可执行文件
a.exe文件既可以接受标准输入,也可以接受文件输入
接受标准输入:
技术图片

接受文件输入
技术图片

可以看到编写的find.l文件确确实实起到了匹配数字的作用



以上是关于windows10下词法分析器flex的安装使用编译和运行的主要内容,如果未能解决你的问题,请参考以下文章

编译原理学习一:flex,bsion工具使用

编译原理实战——使用Lex/Flex进行编写一个有一定词汇量的词法分析器

词法分析器Flex学习1 - Flex识别关键字

词法分析器Flex学习1 - Flex识别关键字

window下是否存在number,毫无节操的词法分析[js面试题]

window下是否存在number,毫无节操的词法分析[js面试题]