第三章词法分析

合集下载

第3章 词法分析

第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)

第三章词法分析

第三章词法分析

五、词法分析程序的输出形式
单词--是程序语言的基本语法符号。 如:基本字、标识符、常数、运算符、界符等。 词法分析器中单词的输出形式:
(单词类别、单词内部码值)
2019/10/14
中南大学软件学院 陈志刚
11
第三章 词法分析
3.1 词法分析概述
五、词法分析程序的输出形式
词法分析程序输出的单词符号通常用二元式表示: (单词种别,单词自身的值)
5.字的长度:
|α|
6.Σ上字的全体: Σ*
7.字的连接:
字α与字β的连接记为αβ
2019/10/14
中南大学软件学院 陈志刚
30
第三章 词法分析
3.3 正规式与有限自动机
一、基本概念
一个状态转换图只包含有限个状态,有一个初态,
终态用双圈表示。一个状态转换图可识别一定的字
符串。
状态都是非终结符号
例1:
字母或数字
S:开始状态 E:终止状态,用双圈表示 I:标识符状态
S
I
E
字母
数字
2019/10/14
中南大学软件学院 陈志刚
16
一、状态转换图
空白
0
字母
第三章 词法分析
字母或数字
中南大学软件学院 陈志刚
22
第三章 词法分析
四、应用状态转换图识别句子
如果x是相应文法的句子便必须能从开始状态出发, 顺着弧的方向行进到终止状态。其步骤如下: (1)从开始状态开始,以它作为当前状态,并从x 的最左字符开始重复步骤2,直到到达x的右端为止; (2)扫描x的下一字符,在当前状态射出的各个弧 中找出标记有该字符的弧,并沿此弧前进,以达到 的状态作为下一当前状态。

第3章 词法分析 (编译原理 陈火旺)

第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, ……}

第3章--词法分析

第3章--词法分析

第3章--词法分析第三章词法分析知识结构:功能词法分析器的要求单词符号分类词法分析单词内部形式器的设计设计⽅发词法分析器的设计状态图词法分析器组成正规表达式单词描述⼯具正规集词法分析器正规⽂法确定有限⾃动机(DFA )单词识别⼯具⾮确定有限⾃动机(NFA )DFA 的最⼩化正规式与FA 的等价转换等价转换正规⽂法与FA 的等价转换第⼀节对词法分析器的要求⼀、词法分析器的功能输⼊源程序,输出单词符号(⼆元式表⽰)。

关键字:是由程序语⾔定义的具有固定意义的标识符。

标识符:⽤来表⽰各种名字,如变量等。

常数:常数的类型有整型,实型等。

运算符:算术运算符,关系运算符,逻辑运算符。

界限符:逗号,分号等。

三、单词符号内部的表⽰形式内部的单词符号TOKEN字(⼆元式),TOKEN字占⽤机器字的长度,依据信息量的多少⽽定。

1、TOKEN字结构VALUE:表⽰单词符号的属性(符号表指针)。

2、TOKEN的作⽤CLASS:⽤于语法分析器对源程序结构的分析。

VALUE:⽤于语义分析器对源程序具体操作的分析。

3、单词种别码划分原则CLASS:关键字,运算符,界限符(编译程序定义的符号)使⽤⼀字⼀种编码。

VALUE值省略。

VALUE:标识符,常数(⽤户定义的符号),存放符号表常数表的指针。

标识符,常数每⼀类为⼀种编码。

例:BEGIN A:= B END;词法分析结果:符号表(BEGIN,---- )Array(A ,K1 ) K1(:= ,--- )(B ,K3 ) K3(END ,--- )(;,--- )四、词法分析器的结构1、⼀遍扫描(交互式结构)。

2、多遍扫描(独⽴式结构)。

第⼆节词法分析器的设计⼀、设计步骤1、确定词法分析器的接⼝关系;2、确定单词分类和TOKEN字的结构;3、对每⼀类单词构造状态转换图;4、根据状态转换图设计算法。

⼆、功能描述1、组织源程序输⼊;2、按词法规则拼读单词符号,并转换成⼆元式;3、删除注解⾏,空格和⽆⽤符号;4、检查词法错误。

编译原理 第三章 词法分析

编译原理 第三章 词法分析
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 - -; 经词法分析器处理以后,它将被转换为如下的单词符号串

第三章词法分析

第三章词法分析
根据定义比较容易证明上述性质,利用这些性质可以化简正规式,证明 正规式的等价关系
说明:*上的某些集合若不能用正规表达式表示,则该集合不是正规集。 如: ={a,b},L(G)={anbn| n0}就不是正规集,因为它不能用正规式表示。 (可以用上下文无关文法Z∷=aZb|ab|ε产生)可以证明,凡是由正规文 法所产生的语言一定是正规集,即可由正规式表示 。
18
第三章 词 法 分 析
§3.6正规表达式和有穷自动机
一、正规表达式和正规集的定义
1.非形式定义 2.递归定义
二、正规表达式的性质 三、正规文法、正规表达式与有穷自动机的关系 四、由正规表达式构造确定有穷自动机
1.由正规表达式e构造转换系统 2.由转换系统构造确定有穷自动机DFA(子集法) 3.由正规文法构造正规表达式
1.由正规表达式e构造转换系统 2.由转换系统构造确定有穷自动机DFA(子集法) 3.由正规文法构造正规表达式
五、确定有穷自动机的化简
1.等价和可区分的概念 2.确定有穷自动机的化简方法
2
§3.6正规表达式和有穷自动机
为什么引入正规表达式?
由正规文法构造状态转换图,再根据状态转换 图可以构造有穷自动机,往往很麻烦,但是, 对于一些复杂的正规文法,如果将其先转换成 正规表达式,再由正规表达式来产生有穷自动 机就方便得多。而且正规表达式的引入有助于 词法分析程序的自动生成,它还广泛应用于模 式识别和文献目录检索等。
五、确定有穷自动机的化简
1.等价和可区分的概念 2.确定有穷自动机的化简方法
16
第三章 词 法 分 析
§3.6正规表达式和有穷自动机
一、正规表达式和正规集的定义
1.非形式定义 2.递归定义

第三章词法分析

第三章词法分析

第三章词法分析前两章为研究编译技术作了一些概念和技术上的先期铺垫,在本章的词法分析内容里将开始介绍编译技术的第一个重要技术点:词法分析。

本章的重点与难点是:词法分析器的任务与设计、状态转换图的实现、由正规表达式(正规式)构造非确定有限自动机、非确定有限自动机的确定化、确定有限自动机的最小化,正规式,正规集;词法分析器自动生成。

本章主要内容是:词法分析器任务,词法分析器设计,正规表达式与有限自动机,词法分析器自动生成。

对于本章,读者应该掌握:词法分析器的作用与设计,状态转换图的实现;正规式,正规集,正规定义;确定有限自动机,非确定有限自动机,NFA到DFA的转化;从正规式构造自动机;词法分析器自动生成。

3.1学习指导3.1.1词法分析器的功能词法分析的任务是识别源程序中具有独立含义的最小语法单位——符号或单词,如标识符,无正负号常数和界符等等。

并把源程序转换为等价的内部表示形式。

功能:读入源程序字符串;识别单词(符号);转换成属性字;并实现一些其他的简单工作:删除注解,预加工处理等等。

执行词法分析的程序称为词法分析程序,或词法分析器,或扫描器。

词法分析的实现有两种方式:相对独立:词法分析作为子程序。

当语法分析程序需要读下一个符号的时候,调用这个子程序。

完全独立:词法分析程序作为单独的一遍来实现。

常用的做法:将词法分析程序安排成一个子程序(过程),每当语法分析需要一个单词时就调用这个子程序;每调用一次,就向语法分析程序提供一个单词的二元组。

词法分析器的功能是输入源程序,输出单词符号。

单词符号是一个程序语言的基本语法符号。

程序语言的单词符号一般可以分为5类:(1)基本字(关键字、保留字):具有特殊含义的标识符,不作它用,有分隔语法的作用;(2)标识符:表示各种名字;(3)常量:整型、实型、布尔型、字符型;(4)运算符:算术、逻辑、关系运算符;(5)界符:包括,;,(,),:,等等。

扫描器的输出格式:输出格式为二元组序列,每个单词对应一个二元组,形式为(类号,内码)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 ,常数表入口 >
第三章词法分析
6
三、词类和属性 程序语言单词的分类: 1.关键字(保留字或基本字):begin,end 2.标识符:用来表示各种名字 3.字面常数:256,3 .14,true,‘abc’ 4. 运算符:如,+、-、*、/ 等等 5.分界符:如逗号,分号,冒号等
E
12e-4
d
d
-
d
0d 1.
2
d3
E
4
+
5
d
6
7
d
1000
3.1415
第三章词法分析
0.1e+1
4
20
二、 编写词法分析程序
根据画出的状态转换图(识别单词的)构 造词法分析程序,每个状态对应一段程序, 完成到达此状态的工作;词法分析程序的控 制程序模拟状态转换图的状态转换。
在识别标识符的过程中,要拼写出来,并和 保留字区别开来;识别出的标识符要填入符 号表中
第三章词法分析
10
对于常数, 其单词自身的属性常用其在 常数表中的入口指针来表示
第三章词法分析
11
以a 语= 句b 子+ ac=*b+d c*d 为例,假设按表 3.1为单词编码,词法分析后的结果为:
Token字
符号表
<25,
>
<36, -------- >
a 25 B 25
<25,
>
C 25
<32, -------- >
为了构造词法分析器,要研究构词法, 每种词类的结构模式以及识别它的数 学模型——有穷自动机。它的模拟程 序可以作为词法分析器的控制程序。
32 1确定的有限自动机(DFA) 32 2构造识别单词的DFA 32 3 编写词法分析程序
第三章词法分析
16
分析程序的设计框图
SCANNER
OUTPUT
D 25
<25,
>
<31, -------- >
<25,
>
第三章词法分析
12
四、 词法分析的设计形式
(1)设计成一个独立程序,完成词 法分析的任务,结果以文件的形式组织, 做为语法分析的输入
源程序
词法 分析
第三章词法分析
符号表 TOKEN字 错误信息
13
(2)作为语法分析和语义分析的子程序
错误的诊查处理
有穷控制器
单词的词类和属性 6 (词类符号,
第三章词法分析
单词的属性) 4
3.1 词法分析程序的设计
一、词法分析程序的功能
源程序 词法分析器 单词序列
二、 扫描器的任务
1、组织源程序的输入
2、转换成机内表示形式
3、删除注释行、空格及无用符号
4、查填符号表
5、检查词法错误
第三章词法分析
5
if i>j then i:=0 else j:=1
语法分析
源 程 序
词法 分析
语义分析和 中间代码生成
中 间 代 码
符号表管理
第三章词法分析
14
五、词法分析程序的设计框图
SCANNER
OUTPUT
sort
字母 数字 / 界符

RECOGID RECOGDIG HANDLCOM RECOGDEC RECOGSTR
LOOKUP
第三章词法分析
15
32 词法分析器的手工构造
无符号实数(用d表示数字):
(a) dd.d dE(+- ) dd 0.1e+14
(b)ddE(+- ) dd
12e-4
Hale Waihona Puke (c) dd.d d3.141592
(d) dd…dd
1000
第三章词法分析
18
标识符:字母开始的字母数字串。
例:C语言的标识符
a
a,d
I
B
TT
其它
-
第三章词法分析
19
例:C语言实常数的文法描述
在识别常数的过程中,要把它转换成机器表
示以作为属性值,记录到常数表中。
第三章词法分析
21
program SCANNER;
Begin initiate符号表,字符串表,行,列计数器;
Open 源文件,TOKEN文件,打印机文件;
Repeat FIRSTCH(CH);
模块0:
if CH!=EOL then call SORT(CH)
扫描器主控
else RDLINE;
until CH=EOF;
把符号表,字符串表做成文件;
close源文件,TOKEN文件;
call OUTPUTR;
第三章词法分析
22
单词分类模块(SORT)输入:
CH内含单词首符;
procedure SORT(CH);
{ case CH of ‘字母’:
8
表3.1 单词词类编码
第三章词法分析
9
对于关键字、界符、运算符来说,它们 的词类编码就可以表示其完整的信息, 故对于这类单词,其单词自身的属性值 通常为空
而对于标识符,词类编码所反映的信息 不够充分,标识符的具体特性还要通过 单词自身的属性进行互相区分。标识符 的单词自身的属性常用其在符号表中的 入口指针来表示
3 . 2 词法分析器的手工构造: 用DFA 能识别
3 . 3词法分析程序自动构造工具LEX简介
第三章词法分析
3
L i n e = 8 0 ; 输入
字母
字字母母
0
1
2


数字
3数 4

=
5
输出
id(25) , ‘Line’ =( 36), num(27), ‘80’ ;(45),

第三章词法分析
7
词法分析器的输出:
(词类编码,单词自身的属性值)
词类编码原则: 界符和运算符: 一字一码。
关键字可分成一类,也可以一个关键字分 成一类。 一字一码。
常数可统归一类,也可按类型(整型、实 型、布尔型等),每个类型的常数划分成 一类。 一类型一码。
所有的标识符分为一类。 一类一码。
第三章词法分析
相关文档
最新文档