课程:编译原理(双语)
实验要求:构造tiny语言的词法分析器(扫描器),要求利用第三方的lex工具进行构造。
参考文章:手把手教程-lex与yacc/flex与bison入门(一)(使用windows环境)-CSDN博客
一、配置lex
1、下载
在D盘创建文件夹lex,在lex下下载文件 ComplierComplier.zip(来自参考文章)并解压缩。
2、配置环境变量Path
打开文件夹,找到bison.exe、flex.exe、gcc.exe的路径
以我为例:路径分别为 D:\lex\ComplierComplier\ComplierComplier\GnuWin32\bin(bison和flex)、D:\lex\ComplierComplier\ComplierComplier\MinGW\bin(gcc)
将两个路径分别配置到系统环境变量Path中:
右键 “此电脑” ,点击 “属性” ,进入 “高级系统设置” ,点击 “环境变量” ,找到 Path变量,进入 “编辑” 界面 ,将上述两个路径添加至底部。
至此,环境配置成功。


二、测试是否配置成功
以管理员身份打开c
Win + R 打开窗口,输入cmd、Ctrl + Shift + enter
在cmd窗口输入 (注意区分大小写):
前两个是大写V,第三个是小写v
flex -V
bison -V
gcc -v
如果显示以下内容,则为配置成功。
三、编译简单的flex代码
创建一个 “_demo” 文件夹
在 _demo 文件夹中创建一个 test.txt,输入以下代码并保存(代码来源参考文章)
代码意义:
在cmd中输入一段文本,它会自动分辨出其中的整数内容,并输出出来。它会忽略其他内容,包括小数。
%{
#include <stdio.h>
%}
%%
([1-9]+[0-9]*)|[0] ECHO;
[0-9]+\.[0-9]+
[a-zA-Z]+
.
%%
int main(int argc, char **argv)
{
yylex();
yywrap();
}
int yywrap()
{
return 1;
}
将 test.txt 后缀名改为 .l ,按照 步骤3 ,以管理员身份进入cmd,再进入 test.l 的路径
以我为例,输入以下代码
d:
cd D:\lex\_demo
出现以下内容则为成功进入 _demo 文件夹
成功进入后,输入以下代码:
flex test.l //此后会生成C文件lex.yy.c
gcc lex.yy.c //使用gcc编译成可执行文件
成功执行后,在 _demo 文件夹下会生成两个文件:a.exe 和 lex.yy.c,其中 a.exe 即为要执行的文件。
成功生成两个文件后,在 cmd 窗口中输入 a.exe
在窗口中随意输入测试数据,我输入的:
9
wo zui xi huan de shu zi shi 8.990
wo xi huan 9.88$
wo xi huan 9
得到的结果:
分别为:9、空行、空行、9(只输出整数内容)
四、总结
Lex不像其他,例如: VS、IDEA 那样在官方平台直接下载安装比较简单,Lex感觉更像一个插件。
一开始搜索配置教程,基本上都是结合 VS 去实现,我也跟着一个教程做过,但是最后还是失败,显示的错误是 有未解析的符号 ,博主上也写了该问题的对应解决方案,尝试后还是失败,最终还是选择了直接在Windows上配置,利用cmd进行编译,过程也比较简单易懂。
第一次写博客,爽!