编译原理学习笔记(三)——词法分析

第三章 词法分析

1. 对词法分析器的要求

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

2. 词法分析器的设计

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

正规集:具有相同特征的字放在一起组成的集合
正规式:形式化的方式表示正规集

正规式描述单词结构的一种形式;正规集是该类单词的全集。

正规式与正规集的定义(递归的定义方法)

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

仅由有限次使用(1)(2)(3)所得到的表达式才是∑上的正规式,仅由这些正规式所表示的字集才是∑上的正规集。
|(或)、 ·(连接)、(闭包,任意有限次的自重复连接) 运算的优先级为:“ ” > “ · ” > “ | ”

两个正规式的等价

若两个正规式U和V所表示的正规集相同,则认为二者等价,记为: U = V
正规式的性质
设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

确定的有限自动机(DFA)

定义:一个确定有限自动机(DFA)M是一个五元式:M = (S, ∑, f, s0, F),其中
S是一个有限的状态集合,它的每个元素我们称为一个状态;∑是一个有穷的输入符号的字母表,它的每个元素我们称为一个输入字符;f是从 S×∑ →S的单值部分映射;s0是S的一个元素,为初始状态,它是唯一的;状态集合F是终止状态的集合,它是S的子集(可空);
表示方法:
(1)状态转换矩阵
设矩阵的行表示状态,列表示输入字符,矩阵元素是f(s,a)的值
(2)状态转换图

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

与确定的有限自动机不同的是,初始状态不唯一,同一种状态对同一输入转换的状态不同

有限自动机的等价

对任何两个有限的自动机M1和M2,若有L(M1)=L(M2),则称M1与M2等价

若M的某些结点既是初态结点又是终态结点,或者存在一条从某初态结点到某个终态结点的ε通路,那么空字ε可为M所识别
DFA是NFA的一个特例,对于每个NFA M存在一个DFA M’使得L(M) = L(M’),也就是说M和M’是等价的

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

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

由一个NFA M,构造一个正规式V
1. 在M转换图上加进X结点和Y结点,从X结点用弧ε连接M的所有初态结点,M的所有终态结点用弧ε连接到Y,得到一个NFA M’,且L(M) = L(M’)
2. 使用替换规则逐步消去M’的所有结点,直到只剩下X结点和Y结点,在消去过程中,逐步使用正规式来标记箭弧
替换规则

定理2. 对于∑上的每一个正规式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) ;
假定I是M’的状态集的子集,a ∈ ∑,定义I a a =ε_CLOSURE(J)。其中,J是所有那些可从I中的某一状态结点出发经过一条a弧而到达的状态结点的全体

由一个正规式V,构造一个DFA M
1. 构造一个拓广的转换图
2. 使用分裂规则对V进行分裂,加进新结点,直到把图转换成每条弧上标识为∑上的一个字符或ε。最后得到一个NFA M’
3. 将M’确定化

确定有限自动机的化简

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

作业:

作业

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值