一、 对于词法分析器的要求
1.词法分析的任务
2.词法分析器:执行词法分析的程序
输入:源程序
输出:单词符号
3. 源程序 à 词法分析器à 单词符号
4.单词符号概念
指语言中具有独立意义的最小的语法符号
单词的种类:
1) 基本字2)标识符3)常数4)运算符5)界符
5.二元式表示单词
<单词种别,单词符号的属性值>
二、 词法分析器的设计
1. 结构
2.
1)输入缓冲区、预处理子程序
2)扫描缓冲区、扫描器
设置两个半区,设置两个指针,一个识别单词的开始,一个识别结束位置
3. 单词符号识别
1) 超前搜索
2) 直接分析法
3) 状态转化图(重点)
1. 状态转换图:一张有限方向图
2. 状态转换图的功能:识别(接受)一定的符号串(单词)
3. 状态转换图的结构
①结点:代表状态,用圆圈表示
②箭弧:状态之间用箭弧连接
③箭弧上的标记:代表在射出节点下可能出现的字符或字符串
至少要有一个终态
三、 正规表达式与有限自动机
基本思路:
à词法规则
à正规表达式
à有限自动机
à词法分析程序
1、正规式与正规集
2、正规式与正规集的定义(递归的定义方法)
(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)所得到的表达式才是∑上的正规式,仅由这些正规式所表示的字集才是∑上的正规集。
注:|(或)、 ·(连接)、*(闭包,任意有限次的自重复连接)
运算的优先级为:“ *” > “ · ” > “ | ”
3、两个正规式的等价
若两个正规式U和V所表示的正规集相同,则认为二者等价,记为:U = V
4、正规式的性质
交换律,结合律,连接积的结合律,分配律,或的交换律
我们把状态转换图再形式化一下及所谓的有限自动机、
DFA 和 NFA
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的子集
正规式与有限自动机的等价性
利用以下替换规则可以将正规式转换为有限自动机:
定理:对于∑上的每一个正规式V,存在一个∑上的DFA M,使得L(M)= L(V)
定义1:假定I是M’的状态集的子集,定义I的ε闭包ε_CLOSURE(I)为:
(a)若q∈I,则q∈ε_CLOSURE(I)
(b)若q∈I,那么从q出发经任意条ε弧而能到达的任何状态q’都属于ε_CLOSURE(I)
定义2:假定I是M’的状态集的子集,a ∈ ∑,定义Ia=ε_CLOSURE(J)
其中,J是所有那些可从I中的某一状态结点出发经过一条a弧而到达的状态结点的全体
确定有限自动机的化简(最少化)
对于这个地方,最重要的问题在于以下三点:
1) 正规式转换为NFA
2) 利用子集法对NFA确定化
3) DFA的化简(最小化)