编译原理-词法分析

词法分析1

词法分析器的设计
任务从左至右逐个字符对源程序进行扫描,产生一个单词符号
词法分析器:执行词法分析的模块
功能:输入源程序、输出单词符号

单词符号种类:
基本字:begin,repeat,for
标识符:用来表示各种名字,如变量名,数组名和过程名
常数:各种类型的常数
运算符:+,-,*,/
界符:逗号,分号,括号和空白

输出单词符号表示形式:(单词种别单词自身的值
单词种别通常由整数编码表示:

词法分析器在编译器中的地位

在这里插入图片描述

词法分析器的结构

在这里插入图片描述

扫描缓冲区

存放了经过预处理的比较规范的字符串,扫描器在该缓冲区中识别单词符号
扫描器通过起点指示器和搜索指示器扫描
起点指示器:指向马上要识别的单词的开始的位置
搜索指示器:从开始位置前进寻找单词结尾

为了防止字字符串未完全扫描到,将扫描区分成两区域,每次预处理程序只处理并送入半个区的字符,两个区互补使用。如果一个半区找不到单词结尾,下一个半区一定能找到。且半区长度一定是程序允许的单词的最大长度
在这里插入图片描述

状态转换图

状态转换图是一张有限方向图
结点代表状态,用圆圈表示
状态之间用箭头连结,肩头上的标记代表射出结状态下可能出现的输入字符字符类
一个状态转换图包含有限个状态,其中有一个是初态,至少要一个终态用双圈表示
在这里插入图片描述
状态1出发,读入数字字符转入状态2,在状态2,如果继续读入数字字符就会回到状态2,直到读入不是数字的字符(其他字符)转入状态3,双圈代表终态星号表示最后读入的字符不属于刚才读入单词需要退回
在这里插入图片描述

在这里插入图片描述
不必使用超前搜索
在这里插入图片描述

状态转换图实现

不含回路的分叉结点

在这里插入图片描述

含回路的状态结点

在这里插入图片描述

终态结点

在这里插入图片描述


词法分析2

词法分析器功能:输入源程序,输出单词符号
词法分析器设计:
1、对给出程序设计语言的但此规范-单词表
2、对照单词表设计识别该语言所有单词的状态转换图
3、根据状态转换图编写词法分析程序

正规式和正规集

正规式即是词法规则一种形式化描述,对应的单词集合称为正规集
正规集可以由正规式表示
正规式是表示正规集的一种方法
一个字集合是正规集当且仅当它能用正规式表示

也叫做字符串):是指字母表中的字符多构成的有穷序列
字符:字母表中每个元素

在这里插入图片描述
在这里插入图片描述

ε \varepsilon ε 是一个字长度为0且不包含任意字符的字符串
在这里插入图片描述
在这里插入图片描述

正规式等价性

若两个正规式所表示的正规集相同,则称这两个正规式等价
在这里插入图片描述

正规式的性质

在这里插入图片描述


确定有限自动机(DFA)

确定有限自动机M是一个五元式 M M M={ S S S ∑ \sum , f f f , S 0 S_{0} S0, F F F}
在这里插入图片描述
在这里插入图片描述
对于字母表中的任何字 α \alpha α,若存在一条从初态到某一终态的道路,且这条路上所有弧上标记符连成的等于 α \alpha α,则称 α \alpha α为DFA M所识别。所识别字的全体称为L(M)
特殊的
A : q0到q0是一个从初态到终态的通路,通路上的标记所构成的字符串就是 ϵ \epsilon ϵ
B: 初态再q0,有无其他状态,永远找不到一条从初态出发到终态的道路,不能完成任何字识别,识别字的全体就是一个空集 ϕ \phi ϕ
在这里插入图片描述


非确定有限自动机(NFA)

非确定有限自动机M是一个五元式 M M M={ S S S ∑ \sum , f f f , S 0 S_{0} S0, F F F}
在这里插入图片描述
不同
1、NFA可以有多个初态
2、弧上标记可以是字母表中一个(或者一个正规式、字符)
3、同一个字可能出现再同状态下射出的多条弧
在这里插入图片描述
对于字母表中的任何字 α \alpha α,若存在一条从初态到某一终态的道路,且这条路上所有弧上标记符连成的等于 α \alpha α(忽略那些标记为 ϵ \epsilon ϵ的弧),则称 α \alpha α为NFA M所识别。所识别字的全体称为L(M)


DFA和NFA等价性

对于任何两个有限自动机 M M M M ′ M^{'} M,如果L( M M M)=L( M ′ M^{'} M),则称 M M M M ′ M^{'} M等价
对于每个NFA M都会存在一个DFA M ′ M^{'} M,使得L( M M M)=L( M ′ ) M^{'}) M)
思路:两者差别
在这里插入图片描述
假定 N F A NFA NFA M M M={ S S S ∑ \sum , f f f , S 0 S_{0} S0, F F F},我们对M的状态图进行改造(NFA->DFA):
1引进新的状态结点X和Y,X射到初态,从终态射到Y,消除二者在初始状态的差异,解决唯一性问题
在这里插入图片描述
2引入新状态,简化弧上标记
在这里插入图片描述
3子集法,NFA确定化,解决$\epsilon$弧和转换关系

I I I是状态集的子集,定义 I I I ϵ − \epsilon- ϵ闭包 ϵ − c l o s u r e ( I ) \epsilon-closure(I) ϵclosure(I)

ϵ − c l o s u r e ( I ) \epsilon-closure(I) ϵclosure(I) = = = I ∪ I\cup I{ s ′ ∣ 从某个 s ∈ s^{'}|从某个s\in s从某个s I I I出发经过任意条 ϵ \epsilon ϵ弧能到达 s ′ s^{'} s}
※自身※ 和 ※自身集合中经过空字到达的结合※

设a是字母表中的字符,定义: I a = ϵ − c l o s u r e ( J ) I_{a}=\epsilon-closure(J) Ia=ϵclosure(J)
其中J是I中某个状态出发经过一条a弧所到达的状态集合

举例

确定化
不失一般性,设字母表只包含两个a和b,构造计算状态转换表
在这里插入图片描述
在这里插入图片描述
将表堪称状态转换矩阵,子集视为一个状态
初态是 ϵ − c l o s u r e ( \epsilon-closure( ϵclosure({X} ) ) )红下划线
终态是含有原终态Y的子集,蓝下划线
在这里插入图片描述


确定有限自动机化简

对于DFA M,寻找一个状态数比M少的DFA M ′ M^{'} M,使得L(M)=L( M ′ M^{'} M)
假设s和t为M的两个状态,称s和t等价:如果从状态s能读出某个字 α \alpha α而停止于终态,那么同样,从t出发也能读出 α \alpha α而停止于终态
在这里插入图片描述
在这里插入图片描述

词法分析3

为NFA构造正规式

非确定有限自动机M是一个五元式 M M M={ S S S ∑ \sum , f f f , S 0 S_{0} S0, F F F}
加上两个状态X和Y,显然L(M)=L( M ′ M^{'} M)
反复使用下面三条规则,逐步消去结点,直到只剩下X和Y为止
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
*:用0次或者无限次

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值