词法分析是编译的第一个阶段,在单词的级别上分析和翻译源程序。
有限自动机理论与正规文法、正规式之间在描述语言方面有一一对应的关系。
词法分析的任务:从左到右逐个字符地对源程序进行扫描,产生一个个单词符号。
3.1 对词法分析器的功能和输出形式
一、词法分析器的功能和输出形式
功能:输入源程序、输出单词符号。
单词符号的总类:标准字、标识符、常数、运算符、界符。
二、词法分析器作为一个独立子程序
3.2 词法分析器的设计
一、输入、预处理
二、基本字识别:超前搜索
1、基本字识别。
2、标识符识别。
3、常数识别。
4、算符和界符的识别。
三、状态转换图
(1)状态转换图是一张有限方向图。
一张状态转换图只包含有限个状态,其中有一个为初态,至少有一个终态。
一个状态转换图可用于识别(或接受)一定的字符串。其中*表示需要回退一格。
(2)几点重要限制——不必使用超前搜索:
1、所有的基本字都是保留字;用户不能用他们作为自己的标识符。
2、基本字作为特殊标识符来处理;不用特殊的状态图来识别,只要查保留字表。
3、如果基本字、标识符和常数(或符号)之间没有确定的运算符或界符作间隔,则必须使用一个空白符做间隔。
(3)状态转换图的实现
3.3 正规表达式与有限自动机
∑(字符集)中的每个元素称为字符,字符的有穷序列构成字符串,不含任何字符的序列称为空字,∑*为字上的全体,uv的连接(积),闭包,正规闭包。
3.3.1 正规式和正规集
正规集可以用正规表达式表示。
正规表达式是表示正规集的一种方法,一个字集合是正规集当且仅当他能用正规式表示。
(1)正规式和正规集的定义
正规式和正规集的递归定义:
对于给定的字母表∑
所有词法结构一般都可以用正规式描述
若两个正规式所表示的正规集相同,则称这两个正规式等价。
对正规式,下列等价成立:
3.3.2 确定有限自动机(DFA)
自动机M是一个五元式M=(S,∑,f,S0,F):
1、S为有穷状态集;
2、∑为输入字母表;
3、f为状态转换函数;
4、S0∈S是唯一一个初态;
5、F是S的一个子集:终态集(可空)。
f、状态转换矩阵、状态转换图反应的是同一个内容。
DFA M所识别的字的全体记为L(M)。
3.3.3 非确定有限自动机(NFA)
4、S0是非空的初态集。
从状态转换图看NFA和DFA的区别:
1、弧上的标记可以是∑*中的一个字,而不一定是单个字符。
2、同一个字可能出现在同状态射出的多条弧上。
对于任何两个有限自动机M和M’,如果L(M)=L(M‘),则称M与M’等价。
对于每个NFA M存在一个DFA M‘,使得L(M)=L(M’)。亦即DFA与NFA描述能力相同。
将NFA转换为DFA:
把NFA确定化——采用子集法:
∈-closure(I)为I和I经过任意条 ∈能都达到的状态。
将该表看成一个状态转换矩阵,把其中每一个子集看成一个状态。
3.3.4 正规文法与有限自动机的等价性
对于正规文法G和有限自动机M,如果L(G)=L(M),则称G和M是等价的。
正规文法:
1)右线形文法
A->αB或A->α
2)左线形文法
A->Bα或A->α
定理:
1、对每一个右线性正规文法G与左线性文法G,都存在一个有限自动机(FA)M,使得L(M)=L(G)。
2、对每一个FA M,都存在一个右线性正规文法GR和左线性文法GL,使得L(M)=L(GR)=L(GL)。
正规文法->有限自动机:
1)对于右线性文法:
2)对于左线性文法:
有限自动机->正规文法:
1)
2)
3.3.5 正规式与有限自动机的等价性
3.3.6 确定有限自动机的化简