有穷自动机与词法分析器
第三章词法分析及有穷自动机-PPT
={a}*={ε,a,aa,aaa,、、…}
复 6o 合 7o
8o
ba* a| ba* (a|b)*
L(ba*)=L(b) L(a*) ={b,ba,baa,baaa,……}
L(a| ba*)=L(a)∪L(ba*)={a,b,ba,baa,……}
L((a|b)*)= (L(a|b))*={a,b}*={ε,a,b,aa,ab,…… 所有ab组成得串}
……
§3 正规式与有穷自动机
❖ 为了进一步讨论词法分析程序得自动生成,需 要将状态转换图得概念加以形式化;同时将由 正规文法描述得单词由正规式描述,可利用有 穷自动机生成词法分析程序。
一、正规式与正规集
语言得单词结构不仅由正规文法描述,还可以 由正规式描述。
例:<标识符>∷=<字母>|<标识符><字母>|<标识符>< 数字>
单词:指语言中具有独立意义得最小语法单位。 语言中得单词符号:
一般可归结为五种:
❖ 保留字(基本字):如if, for, and 等――个数确定 ❖ 标识符:表示常量、变量、类型、过程等名称――个数不确定 ❖ 常数:如34,-0、37等――个数不确定 ❖ 运算符:如+,-,*,/,< 等――个数确定 ❖ 界线符:如逗号,分号,括号等――个数确定
④ 以识别符号为终止状态。
例:设有正规文法G[Z]:
Z∷= U0|V1
U∷=Z1|1
V∷=Z0|0
(描述得语言为L(G)={01,10}
+
)
则状态转换图如下:
新增加开 始状态S
1 S
0
U 1
0
V
0 Z
第三章 词法分析和有穷自动机
ε
ε
2
ε
6 b
ε
f
3.4.5 DFA的最小化(化简)
• 最少状态DFA 对于一个DFA M,存在一个最少状态DFA M’, 使得L(M’)=L(M)。 (a)没有多余状态 (b)没有两个状态是互相等价的 结论: 一个NFA 对应的DFA不惟一 但它对应的最小化DFA不计同构是惟一的
• 多余状态的例子 a
例
正规式 φ
ε
a a|b ab (a|b)(a|b) a* ba* (a|b)*
正规集 φ {ε } {a} L(a|b)=L(a) ∪ L(b)={a,b} L(ab)=L(a)L(b)={ab} {aa,ab,ba,bb} { ε ,a,aa,aaa,…} {b,ba,baa,baaa,…} {所有由a和b组成的字}
• 例 DFA M=({0,1,2,3},{a,b}, f ,0,{3}) 其中 f 为: f (0,a)=1 f (0,b)=2 f (1,a)=3 f (1,b)=2 f (2,a)=1 f (2,b)=3 f (3,b)=3 f (3,a)=3
3.4.1 确定有穷自动机(DFA) • DFA的表示方法 两种:矩阵和图形的方式 矩阵称为状态转换矩阵 图形称为状态转换图
• NFA M所接受字符串的集合称为NFA M所能 识别的语言,记为L(M)。 • NFA的确定化 DFA是NFA的特例
NFA M存在与之等价的DFA M’,L(M)=L(M’) 与某一NFA等价的DFA不惟一 正规式 NFA 正规文法 DFA
3.4.4 NFA 确定化
• 状态集合I的空闭包:ε -closure(I) 它是一个状态集合,包含 : ♠ I中任何状态q ♠ I中任何状态q经任意条空弧到达的任何状态 • 状态集合I的a弧转换:Ia 定义一个状态集J,J是I中所有状态经一条a 弧到达的状态的全体 Ia=ε -closure(J)
sun编译原理第3章词法分析与有穷自动机第4 8讲 优质课件
={a,b}*{aa,bb}{a,b}*
练习:若S=a|bb,则L((a|bb)*)=?
2019/11/24
信息学院 孙丽云
5
第3章 词法分析与有穷自动机
■正规式中运算的优先级
括号优先,* 次之,•(连接)再次之,| 最后 例:a|bc* ≌ a|(b(c*))
ab|c*d ≌ (ab)|((c*)d)
其中 U、W∈N t∈T 其中 U、W∈N t∈T
2019/11/24
信息学院 孙丽云
8
第3章 词法分析与有穷自动机
■正规文法到正规式的转换
(1)将正规文法中的每个非终结符表示成关于它的一 个正规式方程,获得一个联立方程组。 (2)依照求解规则:
若x=αx|β(或x=αx+β),则解为x=α*β; 若x=xα|β(或x=xα+β),则解为x=βα*; 以及正规式的分配律、交换律和结合律求关于文法 开始符号的正规式方程组的解. 这个解是关于该文法开始符号S的一个正规式,显然 它表示了由该正规文法所描述的语言。
信息学院 孙丽云
2
第3章 词法分析与有穷自动机
3.3 语言单词符号的两种定义方式 多数程序设计语言的单词符号都能用正规文法或正规 式来定义。
■ 正规式与正规集
设有字母表={a1,a2,…,an},在字母表上的正 规式和它所表示的正规集可用如下规则定义: (1) Φ是上的正规式,它所表示的正规集是Φ, 即空集{} (2)ε是上的正规式,它所表示的正规集是{ε} (3)ai是上的正规式,它所表示的正规集由单个符 号ai组成,即{ai}
③ (e1)*是上的一个正规式,它所表示的正规集为 L((e1)*) =L((e1))*
正规式描述了单词符号的构成规则,正规集是正规 式能描述的所有的单词的集合。
有穷自动机在词法分析器建模中的应用研究
界符= l 1 I , ; . (I) 其中l 示 a 表 —— z中 的 任 何 一 个 字 母 , 示 d表 9中的任何一 个数 字 。 e*也 都 是 正 规 式 , 们 所 表 示 的 正 规 集 分 别 为 l 它 关 键字 也 是一 种单 词 ,关 键 字集 合是 标 识符集 合 Le) (1ULe) (1・(2, (1 ; (1Le) (2, e)Le)Le) , L ( ) 的子集 , 关键字 与标 识符 的构 词原则 相 同。 ()仅 由有 限次 使 用上 述 三个 步骤 而 定 义 的表 达 4 式才 是 ∑上 的正 规式 , 由这些 正 规式 所 表示 的字 集 仅 整数 前 面 的正 负 号 在 词 法 分 析 中可看 作 运 算 符 , 因此 只定 义无 符号 整数 的词法 。 才是 ∑上 的正 规集 。[ 1 1 - . 正 规式 可 用 来 描述 符 号 串所 遵从 的规则 ,用 正规 232将词法 转化 为有穷 自动机形 式 的词法模 型
2 1 年第 1 0 1 1期
福 建 电
脑
9 5
有 穷 自动机在词 法分 析器建模 中的应 用研究
罗 海 丽
(内 蒙古科技 大 学 信息工程 学院 内蒙古 包头 0 4 1 1 0 0)
【 摘 要】 :有 穷自动机可用于描述语言的词法模型,有穷自动机形式的词法模型与特定的控制程序 相 配合 可构 成语 言 的词 法分析 器 。介 绍 了利 用有 穷 自动机 建 立语 言的词 法模 型及 以此 词 法模 型为基础 构 建词 法分析 器的过程 。实例 证 明 , 方 法构造 的词 法 分析 器正确 、 该 有效 。 【 关键词】 :有穷 自 动机; 正规文法; 控制程序; 词法模型; 词法分析器
编译原理报告—词法分析器
词法分析器的作用词法分析是编译的第一阶段。
词法分析器的主要任务是读入源程序的输入字符,将它们组成词素,生成并输出一个词法单元序列,这个词法单元序列被输出到语法分析器进行语法分析。
另外,由于词法分析器在编译器中负责读取源程序,因此除了识别词素之外,它还会完成一些其他任务,比如过滤掉源程序中的注释和空白,将编译器生成的错误消息与源程序的位置关联起来等。
总而言之,词法分析器的作用如下:1.读入源程序的输入字符,将它们组成词素,生成并输出一个词法单元序列;2.过滤掉源程序中的注释和空白;3.将编译器生成的错误消息与源程序的位置关联起来;4.其它。
词法分析过程首先,对某个正则语言L,构造能够描述其的正则表达式r;然后,需要将r 转换成一个有穷自动机。
这里有三种方法,一是直接转换成NFA,而是直接转换成DFA,三是先转换成NFA,再把NFA 转换成DFA;最后,如果将r 转换成了一个DFA,需要将此DFA 的状态数最小化。
正则表达式正则表达式可以用来描述词素的模式,一个正则表达式可以由较小的正则表达式递归的构建。
对于符号集合∑={a,b},有:-正则表达式a 表示语言{a};-正则表达式a|b 表示语言{a,b};-正则表达式(a|b)(a|b)表示语言{aa,ab,ba,bb};-正则表达式a*表示语言{ε,a,aa,aaa,…};-正则表达式(a|b)*表示语言{ε,a,b,aa,ab,ba,bb,aaa,…};-正则表达式a|a*b 表示语言{a,b,ab,aab,aaab,…}。
上面通过基本的并、连接和闭包运算递归定义了正则表达式有穷自动机一个有穷自动机可以把一个描述词素的模式变成一个词法分析器,从本质上来讲,有穷自动机是与状态转换图相类似的图,它有以下特点:有穷自动机是一个识别器,它只能对每个输入符号串简单的输出“yes”或“no”,表示是否能够识别此符号串;有穷自动机和状态转换图类似,它具有有限个数的结点,每个结点表示一个状态,并且这些状态中有一个初始状态和若干个终止状态。
编译原理 第3章 词法分析与有穷自动机(第5-8讲)
它所对应的状态表如图:
状态 0 1 2 3 a 1 3 1 3 后继 状态 b 2 2 3 3
输入字符 接受 否 否 否 是
式的转化
22
第3章 词法分析与有穷自动机
■DFA所识别的语言
给定DFA M,对于字符c1,c2,…,cn,当以下条件成立时, 称M接受由c1,c2,…,cn组成的字符串c1c2…cn: 存在状态序列s0,s1,s2,…,sn,使得s1=f(S,c1), s2=f(s1,c2),…,sn=f(sn-1,cn),且sn∈Z。 由DFA M接受的语言L(M)是所有M接受的字符串组成的集 合。
25
第3章 词法分析与有穷自动机
判断下图是DFA还是NFA的状态转换图,并 写出其他2种表示形式
26
第3章 词法分析与有穷自动机
■由正规表达式R构造NFA
1.基本正规表达式 (a)对于正规式φ,所构造NFA: (b)对于正规式ε,所构造NFA: (c)对于正规式a,a∈Σ,则 NFA:
x ε y
练习:若S=a|bb,则L((a|bb)*)=?
5
第3章 词法分析与有穷自动机
■正规式中运算的优先级
括号优先,* 次之,•(连接)再次之,| 最后 例:a|bc* ≌ a|(b(c*)) ab|c*d ≌ (ab)|((c*)d)
■ 正规式与正规集举例
L(a|bc*)=L(a)∪L(bc*) 思考:L(ab|c*d)=? =L(a)∪L(b)L(c*) =L(a)∪L(b)(L(c))* ={a}∪{b}{ε,c,cc,ccc……} ={a,b,bc,bcc,bccc,……}
17
第3章 词法分析与有穷自动机
■有穷自动机的状态转移图表示方法
第3章词法分析与有穷自动机20090319
单词的种类 (1)关键字:if、for、while (2)标识符: (3) 常数: (4) 运算符:+、-、* (5)分界符:, 、;、(、)
编译原理
2013年8月27日
词法分析程序的输出形式-----二元式
单词类别 单词的属性值
单词类别可以用整数编码表示:一类一种或一字一种
单词类别 关键字 标识符 常数 运算符 分界符
编译原理
2013年8月27日
【例3.9】将描述标识符的正规式R=l(l∣d)*转换 成相应的正规文法。
• 令S为文法的开始符号, 根据规则(2) 有 • S→l(l∣d)* • 根据规则(3)变换为: • S→lA • A→(l∣d)* • 根据规则(4)变换为: • S→lA • A→(l∣d)A∣ε •
有穷自动机的作用
实质上是提供了一种逻辑的探测方式,去探测一 些输入串是否属于某种语言,即: 它可以作为一种 语法检查器。
编译原理
2013年8月27日
3.4.1
确定的有穷自动机(DFA)
M=(Σ, Q, f,S, Z)
Σ:有穷字母表,它的每个元素称为一个输入符号 Q:有穷状态集,它的每个元素称为一个状态 S∈K,是唯一的初态
运算符的优先级: 先*, 后 • , 最后 | • 在正规式中可以省略.
正规式相等 这两个正规式表示的语言相等
编译原理
2013年8月27日
正规式举例
• 例:设有字母表 ∑={a,b},根据正规式与正规集的定义,有以 下的正规式和正规集 正规式 正规集 a {a} a∣b {a,b} ab {ab} ( a∣b)( a∣b) {aa,ab,ba,bb} a* {ε,a,aa,aaa,…,任意个a的串} (a∣b)* {ε,a,b,aa,ab,ba,bb,…所有a,b组成的串} (a︱b) *(aa︱bb) (a︱b) * ∑*上所有含两个连续的a 或两 个连续的b组成的串
第3章 词法分析与有穷自动机PPT课件
或作为一个联合
typedef struct {
TokenType tokenval;
unon { char* stringval;
int numval; } attribute;
} TokenRecord;
10
【例】试给出程序段 if (a>1) b = 100;输出 的单词符号串。
假定基本字、运算符和界符都是一符一种,标识符自身 的值是字符串,常数是二进制值。
(2,)
基本字 if
(29,)
左括号 (
(10,‘a’)
标识符 a
(23,)
大于号 >
(11,‘1’的二进制)
常数 1
(30,)
右括号 )
(10,‘b’)
标识符 b
(17,)
赋值号 =
(11,‘100’的二进制) 常数 100
(26,)
分号 ;
11
【例】考虑下述 C++ 代码段:
另一种 表示
while ( i >= j ) i--;
第三章 词法分析
人们理解一篇文章(或一个程序)起码是在单 词的级别上来思考的。同样,编译程序也是在单 词的级别上来分析和翻译源程序的。词法分析的 任务是:从左至右逐个字符地对源程序进行扫描, 产生一个个的,把作为字符串的源程序改造成为 单词符号串的中间程序。因此,词法分析是编译 的基础。
执行词法分析的程序称为词法分析器。本章讨 论词法分析程序的手工构造方法和自动构造方法。
将字符组合成记号与在一个英语句子中将字母构成单词 并确定单词的含义很相像,此时的任务很像拼写。
5
程序语言的单词符号一般可分为下列五种:
1) 关键字:是由程序语言定义的具有固定意义的标识符, 也称保留字或基本字。如Pascal中的 begin、end、 if、integer等,C 中的if、else、do、while, C++ 中的class、int、switch、break等都是保 留字,它们一般不用作一般标识符。
第三章 有限自动机与词法分析器
E E + E E*E+E
① ②
E E
E E
+
E
i*E+E
i*i+E i *i+i
③
④ ⑤
*
i
i
i
语法树
3
1 语法树(推导树、生成树或分析树)
设文法G=(VN,VT,S,P) ,称满足下列条件 的树为G的一棵语法树:
G: EE+E EE*E E(E) Ei E E E
1. 每个节点都标有G的一个文法符号, 且根节点标有初始符S,非叶节点标有 非终极符,叶节点标有非终极符或终 极符或.
19
例:在一个then和一个else之间出现的语 句必须是已匹配的。 S if E then S | if E then S else S | other
S M | U M if E then M else M | other U if E then S | if E then M else U
例:设有文法G:
•
ET|E+T
•
•
TF|T*F
F(E)|i
i (1) *i (2) +i (3)是G的一个句子,
(1)画出该句子的语法分析树 (2)找出该句子的所有短语,简单短语,句柄
9
E
E T T F i * F +
文法G: ET|E+T TF|T*F T F(E)|i i (1) *i (2) +i (3) 规范推导过程 F 如下:
对一个文法G,如果至少存在一个句子,
有两棵(或两棵以上)不同的语法树,则称该 句子是二义性的.包含有二义性句子的文法称为 二义性文法,否则,该文法是无二义性的.
词法分析和有限自动机
第3章词法分析和有限自动机1.词法分析器和语法分析器的相互作用见教科书屠3。
12.单词符号、词法记号单词符号是程序设计语言的基本语法符号,它由该程序设计语言的字母表上的字符,按照该语言的词法规则组成的。
3.单词符号的表示单词符号的输出通常用二元组表示:(单词种别,单词自身的值)单词种别说明单词所属的类别,单词的值则是单词在类中的属性值,是为了正确区分同一类别中的不同单词所必须的。
4.Token单词种别又称为token。
5.模式构成单词的规则称为模式,它用于刻画token。
6.词素词素是与关于token的模式所匹配的源程序中的一个字符串。
7.词法规则隶属于语法规则,8.把词法分析分离出来作为一个独立的阶段来考虑,有如下好处:∨使整个编译程序的结构更简洁、更清晰和更有条理化;∨提高了编译程序的效率;∨增加了编译程序的可移植性;9.正则表达式由一些运算对象(符号串)和一些运算符号按照一定的规则组成,类似于算术表达式,它是描述正则集的工具。
10.正规集正规式表示简单的语言,叫做正规集11.正则式和正则集的定义设∑是一字母表,∑上的正则式和正则集定义如下:1.ε和φ是∑上的正则表达式,所表示的正则集分别为{ε}和φ。
2.任何a∈∑,a是∑上的正则表达式,所表示的正则集为{a}。
3.设e1和e2都是∑上的正则表达式,所表示的正则集分别为L(e1)和L(e2),那么,(1) (e1)是∑上的正则表达式,所表示的正则集为L(e1);(2) e1|e2是∑上的正则表达式,所表示的正则集为L(e1)∪L(e2);(3) e1∙e2是∑上的正则表达式,所表示的正则集为L(e1) L(e2);(4) e1*是∑上的正则表达式,所表示的正则集为(L(e1))*。
4.仅由有限次使用上述三步骤而定义的表达式才是∑上的正则表达式,仅由这些正则式所表示的集合才是∑上的正则集。
12.正则式的等价若e1和e2都是∑上的正则表达式,它们所表示的正则集分别为L(e1)和L(e2),且有L(e1)=L(e2),则称e1和e2等价。
词法分析 - 吉林大学
字符串空间
目的:减少冗余,节省空间, 目的:减少冗余,节省空间,提高访问速度 方法:字符数组存放字符串,描述字符串信息: 方法:字符数组存放字符串,描述字符串信息: 下标 长度
词法错误校正
词法错误种类: 词法错误种类: 语言不允许的符号: 语言不允许的符号:# 括号类配对错误: 括号类配对错误: 单词的后继符错(偶尔): 单词的后继符错(偶尔): 词法错误校正: 词法错误校正: 删除已被读过的字符, a 删除已被读过的字符,并重新扫 描未被读过的字符 删除已读过的第一个字符, b 删除已读过的第一个字符,重新 扫描它的后继部分的字符。 扫描它的后继部分的字符。 校正后的标示
第三章有限自动机和词法分析器
主要内容: 主要内容: 词法分析过程涉及的几个问题 词法分析器的生成技术 正则表达式 有限自动机
词法分析概述
有关词法分析器的几个问题和处理方法: 有关词法分析器的几个问题和处理方法: 词法分析器的功能、 词法分析器的功能、分类 单词的分类、 单词的分类、Token表示 表示 保留字 空格符、 空格符、制表符和换行符 复合型符号 括号类匹配预检 字符串空间 词法错误校正 词法分析结束
词法分析器的功能
词法分析器功能: 词法分析器功能: 读源程序的字符序列,逐个拼出单词, 读源程序的字符序列,逐个拼出单词,并 构造相应的内部表示TOKEN. TOKEN.同时检查源程序 构造相应的内部表示TOKEN.同时检查源程序 中的词法错误. 中的词法错误. 引入Token的原因: Token的原因 引入Token的原因: 编译程序总是用某种程序语言书写的程 序,语言的操作对象只能是该语言规定的各种 数据。而编译程序的操作对象是程序中的各种 数据。 语法单位,因此, 语法单位,因此,必须把它们表示成某种数据 结构形式。 结构形式。
编译原理第二版第3章词法分析
1. ε和φ都是∑上的正规式,它所表示的正规集分
别为{ε}和Ф; 2. 任何a∈∑,a是∑上的正规式,它所表示的正 规集为{a}; 3. 假定e1和e2都是∑上的正规式,他们所表示的 正规集分别为L(e1)和L(e2),那么,以下也 都是正规式和他们所表示的正规集;
一、正规式与正规集的递归定义
3.2 单词符号及输出单词的形式
单词自身值
对常数,基本字,运算符,界符就是他们本 身的值 对标识符,将标识符的名字登记在符号表中, ‚自身值‛是指向该标识符所在符号表中位 置的指针。
假定基本字、运算符和界符都是一符一种 例:if(a>1) b=100; 词法分析后输出的单词序列是: (2, ) if (29, ) ( (10,‘a’) a (23, ) > (11,‘1’) 1 (30, ) ) (10,’b’) b (17, ) = (11,‘100’) 100 (26, ) ;
4. 仅由有限次使用上述三步定义的表达式才是∑上的 正规式,仅由这些正规式所表示的字集才是∑上 的正规集。
重点回顾
四、将正规文法转换成正规式 求非终结符的正规式 将正规文法中的每个非终结符表示成关 于它的一个正规式方程,获得一个联立 方程组 用代入法解正规式方程组 最后只剩下一个开始符号定义的正规式, 其中不含非终结符
3.3 语言单词符号的两种定义方式
作用: 描述单词的构成规则,基于这类描 述工具建立词法分析技术,进而实现词法 分析程序的自动构造。 工具有: 正规文法 正规式(Regular Expression)
多数程序设计语言的单词符号都能用正 规文法或正规式来定义。
3.3.1 正规文法
多数程序设计语言单词的语法都能用正 规文法(3型文法)描述 正规文法回顾 文法的任一产生式α →β 的形式都为 A→aB或A→a,其中A ,B∈VN ,a∈VT A→Ba或A→a,其中A ,B∈VN ,a∈ VT 正规文法描述的是VT*上的正规集
有穷自动机在词法分析中的应用
有穷自动机在词法分析中的应用郝亮11北京林业大学,北京100083(heroleo@)The application of finite automaton in lexical analysis of compiling principleLiang Hao11(Beijing Forestry University , Beijing 100083)AbstractLexical analysis is a sequence of characters in the computer science convert word sequence process, lexical analysis is the first stage of t he compilation process, and its task is left to right, a character, a character read into the source code or documentation of the constitutioncharacter stream source or document scanning and decomposition, thereby identifying words and sent a grammar program. Lexical anal yzer output but the system is often expressed as a binary notation style forms, such as (the word species do not, the property value of word symbols). The finite automata (FA) is divided into a deterministic finite automaton (DFA) and non-deterministic finite automata (NF A), which is used to describe a specific type of algorithm of mathematical methods. In particular, a finite automaton can be used as descr ibed in the identification process in the input string, using analytical methods can process more intuitive understanding of lexical analysis of finite automata. Finite state machine diagram indicates also simplifies our lexical analysis of state transitions of understanding. Finite Automata Lexical analysis is widely used.Key words Lexical analysis; finite automata; DFA; NFA; regular expression摘要词法分析是计算机科学中将字符序列转换为单词序列的过程,词法分析是编译过程的第一个阶段,它的任务是从左到右一个字符,一个字符地读入源程序或文档,对构成源程序或文档的字符流进行扫描和分解,从而识别出一个个单词并发送给语法程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1 词法分析(续)
字符串空间
– 字符串的存储问题 – 一般方法
• 使用缓冲区记录开始地址和长度
m a r t
mart: 1 4
m a s k w o r d
mask: 5 4 word: 9 4
– 注意检查是否有重复存储的字符串 – 字符编码问题
3.1 词法分析(续)
词法错误校正
– 目的:发现更多的错误,分析继续下去 – 手段:
3.2 确定有穷自动机(续)
有向图与状态表的区别
– DFA的两种表示形式 – 有向图:
• 直观 • 易于理解
– 状态表
• 便于计算和处理 • 便于计算机表示
总结
内容
– 词法分析功能 – 确定有穷自动机
重点
– 确定有穷自动机的概念
作业
– P60 3.1
3.1 词法分析(续)
单词内部表示
– 标识符的内部表示
$id
$id
x1
......
x1z12
......
– 指针方法 – 其它符号的内部表示 – 为什么单独处理标识符
3.1 词法分析(续)
保留字
– 什么识保留字 – 分析保留子的方法
• 保留字表,数据实现 • 非保留字表,程序实现
空格、制表符、换行符
3.2 确定有穷自动机(续)
思考:
– 标识符(带下划线)?
L 0 2
L,D _ L,D
3
3.2 确定有穷自动机(续)
接受偶数个0
0 0 0 1
3.2 确定有穷自动机(续)
思考与练习
– 奇数个0? – 偶数个0和偶数个1?
3.2 确定有穷自动机(续)
确定有穷自动机状态表
– 状态转换可以使用函数来表示
第三章 有穷自动机 与词法分析器
任课教师 王养廷
主要内容
词法分析
有穷自动机
3.1 词法分析
词法分析功能
– 源程序文件
• ASCII编码 • 文本文件 • 例如:“A1”保存为4131
– 单词
• 源程序的语法成分 • 例如:if, (, …
3.1 词法分析
词法分析功能
– Token
• 单词的内部表示,例如: 程序表示 If then begin end + ASCII码 6966 7468656e 626569676e 656e64 2b Token.class 01 02 03 04 05 Token.seman 6966 7468656e 626569676e 656e64 2b
– 检查配对
• 使用计数器 • 更准确地方法如何实现?
3.1 词法分析(续)
向前看多个字符
– 词法分析有时需要向前看多个字符,例如:
• • • • 10 10.12 10..12 有时需要看到第一个‘.’后的字符才能确定
– 处理技术
• • • • 沿着收到的字符倒退到终态 把回退字符集如缓冲区,以便下一次扫描 引入Token标志 例如:12.3e+q的分析
其中Φ表示给定一个状态和输入字符就可以唯 一确定下一个状态
3.2 确定有穷自动机(续)
自动机定义方式
– 图形法 – 转换表法 – 函数法
3.2 确定有穷自动机(续)
DFA例子(函数法)
– 符号集Σ={0, 1, 2, ...... ,9}; – 状态集合SS={S0, S1}; – 开始状态: S0 ; – 转换函数Φ:SS X Σ →SS; Φ(S0, d)= S1 , Φ(S1, d)= S1 – 终止状态集:{S1};
– 它们可以作为分隔符 – 有的语言空格符无词法意义 – 例如:下面两行等价
• beginx • begin x
– 字符串中的空格需要单独处理 – 换行可以用于行计数
3.1 词法分析(续)
括号类配对
– Pascal语言中的括号类
• • • • • • begin ......end record......end if......then [......] (......) {......}
• 转换函数Φ:SS X Σ →SS;
– 状态转换可以使用图形来表示
• 状态转换图
– 状态转换还可以使用表来表示
3.2 确定有穷自动机(续)
状态转换表示例
0 1
S0 *
S1 S2 S3 *
S1
S0 * S3 * S2
S2
S3 * S0 * S1
1 确定有穷自动机(续)
状态表说明
– 主要状态:第一列 – 输入字符:第一行 – 终结状态:带有*号 – 每个单元的状态表示某个状态接受某个字符 后的状态 – 状态表便于机器处理
3.2 确定有穷自动机
说明
– 有穷自动机(FA) – 确定有穷自动机(DFA) – 非确定有穷自动机(NFA)
3.2 确定有穷自动机(续)
定义
确定有穷自动机(DFA)有以下几个部分组 成:
• • • • • 符号集Σ(输入符号集); 状态集合SS={S0, S1, S2, S3... Sn}; 开始状态: S0 ; 转换函数Φ:SS X Σ →SS; 终止状态集:{Si1, Si2... Sik};
3.2 确定有穷自动机(续)
实数的DFA
d d 0 1 . 2 d 3 d
3.2 确定有穷自动机(续)
第二个位置上为2的正整数(包括一位)
d 0 d 1 2 3
3.2 确定有穷自动机(续)
思考
– 将上题改成不包括一位,对应的DFA是什么?
3.2 确定有穷自动机(续)
标识符
L,D L 0 2
• 作为语法分析的一个子程序,每次产生一个 Token • 作为编译器独立的一遍、生成Token序列
3.1 词法分析
词法分析功能
– 单词识别
• 从字符串中分离出单个单词
– 主要的单词
• • • • • 标识符 正整数 保留字 符号 ……
3.1 词法分析
词法分析功能
– 词法分析复杂性,例子:
DO 10 I = 1 , 100 DO 10 I = 1. 100
(
28
06
28
3.1 词法分析
词法分析功能
– 标识符
• 用户定义的符号 • 作为一类来处理
– 常量
• 可以作为一类或多类
– 保留字
• 用来分隔语法成分 • 一般每个一类 • 与保留字的区别(算法设计?)
3.1 词法分析
词法分析功能
– 词法分析输入:源程序 – 词法分析输出:Token序列 – 词法分析功能:把源程序转换成Token序列 – 词法分析器种类
• 删去已读过的字符 • 删去已读过的第一个字符
– 特别注意越行字符串的处理
3.1 词法分析(续)
词法分析结束
– 使用程序结束标志
• 例如:Pascal中的end.
– 使用文件结束标志
• 可以有效处理错误程序
3.1 词法分析(续)
使用词法分析的好处
– 使语法分析与语义分析更简练 – 便于使用自动机理论描述 – 有利于提高编译器的效率 – 有利于编译器的移植
3.2 确定有穷自动机(续)
DFA有向图表示
– – 状态 开始状态
–
–
转换边
接受(或终止)状态
3.2 符串 – 作用??
3.2 确定有穷自动机(续)
特殊例子
d
d
d
3.2 确定有穷自动机(续)
DFA举例
d d
3.2 确定有穷自动机(续)
练习
– 实数的DFA – 第二个位置上为2的所有正整数 – 标识符,由字母字符引导的数字、字母字符 串。 – 接受偶数个0的DFA – 接受奇数个1的DFA – 接受偶数个0和偶数个1的DFA