词法分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B
7
Z
a
8
Z
(a) 分析过程
A ababaaa
(b) 语法树
2020/5/7
中南大学软件学院 陈志刚
26
第三章 词法分析
五、用状态转换图为正则语言构造正则文法
例如:正则语言{(ab)nb2|n≥0}
基于其句子的一般形式,为其构造状态转换图:
a
Sa Ab b
BbCb Z
从上面状态转换图,可得到相应的正则文法: G[Z]: Z::=Cb C::=Bb|b B::=Ab A::=Ba|a
2020/5/7
中南大学软件学院 陈志刚
12
第三章 词法分析
3.1 词法分析概述
五、词法分析程序的输出形式
语言的单词符号
单词符号是程序语言的基本语法单位,一般分为下面5种: 关键字(基本字):(个数确定,可全体编为一类,也 可一字一类) 标识符:(个数不确定,作为一类) 常数:各种类型的常数 。(个数不确定,按类型分类) 运算符:如+、-、*、/、<等。(个数确定,一符一类) 界符:如,、;、(、)、: 等。(个数确定,一符一类)
2020/5/7
中南大学软件学院 陈志刚
18
二、状态转换图的实现
第三章 词法分析
为了描述方便,引入一些标准过程(函数)与变量: 1.全程字符变量Char:存放最新读入的源程序字符; 2.字符串TOKEN:存放构成单词符号的字符串; 3.过程GETChar:读入一个源程序字符,放入Char中,
注意:一种语言的单词如何分类、怎样编码,主要取决于技 术上的方便。
2020/5/7
中南大学软件学院 陈志刚
13
3.1 词法分析概述
五、词法分析程序的输出形式
例:若分类表为:
第三章 词法分析
试分析输入串:IF a1>0
THEN b1:=c1*d1
ELSE b1:=5
经词法分析后的输出。
2020/5/7
第三章 词法分析
3.1 词法分析概述 3.2 词法分析程序的设计 3.3 正规式与有限自动机 3.4 词法分析程序的实现 3.5 词法分析器的自动生成
3.1 词法分析概述
第三章 词法分析
一、词法分析程序的任务 二、词法分析程序的功能 三、词法分析程序的安排 四、词法分析程序的实现方式 五、词法分析程序的输出形式
29
第三章 词法分析
3.3 正规式与有限自动机
一、基本概念
1.字母表Σ:
元素的非空有限集合。如Σ={‘A’, ‘B’, ‘O’}
2.字符:
字母表Σ的一个元素称为一个字符(符号)
3. Σ上的字:
Σ上字符的有穷序列;例:Σ={a,b,c}
4.空字ε:
不含任何字符的字
5.字的长度:
|α|
6.Σ上字的全体: Σ*
中南大学软件学院 陈志刚
14
3.1 词法分析概述
五、词法分析程序的输出形式
解:输出的单词串为:
第三章 词法分析
2020/5/7
中南大学软件学院 陈志刚
15
第三章 词法分析
3.2 词法分析程序的设计
一、状态转换图
状态转换图是一张有限方向图。用结点代表状态, 状态之间用箭弧连接,箭弧上的标记(字符)代表 在射出结状态下可能出现的输入字符或字符类。
2020/5/7
中南大学软件学院 陈志刚
2
3.1 词法分析概述 词法分析程序
第三章 词法分析
词法分析是编译过程中的一个阶段,在语法分 析前进行 ,也可以和语法分析结合在一起作 为一遍。
输入:源程序字符串
输出:等价的属性字序列(内部表示形式)
2020/5/7
中南大学软件学院 陈志刚
3
3.1 词法分析概述
bB b
(1)识别字符串ababaaa
aAaa
a,b
S ab Z bF
bB b
(2)识别字符串bababbb
2020/5/7
中南大学软件学院 陈志刚
24
状态转换图识别句子的实质
第三章 词法分析
是一个规约过程,运用自底向上的识别算法:如:
S a A与A a Z表示:a直接规约为A, Aa直接规约为Z。
Z2 ε
2020/5/7
中南大学软件学院 陈志刚
28
第三章 词法分析
3.3 正规式与有限自动机
一、基本概念 二、确定有穷状态自动机(DFA) 三、非确定有穷状态自动机(NFA) 四、NFA和DFA的转换 五、正规式和有限自动机的等价性 六、DFA的化简
2020/5/7
中南大学软件学院 陈志刚
第三章 词法分析
一、词法分析程序的任务
➢ 从左至右逐个字符地扫描源程序,产生一 个个单词符号。把作为字符的源程序改造为 单词符号串组成的中间程序,执行词法分析 任务的程序称为词法分析器或称扫描器。
2020/5/7
中南大学软件学院 陈志刚
4
第三章 词法分析
3.1 词法分析概述
二、词法分析程序的功能
步骤2存在的两种可能:可能找不到一条弧的标记与 当前字符相同;总能找到一个弧,其标记与当前字 符相同。
2020/5/7
中南大学软件学院 陈志刚
23
第三章 词法分析
应用状态转换图识别句子举例
例如:对于正则文法G[Z]:
Z::=Za|Aa|Bb
A::=Ba|a
B::=Ab|b
aAa S ab Z a
单词种别:表示单词种类,常用整数编码,它是语 法分析需要的
单词自身的值:是编译中其他阶段所需要的信息
如果一个种别只含一个单词符号,那么该单词符号的种 别编码就完全代表它自身的值。
如果一个种别含有多个单词符号,那么还应给出该单词 符号的自身值:标识符自身值是标识符自身的字符串; 常数自身值是常数的二进制数值。
以识别符号为终止状态。
2020/5/7
中南大学软件学院 陈志刚
21
第三章 词法分析
构造状态转换图举例
例如:对于正则文法G[Z]:
Z::=Za|Aa|Bb
A::=Ba|a
B::=Ab|b
Aa
S
Za
Bb
a Aa
Sa
Za
Bb
aAa S ab Z a
bB b
(1)
(2)
(3)
2020/5/7
中南大学软件学院 陈志刚
例2:
0
1
U
数字
非数字
3
4
=
5
0
01
+
6
0
V
Z
1
*
7
非*
8
*
9
例3:
,
10
(
11
)
12
2020/5/7
中南大学软件学院 陈志刚
其它
13
17
二、状态转换图的实现
第三章 词法分析
方法:每个结点对应一段程序,前面状态结的程 序调用其后继结点的程序。
例1:
字母
1
0
数字
2
PROCEDURE Proc0; Getchar; case char of ‘A’…‘Z’ : proc1; ‘0’…‘9’: proc2; otherwise error; end of case;
一个状态转换图只包含有限个状态,有一个初态,
终态用双圈表示。一个状态转换图可识别一定的字
符串。
状态都是非终结符号
例1:
字母或数字
S:开始状态 E:终止状态,用双圈表示 I:标识符状态
S
I
E
字母 数字
2020/5/7
中南大学软件学院 陈志刚
16
一、状态转换图
空白
0
字母
第三章 词法分析
字母或数字
1 非字母或数字 2
22
第三章 词法分析
四、应用状态转换图识别句子
如果x是相应文法的句子便必须能从开始状态出发, 顺着弧的方向行进到终止状态。其步骤如下: (1)从开始状态开始,以它作为当前状态,并从x 的最左字符开始重复步骤2,直到到达x的右端为止; (2)扫描x的下一字符,在当前状态射出的各个弧 中找出标记有该字符的弧,并沿此弧前进,以达到 的状态作为下一当前状态。
搜索指针前移; 4.过程GETNBC:反复调用 GETChar,直接读入的
Char< >’ ’ 为止; 5.过程CONCAT:把Char中字符连到TOKEN末尾去; 6.函数Letter/digit:判别Char中是否为字母/数
字; 7.过程Return (c, val ); 8.过程Retract:搜索器指针回拔一个字符。
2020/5/7
中南大学软件学院 陈志刚
27
六、转换系统
第三章 词法分析
定义:转换系统是具有下列三个特征的状态转换 图,即 1) 开始状态S和终止状态Z 唯一; 2) 无弧进入S,也无弧自Z射出;
3)可能存在标记为空串(ε)的弧。
转换系统与状态转换图的区别: ε弧
ε S1
Z1 ε
S
A
Z
ε S2
单词--是程序语言的基本语法符号。 如:基本字、标识符、常数、运算符、界符等。 词法分析器中单词的输出形式:
(单词类别、单词内部码值)
2020/5/7
中南大学软件学院 陈志刚
11
第三章 词法分析
3.1 词法分析概述
五、词法分析程序的输出形式
词法分析程序输出的单词符号通常用二元式表示: (单词种别,单词自身的值)
常常把词法分析程序作为独立的一遍或作 为被语法分析程序所调用的子程序。
1、作为独立的一遍:
语法分析前进行词法分析,把单词符号 串形成中间文件存贮。
2020/5/7
中南大学软件学院 陈志刚
6
3.1 词法分析概述
第三章 词法分析
三、词法分析程序的安排
2、作为被语法分析器词用的子程序:
2020/5/7
词法分析程序主要执行以下功能: 读入源程序字符串,识别开具有独立含义的最 小语法单位——单词(符号); 把单词变换成长度统一的且为定长的属性字;
其他功能: 滤掉空格,跳过注释、换行符 某些预加工处理
2020/5/7
中南大学软件学院 陈志刚
5
3.1 词法分析概述
三、词法分析程序的安排
第三章 词法分析
从开始状态S出发逐步到达终止状态Z的过程,也是 从终结符号串出发,规约到非终结符号的过程。
2020/5/7
中南大学软件学院 陈志刚
25
第三章 词法分析
对句子ababaaa的分析
Z
步骤 当前状态
1
S
2
A
输入的其余部分 ababaaa babaaa
Z A
3
B
abaaa
B
4
A
5
B
baaa
aaa
A
6
A
aa
2020/5/7
中南大学软件学院 陈志刚
8
3.1 词法分析概述
第三章 词法分析
四、词法分析程序的实现方式
相对独立方式
当采用递归下降分析等技术实现一趟编译程 序时常采用这种方式。
源程序
Token
词法分析程序
语法分析程序….
get token
2020/5/7
中南大学软件学院 陈志刚
9
3.1 词法分析概述
中南大学软件学院 陈志刚
7
3.1 词法分析概述
第三章 词法分析
四、词法分析程序的实现方式
相对独立方式:把词法分析程序作为语法分析 程序的一个独立子程序。语法分析程序需要新 符号时调用这个子程序。
完全独立方式:词法分析程序作为单独一趟来 实现。词法分析程序读入整个源程序,它的输 出作为语法分析程序的输入。
20
第三章 词法分析
三、为正则文法构造状态转换图
什么是正则文法?(U::=T 或U::=WT)
步骤如下:
以S为开始状态作结点;
把文法中的每一个非终结符号作为状态结点;
对于形如Q::=T的每个规则,引一条开始状态S 到状态Q的弧,弧上标记为T;对于形如Q::=RT 的规则引一条从状态R到Q的弧,弧上标记为T, 其中R为非终结符号,T为终结符号。
第三章 词法分析
四、词法分析程序的实现方式
完全独立方式
采用词法分析工作完全独立的原因: 简化设计,降低语法分析的复杂性 提高编译效率 增加编译系统的可移植性
属性字序列
源程序
词法分析程序
语法分析程序….
2020/5/7
中南大学软件学院 陈志刚
10
3.1 词法分析概述
第三章 词法分析
五、词法分析程序的输出形式
2020/5/7
中南大学软件学院 陈志刚
19
第三章 词法分析
例2:
字母
0
2020/5/7
字母或数字
1
其它
②*
中南大学软件学院 陈志刚
PROCEDURE Pro0; BEGIN Getchar; IF char IN [‘A’..‘Z’ ] then pro1 else error; END; Procedure pro1; begin getchar; while char IN [‘A’..‘Z’, ‘o’..‘g’ ] DO begin concat; getchar; End; pro2; End; procedure pro2; begin retract; return(101,TOKEN ); end;
7.字的连接:
字α与字β的连接记为αβ
2020/5/7
中南大学软件学院 陈志刚
30
第三章 词法分析
3.3 正规式与有限自动机
一、基本概念
8.字的方幂:字α的n次连接称为α的n次方幂,记
为 ,特n 别地 =0ε
9.字的集合A与B的乘积:
记作
,其中
10. Σ*子集的方幂:
Aº={ε},A1=A, … ,
11.Σ*子集的正则闭包:
12.Σ*子集的闭包:
2020/5/7
中南大学软件学院 陈志刚
31
第三章 词法分析
正规式与正规集
正规集是字母表Σ上的一个特殊字集,通常我们借助正 规式来描述它。关于正规式与正规集的定义是递归的。