关于《利用Lex进行词法分析》

利用Lex进行词法分析

写在前面

目前开展编译原理这门课程,许多同学说实话学不到什么东西,知识一昧地做题,我个人是不建议的。当我看到课本上有一页是来介绍利用Lex和Yacc做词法分析和语法分析的时候,我觉得可以试一试,没想到Lex使用起来还有些难度,大概花费了我一周的时间才大部分可以看懂。下面将介绍利用Lex(Flex)进行词法分析的流程。

学习流程

  1. 首先需要安装Lex

    推荐安装的博客:手把手教程-lex与yacc/flex与bison入门(一)(使用windows环境)D-Cierra, 个人觉得这篇文章中的环境配置部分写的不错,值得学习。明确以下几点。
    1. flex是lex的替代品,也大致可以说就是一样的东西。
    2. 配置环境变量的目的就是方便在任何的命令框中调用flex和bison,如果对于windows命令不是很熟悉的同学推荐将其放在环境变量中。
    3. 这里最好安装的没有中文路径的目录下,默认的目录是有些问题的。比如program file (x86)这个目录我的计算机上是识别不了的,推荐直接安装的C盘根目录下。
    4. 最后的测试可以不使用管理员身份打开,我测试的时候是没有问题的。
  2. 认识Lex

    这里推荐的博客:Lex使用指南 火雨_Nick,写的比较好,但是时间较长了,这都2023年了 但是其大体内容是完全没有问题的。
  3. 使用Lex(flex)

    1. 编辑词法分析的程序(.l / .L)程序,这里我在某个官网上找到了一个可以使用的,并且比较全面,这里不做过多的介绍,感兴趣的可以使用任何博客中的程序,但是目前看来都不是很全面。
    2. 利用Flex编译成xxx.yy.c文件。flex lex.l
    3. 利用gcc编译xxx.yy.c文件,默认生成a.exe(windows上)。
    4. 执行a.exe。
  4. 下面看我的演示过程

关于《利用Lex进行词法分析》

  1. 其他需要注意的地方

    1. 这里的gcc的version可以用gcc --version 来查看,视频里面没有。
    2. lex好像无法识别头文件,这是lex.l文件如此,但是我尊重原创没有改lex.l文件,所以大家这里需要注意,如果想要识别头文件的话,可以自行修改。
    3. y.tab.h 是我利用bison生成的,这里是和lex.l中的文件是对应的,如果大家不想使用这个文件的话,那么在lex.l中所有return的东西都需要在lex.l的前面定义,比如#define xxx 111这种。
  2. 如果非常不熟悉的人,可以直接看源码

lex免费测试用:https://github.com/zhanzhanblue/lex-using
源码:https://mbd.pub/o/bread/Y56amZ9t

你可能感兴趣的:(编辑器)