第三章 词法分析

一、知识点

词法分析的任务:从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为由单词符号串组成的程序。

词法分析器的结构:输入缓冲区、预处理子程序、扫描缓冲区、扫描器。

单词符号的识别:

1. 超前搜索:在单词识别的过程中,通过向前多读几个符号的形式,准确的进行单词的识别

一旦确定识别到的单词之后,需要进行扫描指针的回退,保证单词识别工作的顺利进行

2. 直接分析法:根据读来的第一个字符的种类分别转到各种子程序处理。这些子程序功能就是识别以相应字符开头的各种单词。

3. 状态转换图法:

(1)状态转换图:一张有限方向图。

(2)状态转换图的功能:识别一定的符号串(单词)。

(3)状态转换图的结构
①结点:代表状态,用圆圈表示
②箭弧:状态之间用箭弧连接

③箭弧上的标记:代表在射出节点下可能出现的字符或字符串

正规式与正规集的定义:
(1)ε和φ是∑上的正规式,它们所表示的正规集分别为{ε}和φ
(2)任何a∈∑,是∑上的一个正规式,他所表示的正规集为{ a }
(3)假定U和V都是∑上的正规式,他们所表示的正规集分别记为L(U)和L(V),那么
(a) (U|V)是正规式,所表示的正规集为L(U)∪L(V)
(b) (UV)是正规式,所表示的正规集为L(U) · L(V)(连接积)
(c) (U)*是正规式,所表示的正规集为 (L(U))*(闭包)

仅由有限次使用(1)(2)(3)所得到的表达式才是∑上的正规式,仅由这些正规式所表示的字集才是∑上的正规集。

确定的有限自动机(DFA)

定义:一个确定有限自动机(DFA)M是一个五元式:
M = (S, ∑, f, s0, F),其中
(1)S是一个有限的状态集合,它的每个元素我们称为一个状态
(2)∑是一个有穷的输入符号的字母表,它的每个元素我们称为一个输入字符
(3)f是从 S×∑ →S的单值部分映射
(4)s0是S的一个元素,为初始状态,它是唯一的
(5)状态集合F是终止状态的集合,它是S的子集(可空)

非确定的有限自动机(NFA)

定义:一个非确定有限自动机(NFA)M是一个五元式
M = (S, ∑, f, S0, F),其中
(1)S是一个有限的状态集合,它的每个元素我们称为一个状态
(2)∑是一个有限的输入符号的字母表,它的每个元素我们称为一个输入字符
(3)f是从S×∑*→2S 的部分映射,其中,2S表示S的幂集合(所有S的子集组成的集合)(f是非单值的M是非确定)
(4)状态集合S0是初始状态集合,它是S的子集

(5)状态集合F是终止状态的集合,它是S的子集

化简DFA的一般步骤
(1) 检查状态转换函数是否为全函数。
所谓全函数,是指每个状态对每个输入符号都有转换
若不是全函数,可以引入一个“死状态”d,d对所有输入符号都转换到d,如果状态s对输入符号a没有转换,那么加上从s         到d的a转换。
        (2) 用化简算法进行化简

        (3) 去掉死状态

DFA化简算法

(1)基本思想:把M的状态集分割为一些不相交的子集,使得任何不同的两个子集状态都是可区别的,而同一个子集中的任何状态都是等价的,最后让每个子集选一个代表,同时消去其他等价状态。

(2) 化简算法
①对M的状态集S进行划分:
把S的终态和非终态分开,分成终态集合非终态集,形成基本分划П,显然这两个子集是可区别的。
②假定到某个时候П含有m个子集,
记П={I(1),I(2),… I(m)}
并且,属于不同子集的状态是可区别的。
检查П中的每个I(i)看能否进一步划分:
对于某个I(i)
另I(i)={q1 ,q2 ,…,qk}

若存在一个输入字符a使得I(i)a不全包含在现行П的某个子集I(j)中,就将I(i)一分为二

二、应用


三、学习感受

通过对第三章的学习,让我了解了词法分析器的结构,其中重点是状态图的转换法。学习了正规式与正规集,以及把状态转换图再形式化——有限自动机,分为DFA和NFA,对于DFA的确定化和最小化是有难度的。课上老师讲的时候自己能听明白,老师带着讲例题自己也能理解,但当自己去做课后题的时候,却一脸懵,自己理解的不够透彻,自己加强做题实践就能更可以更进一步。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值