第三章词法分析
合集下载
第三章词法分析

sort
字母 数字 / 界符
’
RECOGID RECOGDIG HANDLCOM RECOGDEC RECOGSTR
LOOKUP
第三章词法分析
17
一、 手工构造识别单词的DFA m
根椐DFA识别单词的定义,在研究给定程 序语言单词结构的基础上,能直接构造出识 别它的DFA m。例如:对于C语言
整数:非空数字串。
第三章 词法分析
第三章词法分析
编译器的各个阶段:
编译器是分
符
阶段执行的。 号
管
每个阶段将
理
源程序从一
表
种表示转换
成另一种表
示
编译的各
个阶段
源程序
词法分析器
语法分析器
错 误
处
语义分析器
理
器
中间代码生成器
代码优化器
代码生成器
第三章词法分析
2
3. 1 词法分析程序的设计:
词法分析器的功能,输出,把它组 织成单独程序
if <12 ,
>
I
<25 , 符号表入口 >
> <39 ,
>
J
<25 ,符号表入口 >
Then <20 ,
>
词I 法=
<25 ,符号表入口 >
<36 ,
>
分0
<26 ,常数表入口 >
析 else <8 ,
>
j <25 ,符号表入口 >
= <36 ,
>
1
<26 ,常数表入口 >
第三章词法分析
第3章 词法分析

确定的有穷自动机DFA (Deterministic Finite Automata) 不确定的有穷自动机NFA (Nondeterministic Finite Automata)
7
关于有穷自动机将讨论以下问题
一、确定的有穷自动机DFA 二、不确定的有穷自动机NFA 三、具有ε动作的FA 四、NFA到DFA的变换
0
等价的DFA
0
1
0
1
1 0 1 2
练习
a X 1 2 b 4 b a 3 a 5 a 6 b Y
b
Ia
{X,1,2} 0 {1,2,3} 1 {1,2,4} 2 {1,2,3,5,6,Y}3* {1,2,4,5,6,Y}4* {1,2,4,6,Y} 5* {1,2,3,6,Y} 6* {1,2,3} {1,2,3,5,6,Y} {1,2,3} {1,2,3,5,6,Y}
41
仅由有限次使用上述3步骤而定义 设字母表为: 的表达式才是上的正规式,仅由这些 正规式所表示的集合才是上的正规集。
和都是上的正规式,它们所表示的 正规集分别为{}和{ }; 任何a ,a是上的一个正规式,它所 表示的正规集为{a};
假定e1和e2都是上的正规式,它们所 表示的正规集分别为L(e1)和L(e2),那么, (e1), e1 e2, e1e2, e1也都是正规式,它们所表 示的正规集分别为L(e1), L(e1)L(e2), L(e1)L(e2)和(L(e1))。
DFA M=({S,U,V,Q},{a,b}, δ,S,{Q})其中δ定义为:
δ (S,a)=U
δ (S,b)=V
δ (V,a)=U
δ (V,b)=Q
δ (U,a)=Q
第三章 词法分析和有穷自动机

ε
ε
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)
第3章 词法分析 (编译原理 陈火旺)

标识符的符号表入口地址作为其单词符号的属性值,常
每个基本字占一个单词种别,单词符号的属性值缺省。
对于界符,运算符通常一个符号一个种别,单词符号的
属性值缺省
例: 参见P42.表3.1 单词符号及种别编码
10
3.1.3 词法分析器作为独立子程序
词法分析可采用如下两种处理结构:
把词法分析程序作为主程序。将词法分析作为
19
3.2.1 正规文法、正规式与正规集
正规集:由正规文法产生的语言所构成的集合。
注:正规集是集合,可有穷也可无穷。 可通过正规式来形式化表示。
对于一个正规文法的语言提炼出一个简洁的公式,用这个
式子来对它进行形式化的表示,这个式子叫正规式。
正规式:也称正则表达式,是说明单词的模式的一种重要的 表示法(记号);是定义正规集的数学工具;用来描述单词 符号。
在设计一个编译程序时,通常是把对源程序的结构分析分为词 法分析和语法分析两个相对独立的阶段来完成。
第一,描述单词的结构比描述源程序的其它语法结构要简单
得多,仅使用3型文法也就基本够用了。
第二,由于把词法分析和语法分析分开,可使编译程序各部
分的功能更为单一,整个编译程序的结构也更加清晰,从而 有利于编译程序的编写和调整。 上述词法分析和语法分析两个阶段的划分,仅仅是对整个编译 程序的逻辑功能而言,而不一定指的是编译程序的执行流程。
25
例3.2 判断下述正规式之间是否等价: (1)b(ab)*与(ba)*b (2)(ab)*与a*b* 解: (1) b(ab)*对应的正规集是b后面出现任意多个ab对
L(b(ab)*)={b,bab,babab, ……}
编译原理 第三章 词法分析

5、界符:如逗号、分号、括号、/*,*/ 等。它是确定的。
单词符号的表示形式:词法分析器所输出的单词符号常常表示成
二元式(单词种别,单词自身的值)。 单词种别可以用以下形式表示: 1、一类单词统一用一个整数值代表其属性。例如:1代表关键字, 2代表标识符等。 2、每一个单词一个类别。例如:1代表BEGIN,2代表END等。 单词自身的值可以表示成:常量的二进制表示;常量、变量等在符号表 种的地址码,等等。
例3-3:简单的状态转换图示例:
1
X
2
初态
终态
Y
(a)转换图示例 数字
3
从0状态到1状态 可能出现字母
字母或数字 字母 其他
0
1
2
*
0
数字
1
其他
2 *
(b)识别标识符的转换图
(c)识别整数的转换图
例3-4:识别FORTRAN实型常数的转换图:
例如下列实型常数可 以被以下转换图识别: 1.23E+4
•scanner当作一遍。 •把scanner当作子程序。
scanner
源程序
scanner作为一遍
设计前提:
输入
列表 把scanner作为一个独立的子程序; 输入缓冲区 预处理 • 词法分析器的任务为输出单词符号。 子程序
•
扫描缓冲区
预 处 理 部 分
•必要性:编辑性字符如空白符、回车符等,除了出现在文字和 扫描器 常数中以外,在别处出现都没有意义。 扫 单词符号 描 •功 能: 剔除无用字符。 器 语法分析器 •实 现: 预处理子程序。 图2.1 词法分析器
例3-2 :下述C++代码段:while ( i >= j ) i - -; 经词法分析器处理以后,它将被转换为如下的单词符号串
单词符号的表示形式:词法分析器所输出的单词符号常常表示成
二元式(单词种别,单词自身的值)。 单词种别可以用以下形式表示: 1、一类单词统一用一个整数值代表其属性。例如:1代表关键字, 2代表标识符等。 2、每一个单词一个类别。例如:1代表BEGIN,2代表END等。 单词自身的值可以表示成:常量的二进制表示;常量、变量等在符号表 种的地址码,等等。
例3-3:简单的状态转换图示例:
1
X
2
初态
终态
Y
(a)转换图示例 数字
3
从0状态到1状态 可能出现字母
字母或数字 字母 其他
0
1
2
*
0
数字
1
其他
2 *
(b)识别标识符的转换图
(c)识别整数的转换图
例3-4:识别FORTRAN实型常数的转换图:
例如下列实型常数可 以被以下转换图识别: 1.23E+4
•scanner当作一遍。 •把scanner当作子程序。
scanner
源程序
scanner作为一遍
设计前提:
输入
列表 把scanner作为一个独立的子程序; 输入缓冲区 预处理 • 词法分析器的任务为输出单词符号。 子程序
•
扫描缓冲区
预 处 理 部 分
•必要性:编辑性字符如空白符、回车符等,除了出现在文字和 扫描器 常数中以外,在别处出现都没有意义。 扫 单词符号 描 •功 能: 剔除无用字符。 器 语法分析器 •实 现: 预处理子程序。 图2.1 词法分析器
例3-2 :下述C++代码段:while ( i >= j ) i - -; 经词法分析器处理以后,它将被转换为如下的单词符号串
编译原理之词法分析

3.1.3 词法记号的属性
属性值用二元组序列表示
position := initial + rate * 60的记号和属性值: id,指向符号表中position条目的指针 assign _ op, id,指向符号表中initial条目的指针 add_op,+ id,指向符号表中rate条目的指针 mul_ op, * num,整数值60
3.3.4 正规定义
• 正规定义的例子
Pascal语言的标识符集合 letter A | B | … | Z | a | b | … | z digit 0 | 1 | … | 9 id letter(letter|digit)*
3.3.4 正规定义
• 正规定义的例子
Pascal无符号数集合,例1946,11.28,63.6E8,1.999E6 digit 0 | 1 | … | 9 digits digit digit* optional_fraction .digits| optional_exponent (E ( + | | ) digits ) | num digits optional_fraction optional_exponent 简化表示 num digit+ (.digit+)? (E(+|)? digit+)?
• 例
L:{ A, B, …, Z, a, b, …, z },D:{ 0, 1, …, 9 } L∪D,LD,L6,L*,L(L∪D )*,D+
3.3 词法记号的描述
例 令L表示集合{ A, B, …, Z, a, b, …, z },令D表 示集合{ 0, 1, …, 9 }。下面是用表运算作用于L 和D所得到的新语言的例子。
第3章词法分析

例:语言L[G]={abn|n>=1},其正规文 语言L[G]={ab |n>=1},其正规文 法为G[A]: 法为G[A]: A→aB A→aB B→bB| B→bB| b 画出状态转换图
例:部分单词的状态图
Letter,digit
s
letter digit
其它 (IDN,入口) ,入口) digit 其它 (NUM,值) , (ASG,_) , ) =
3.2 状态转换图
•识别标识符的流程图 识别标识符的流程图 开始
出口 N N 数字 Y
字母 N 出口
Y
取字符
字母 Y
结点:状态用○表示;终态用◎表示 结点:状态用○表示;终态用◎ 有向弧 弧标记 初态 开始 1 letter 2 ── 箭头 ── 输入字符 Letter,d号的表示
• 常用单词种别 常用单词种别——分类 分类
–各关键字(保留字、基本字) 各关键字(保留字、基本字) 各关键字 –各种运算符 各种运算符 –各种分界符 各种分界符——各用一个种别码标识(特定符号类) 各用一个种别码标识( 各种分界符 各用一个种别码标识 特定符号类) –其它标识符 其它标识符——用一个种别码标示(非特定符号类) 用一个种别码标示( 其它标识符 用一个种别码标示 非特定符号类) –常数 常数——用一个种别码标示(非特定符号类) 用一个种别码标示( 常数 用一个种别码标示 非特定符号类)
• 例:文法 文法G[Z]: : • Z→ Z→Za| Aa| Bb • A→ A→Ba | a • B→ B→Ab| b • 画出状态转换图
2、从右线性正规文法出发,构造状态图 从右线性正规文法出发, 以每个非终结符为状态结点, 1. 以每个非终结符为状态结点 , 开始符号 对应初态S 对应初态S ; 2.增设一个终态 Z; 3. 对于规则 A→aB , 画从状态 A 到 B 的 A→aB, 弧,标为 a; A→a, 4. 对于规则 A→a , 画从状态 A 到终态 Z 的弧, 的弧,标为 a。
第三章词法分析

7
源程序的输入
在内存开辟缓冲区,将程序文本放进该缓冲区 预处理:删除无用字符等 词法分析程序对缓冲区扫描时,设置两个指示器,
一个指向当前正在识别的单词的开始位置,称为 起始指针;另一个用于向前搜索,以寻找单词的 终点,称为扫描指针。
起始指针 搜索指针
8
扫描缓冲区的大小
应当保证单词符号不被缓冲区的边界打断 使用循环链表实现 规定单词符号的大小不超过整个链表的容量
注意:一种语言的单词如何分类、怎样编码,主要取决于 技术上的方便。
13
举例
例如:程序段 if(a>1) b=10;
假定基本字、运 算符、界符都是 一符一种。
它所输出的单词符号是:
(2,)
基本字if
(29,)
左括号(
(10,’a’)
标识符a
(23,)
大于号>
(11,’1’的二进制) 常数1
(30,)
词法分析程序输出的单词符号通常用二元式表示:(单词 类别,单词自身的值)
单词类别:表示单词种类,常用整数编码,它是语法分析 需要的
单词自身的值:是编译中其他阶段所需要的信息
如果一个种别只含一个单词符号,那么该单词符号的类别编码就完 全代表它自身的值。 把单词符号存储在符号表中。不同种类的单词符号可能具有不同类 型的属性。可以用不同种类的符号表实现。
对于字母表∑,我们感兴趣的是它的一些特 殊字集-正规集。
正规集是字母表Σ上的符合一定规则的符号串构成
的集合 正则表达式是一种适合描述符号的表示法,可由它 定义正规集。
20
正规式(regular expression)
定义(正规式和它所表示的正规集):
设字母标为 ❖ 1 和都是上的正规式,它们所表示的正规集分别为{}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15.06.2020
中南大学软件学院 陈志刚
7
3.1 词法分析概述
第三章 词法分析
四、词法分析程序的实现方式
相对独立方式:把词法分析程序作为语法分析 程序的一个独立子程序。语法分析程序需要新 符号时调用这个子程序。
完全独立方式:词法分析程序作为单独一趟来 实现。词法分析程序读入整个源程序,它的输 出作为语法分析程序的输入。
注意:一种语言的单词如何分类、怎样编码,主要取决于技 术上的方便。
15.06.2020
中南大学软件学院 陈志刚
13
3.1 词法分析概述
五、词法分析程序的输出形式
例:若分类表为:
第三章 词法分析
试分析输入串:IF a1>0
THEN b1:=c1*d1
ELSE b1:=5
经词法分析后的输出。
15.06.2020
第三章 词法分析
3.1 词法分析概述 3.2 词法分析程序的设计 3.3 正规式与有限自动机 3.4 词法分析程序的实现 3.5 词法分析器的自动生成
3.1 词法分析概述
第三章 词法分析
一、词法分析程序的任务 二、词法分析程序的功能 三、词法分析程序的安排 四、词法分析程序的实现方式 五、词法分析程序的输出形式
15.06.2020
中南大学软件学院 陈志刚
8
3.1 词法分析概述
第三章 词法分析
四、词法分析程序的实现方式
相对独立方式
当采用递归下降分析等技术实现一趟编译程 序时常采用这种方式。
源程序
Token
词法分析程序
语法分析程序….
get token
15.06.2020
中南大学软件学院 陈志刚
9
3.1 词法分析概述
第三章 词法分析
四、词法分析程序的实现方式
完全独立方式
采用词法分析工作完全独立的原因: 简化设计,降低语法分析的复杂性 提高编译效率 增加编译系统的可移植性
属性字序列
源程序
词法分析程序
语法分析程序….
15.06.2020
中南大学软件学院 陈志刚
10
3.1 词法分析概述
第三章 词法分析
五、词法分析程序的输出形式
第三章 词法分析
一、词法分析程序的任务
➢ 从左至右逐个字符地扫描源程序,产生一 个个单词符号。把作为字符的源程序改造为 单词符号串组成的中间程序,执行词法分析 任务的程序称为词法分析器或称扫描器。
15.06.2020
中南大学软件学院 陈志刚
4
第三章 词法分析
3.1 词法分析概述
二、词法分析程序的功能
词法分析程序主要执行以下功能: 读入源程序字符串,识别开具有独立含义的最 小语法单位——单词(符号); 把单词变换成长度统一的且为定长的属性字;
其他功能: 滤掉空格,跳过注释、换行符 某些预加工处理
15.06.2020
中南大学软件学院 陈志刚
5
3.1 词法分析概述
三、词法分析程序的安排
一个状态转换图只包含有限个状态,有一个初态,
终态用双圈表示。一个状态转换图可识别一定的字
符串。
状态都是非终结符号
例1:
字母或数字
S:开始状态 E:终止状态,用双圈表示 I:标识符状态
S
I
E
字母 数字
15.06.2020
中南大学软件学院 陈志刚
16
一、状态转换图
空白
0
字母
第三章 词法分析
字母或数字
第三章 词法分析
常常把词法分析程序作为独立的一遍或作 为被语法分析程序所调用的子程序。
1、作为独立的一遍:
语法分析前进行词法分析,把单词符号 串形成中间文件存贮。
15.06.2020
中南大学软件学院 陈志刚
6
3.1 词法分析概述
第三章 词法分析
三、词法分析程序的安排
2、作为被语法分析器词用的子程序:
单词--是程序语言的基本语法符号。 如:基本字、标识符、常数、运算符、界符等。 词法分析器中单词的输出形式:
(单词类别、单词内部码值)
15.06.2020
中南大学软件学院 陈志刚
11
第三章 词法分析
3.1 词法分析概述
五、词法分析程序的输出形式
词法分析程序输出的单词符号通常用二元式表示: (单词种别,单词自身的值)
中南大学软件学院 陈志刚
14
3.1 词法分析概述
五、词法分析程序的输出形式
解:输出的单词串为:
第三章 词法分析
15.06.2020
中南大学软件学院 陈志刚
15
第三章 词法分析
3.2 词法分析程序的设计
一、状态转换图
状态转换图是一张有限方向图。用结点代表状态, 状态之间用箭弧连接,箭弧上的标记(字符)代表 在射出结状态下可能出现的输入字符或字符类。
单词种别:表示单词种类,常用整数编码,它是语 法分析需要的
单词自身的值:是编译中其他阶段所需要的信息
如果一个种别只含一个单词符号,那么该单词符号的种 别编码就完全代表它自身的值。
如果一个种别含有多个单词符号,那么还应给出该单词 符号的自身值:标识符自身值是标识符自身的字符串; 常数自身值是常数的二进制数值。
15.06.2020
中南大学软件学院 陈志刚
12
第三章 词法分析
3.1 词法分析概述
五、词法分析程序的输出形式
语言的单词符号
单词符号是程序语言的基本语法单位,一般分为下面5种: 关键字(基本字):(个数确定,可全体编为一类,也 可一字一类) 标识符:(个数不确定,作为一类) 常数:各种类型的常数 。(个数不确定,按类型分类) 运算符:如+、-、*、/、<等。(个数确定,一符一类) 界符:如,、;、(、)、: 等。(个数确定,一符一类)
15.06.2020
中南大学软件学院 陈志刚
2
3.1 词法分析概述 词法分析程序
第三章 词法分析
词法分析是编译过程中的一个阶段,在语法分 析前进行 ,也可以和语法分析结合在一起作 为一遍。
输入:源程序字符串
输出:等价的属性字序列(内部表示形式)刚
3
3.1 词法分析概述
1 非字母或数字 2
例2:
0
1
U
数字
非数字
3
4
=
5
0 0
V
1
15.06.2020
01
+
6
Z
例3:
*
7
非*
8
*
9
,
10
(
11
)
12
中南大学软件学院 陈志刚
其它
13
17
二、状态转换图的实现
第三章 词法分析
方法:每个结点对应一段程序,前面状态结的程 序调用其后继结点的程序。
例1:
字母
1
0
数字
2
PROCEDURE Proc0; Getchar; case char of ‘A’…‘Z’ : proc1; ‘0’…‘9’: proc2; otherwise error; end of case;