编译原理——词法分析

文章详细阐述了词法分析器的构造步骤,包括选择词法单元,定义正则表达式,转换为有限状态自动机,特别是非确定有限自动机(NFA)和确定有限自动机(DFA)之间的关系。提到了从正则表达式到DFA的转换,并介绍了Hopcroft算法用于DFA的最小化,以优化状态数量。
摘要由CSDN通过智能技术生成

词法分析

构造词法分析器的步骤

  1. 选择词法单元
  2. 给出词法单元的正则表达式
  3. 将正则表达式转换为有限状态自动机
  4. 以有限状态自动机为基础设计词法分析程序

词法单元的模式(正则表达式)

  1. 词素(lexeme):源程序中一段连续的字符序列
  2. 词法单元(token):对于满足某一种模式的词素(lexeme),将其归为一类,该类的类名即为token的名
  3. 字母表(alphabet)是一个有限的符号集合,字母表中符号的有限序列称为串(string)
  4. 正则表达式:+代表一个或多个实例,*代表0个或者1~n个连续实例,[abc]=a|b|c,[a-e]=a|b|c|d|e

会画状态转换图

1.状态:当找到token时将状态画为接收状态,加*的接收状态表示最后读入的符号不纳入词素,即不属于此次构建token过程的单词。(一般都是跟在other后面的)
在这里插入图片描述

有限自动机(FA)

分为两类:非确定有限自动机(NFA),确定有限自动机(DFA)

非确定有限自动机(NFA)
  1. NFA的转换表
    在这里插入图片描述
  2. DFA(确定有限自动机):
    1. DFA是特殊的NFA,没有空的转换,对于每个状态和输入符号a,有且仅有一条标号为a的离开该状态的边
    2. 每一个NFA都有一个与之等价的DFA
    3. 正则表达式=>NFA=>DFA
  3. RE=>NFA(Thompson算法)
    1. 总结就是归纳合并(多用空转换来换到不同的状态)
    2. 在这里插入图片描述
  4. NFA=>DFA
    1. 基本思想:
      1. 目标DFA的每个状态和NFA的状态子集对应(即合并前的各个状态)
      2. 目标DFA读入a1, a2, …, an后到达的状态对应于NFA从开始 状态出发沿着a1, a2, …, an可能到达的所有状态的集合
      3. 如果其中包括多个对应于不同模式的NFA接受状态, 则表示当前的输入前缀对应于多个模式,存在冲突。解决方式:找出第一个列出的这样的模式,将该模式作为此DFA接受状态的输出,即按序号在最前的排
    2. 三个函数
      在这里插入图片描述
      3. 算法:笔记上
    3. Hopcorft算法:DFA的最小化,得到状态数量最少的DFA
      1. 如果存在串x,使得从状态s_1和s_2,一个到达接受状态而另一个到达非接受状态,那么x就区分了s_1和s_2
      2. hopcroft算法的基本思想就是根据每个集合中原DFA状态之间是否可区分将之分裂,直到每个集合都成为等价类为止(即集合间均不可区分),然后从每个等价类中选取一个代表,构造新的DFA
      3. 算法: 在这里插入图片描述
        细分的依据:在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值