第三章 词法分析

一、知识点

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

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

l  词法分析器的要求

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

n  单词的种类(基本字、标识符、常数、运算符、界符)

n  单词表示形式

二元式:<单词种别,单词符号的属性值>

 

l  词法分析器的设计

(1)输入,预处理(2)单词符号的识别:超前搜索。(关键字识别,标识符识别,常数的识别,算符和界符的识别)

(3)状态转换图

1.转换图是一张有限方向图 ,其中节点代表状态,用圆圈表示,状态之间用箭弧链连接。一张转换图包含有限个状态(即有限个结点),其中有一个被认为是初态,有一个是终态(用双圆圈表示)。

2.一个状态装换图可用于识别一定的字符串


n  词法分析器的结构

3.正规表达式与有限自动机  

   程序语言的描述(词法规则,正规表达式,有限自动机,词法分析程序)                              

1.正规式与正规集的递归定义

   (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)所得到的表达式才是∑上的正规式,仅由这些正规式所表示的字集才是∑上的正规集。  

2.正规集的关系

        设U,V,W是上的∑正规式
        (1) U | V = V | U 或的交换律
        (2) U | ( V|W ) = ( U|V ) | W 或的结合律
        (3) U ( VW ) = ( UV ) W 连接积的结合律
        (4) U ( V | W ) = ( UV ) | ( UW ) 分配律
                 ( V | W ) U = VU | WU 

        (5) εU = Uε = U

3.确定有限自动机(DFA)

(1)S是一个有限的状态集合,它的每个元素我们称为一个状态。
(2)∑是一个有穷的输入符号的字母表,它的每个元素我们称为一个输入字符。
(3)f是从 S×∑ →S的单值部分映射。
(4)s0是S的一个元素,为初始状态,它是唯一的。
(5)状态集合F是终止状态的集合,它是S的子集(可空)。 

一个确定有限自动机(DFA)M是一个五元式(S, ∑, δ, s0, F).

DFA M识别功能:对于∑*中任何字α,如果存在一条从初态结点到某个终态结点的道路,这条路上所有的标识符连成的字等于α ,则α可被DFA M所识别(接受,读出)。

4.非确定有限自动机

一个非确定有限自动机(NFA)M是一个五元式(S, ∑, δ, s0, F).

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

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

5.正规式与有限自动机的等价性。

(1)定理1:对于任何∑上NFA M都可构造一个∑上的正规式V,使得  L(V) = L(M) 。其中,L(M)是∑上NFA M所能识别的字的全体L(V)是∑上的正规集。

(2)定理2. 对于∑上的每一个正规式V,存在一个∑上的DFA M,使得L(M) = L(V)。 

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)一分为二

二、应用




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值