利用Lex进行词法分析
写在前面
目前开展编译原理这门课程,许多同学说实话学不到什么东西,知识一昧地做题,我个人是不建议的。当我看到课本上有一页是来介绍利用Lex和Yacc做词法分析和语法分析的时候,我觉得可以试一试,没想到Lex使用起来还有些难度,大概花费了我一周的时间才大部分可以看懂。下面将介绍利用Lex(Flex)进行词法分析的流程。
学习流程
-
首先需要安装Lex
推荐安装的博客:手把手教程-lex与yacc/flex与bison入门(一)(使用windows环境)D-Cierra, 个人觉得这篇文章中的环境配置部分写的不错,值得学习。明确以下几点。- flex是lex的替代品,也大致可以说就是一样的东西。
- 配置环境变量的目的就是方便在任何的命令框中调用flex和bison,如果对于windows命令不是很熟悉的同学推荐将其放在环境变量中。
- 这里最好安装的没有中文路径的目录下,默认的目录是有些问题的。比如program file (x86)这个目录我的计算机上是识别不了的,推荐直接安装的C盘根目录下。
- 最后的测试可以不使用管理员身份打开,我测试的时候是没有问题的。
-
认识Lex
这里推荐的博客:Lex使用指南 火雨_Nick,写的比较好,但是时间较长了,这都2023年了 😄 但是其大体内容是完全没有问题的。 -
使用Lex(flex)
- 编辑词法分析的程序(.l / .L)程序,这里我在某个官网上找到了一个可以使用的,并且比较全面,这里不做过多的介绍,感兴趣的可以使用任何博客中的程序,但是目前看来都不是很全面。
- 利用Flex编译成xxx.yy.c文件。flex lex.l
- 利用gcc编译xxx.yy.c文件,默认生成a.exe(windows上)。
- 执行a.exe。
-
下面看我的演示过程
关于《利用Lex进行词法分析》
-
其他需要注意的地方
- 这里的gcc的version可以用gcc --version 来查看,视频里面没有。
- lex好像无法识别头文件,这是lex.l文件如此,但是我尊重原创没有改lex.l文件,所以大家这里需要注意,如果想要识别头文件的话,可以自行修改。
- y.tab.h 是我利用bison生成的,这里是和lex.l中的文件是对应的,如果大家不想使用这个文件的话,那么在lex.l中所有return的东西都需要在lex.l的前面定义,比如#define xxx 111这种。
-
如果非常不熟悉的人,可以直接看源码
lex免费测试用:https://github.com/zhanzhanblue/lex-using
源码:https://mbd.pub/o/bread/Y56amZ9t