第3章词法分析与有限自动机资料


器处理后输出的二元式及其单词表示如下:
二元式
单词
(3, ’if’) (5, ’(’) (1,指向a的符号表项的指针) (4, ’>=’) (2, 90) (5, ’)’) (1,指向b的符号表项的指针) (4, ’=’) (1,指向c的符号表项的指针) (5, ’;’)
关键字if 界符( 标识符a 运算符>= 常数90 界符) 标识符b 运算符= 标识符c 界符;
词法分析器
单词流
int,i,=,-
单 词 符 号
1,-
;,-
i,-
++,-
;,-
},-
1、词法分析器的任务和输出形式
(2)单词符号
单词符号是程序设计语言的基本语法单位和最小语义单位。
(3)单词符号的种类
标识符:标记常量、变量、函数等的名字,如fun、i
关键字:具有固定意义的标识符,如if、while、for
编译原理
第3章 词法分析与有限自动机
安庆师范学院计算机与信息学院
本章目标
❖ 解释词法分析器的工作原理及设计实现 ❖ 介绍单词的描述工具:正规文法和正规式 ❖ 定义DFA和NFA的概念 ❖ 介绍“正规式→NFA→DFA→最小化DFA”的转换方法 ❖ 介绍有限自动机、正规文法和正规式的等价性 ❖ 介绍词法分析器的自动构造工具-LEX的原理与实现
① 起点指示器:指向当前正在识别的单词的开始位置(指向新单词的首字符) ② 搜索指示器:用于向前搜索以寻找单词的终点
(4)扫描器的工作
调用预处理子程序,把N(如120)个输入字符装进扫描缓冲区的某半区, 搜索指针从起点指针开始向前寻找单词的终点,若在该半区内查找到单词 的终点,便输出二元式,再把起点指针移到此处的后一个字符,继续搜索 下一个单词,如果在搜索到该半区的边缘,尚未到达单词终点,那么就调 用预处理子程序,把后续的N个字符装进另半区,继续搜索。
① 建立输入缓冲区,将源程序分批读入输入缓冲区中
② 过滤掉源程序中的注释;剔除一些无用的空白符、跳格符、回车符、换 行符等编辑性字符;进行宏替换;实现文件包含的嵌入和条件编译的嵌 入等。
③ 将预处理结果送扫描器的扫描缓冲区
(2)预处理程序作为独立子程序
预处理可作为一个子程序完成上述三个任务,并被词法分析器调用, 每调用一次,它就处理出一串确定长度(如120个字符)的输入字符,并 送进扫描缓冲区。
2、将词法分析工作分离的考虑
(1)将词法分析器设计为语法分析器的子程序
在实现编译程序时,常将词法分析程序从语法分析中独立出来,将其 设计为语法分析器的子程序,每当语法分析器需要一个单词符号时就调 用词法分析器,每一次调用,词法分析器就从输入串中识别出一个单词 符号,并将该单词类别和单词值返回给语法分析器。
用来区分该类单词中的哪一 个单词,它是单词本身的机 内编码。单词符号的属性是 指单词符号的特性或特征。 属性值是反应特性或特征的 值。例如,对于某个标识符, 常将存放它的有关信息的符 号表项的指针作为其属性值; 而对于某个常数,则是将存 放它的常数表项的指针作为 其属性值。
1、词法分析器的任务和输出形式
教学内容
3.1 词法分析器的设计思想 3.2 词法分析器的设计 3.3 单词的描述工具 3.4 有限自动机 3.5 正规式、正规文法和有限自动机的等价性 3.6 词法分析器的自动构造工具——LEX 3.7 本章小结
3.1 词法分析器的设计思想
1 词法分析器的任务和输出形式 2 将词法分析工作分离的考虑
单词符号
常 数:各种类型的常数,如实型0.618,布尔型TRUE
运算符:如+、-、*、/、<=、 <、>、 >= 、==
界 符:如,、;、(、),{,}
1、词法分析器的任务和输出形式
(4)单词符号的输出形式
二元式: ( 单词种别, 单词符号的属性值)
表示单词的种类,它是语 法分析所需要的信息。一 个语言的单词符号如何划 分种类、分为几类、如何 编码都属于技术性问题, 主要取决于处理上的方便。 通常让每种单词对应一个 整数码,这样可最大限度 地把各个单词区别开来。
(4)单词符号的输出形式
常用单词种别编码方案
标识符:一种
单词种别编码
关键字:全体视为一种或一字一种 常 数:按类型分种,如整数、实数、布尔型 运算符:一符一种 界 符:一符一种
返回
1、词法分析器的任务和输出形式
(5)举例
假Байду номын сангаас单词类别用整数编码,标识符、常数、关键字、运算符和界符的
编码依次为1、2、3、4、5。C++语句 if(a>=90) b=c;在经过词法分析
词
字符串形式 字符
法 分
的源程序
析
器
单词 取下一单词 语
法
符
分
号
析
表
器
返回
2、将词法分析工作分离的考虑
(2)好处
① 简化设计: 由词法分析器处理注解和空白字符,可简化语法分析器的 设计。此外,在设计新语言时,分离词法和语法规则可以进行更全面 的语言设计。
② 改进编译效率: 编译的大部分时间消耗在读源程序和分离一个个单词 符号上,专用的经过精心设计的读源程序字符流和处理单词符号的词 法分析器可以加快编译速度。
3、状态转换图与单词的识别
(1)状态转换图
状态转换图是一种有限方向图,状态转换图可用于识别3型语言,它 是设计和实现扫描器的一种有效工具,是有限自动机的直观图示。它由以 下几个要素构成:
1、词法分析器的任务和输出形式
(1)词法分析器的任务
自左至右逐个字符地对源程序进行扫描,按语言的构词规则识别出 一个个单词,把作为字符串的源程序改造为单词符号串的中间程序。
void, -
main,-
(, -
源 void main( )
),-
语{
{,-
言 int i=1; 程 i++; 序}
字符串流
③ 增强编译系统的可移植性:不同语言的字母表的特殊性,构词规则的 差异和其它与设备有关的不规则性可以限制在词法分析器中进行处理。
3.2 词法分析器的设计
1 输入缓冲区和预处理程序 2 扫描器的工作原理 3 状态转换图与单词的识别 4 状态转换图的代码实现
返回
1、输入缓冲区和预处理程序
(1)预处理程序
2、扫描器的工作原理
(1)扫描器
执行词法分析的程序称为词法 分析程序,或称词法分析器, 或称扫描器。
(2)扫描缓冲区
一个可以互补使用的一分为二的扫描缓冲区。扫描缓冲区总长度为 2×N(如N=120)个字符,扫描器单词长度的要求是单词长度≤1/2扫描缓 冲区长度。
返回
2、扫描器的工作原理
(3)设置两个指示器
合集下载

第三章 词法分析和有穷自动机

第三章 词法分析和有穷自动机

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

10-第三章 有限自动机与词法分析器

10-第三章  有限自动机与词法分析器
其编译过程采用一趟扫描方式 以语法、语义分析程序为核心 词法分析程序和代码生成程序都作为一个过程,当语法分 析需要读单词时就调用词法分析程序,而当语法、语义 分析正确,需要生成相应的目标代码时,则调用代码生 成程序。 表格管理程序实现变量,常量和过程标识符的信息的登 录与查找。 出错处理程序,对词法和语法、语义分析遇到的错误给 出在源程序中出错的位置和与错误 性质有关的编号,并 进行错误恢复。
ε 1 ε
SFA(A)
ε
SFA(B) ε
ε SFA(B)
SFA(A)
1 正则表达式到有穷自动机

结构化自动机
– RE = A*
ε 1 ε SFA(A) ε ε
1 正则表达式到有穷自动机

结构化自动机举例
– – – – – – – a a| b ab a* a(b|c) (a|b)(a|c) (a|b)c*
1 正则表达式到有穷自动机

正则表达式到有穷自动机的转换
– 正则表达式到NFA – NFA到DFA转换 – DFA极小化 – DFA等价性
1 正则表达式到有穷自动机

结构化自动机
– RE = ε –RE = a
1
ε
2
1
a
2
1 正则表达式到有穷自动机

结构化自动机
– RE = A | B – RE = AB
词法分析过程GETSYM所要完成的任务: –读源程序(getch) –滤空格 –识别保留字 –识别标识符 –拼数 –识别单字符单词 –拼双字符单词
实验报告格式

格式
– – – – 实验目的 主要软件 分析过程(算法、重点语句、对应书中的原理) 实验的结论、建议与设想

编译原理 第三章 有限自动机与词法分析器

编译原理 第三章 有限自动机与词法分析器

第三章有限自动机与词法分析器3.1词法分析3.1.1词法分析器的功能在第二章里我们已介绍了词法分析的基本问题。

计算机存储是二进制式的,因此,任何一种程序和数据在计算机内部均被表示为二进制表示。

实际上,当程序员每按键盘中的一个键时,自动往计算机里输入一个相应的八位二进制码,称这种码为ASCII码。

当程序员敲完程序时将它保存到自己事先起好名的文件中,因此,程序在计算机文件中的表示是ASCII码序列(末尾有文件结束码)。

编译器总是要用某种程序设计语言来写,而任何一种语言的程序其操作对象必须是该语言所规定的数据。

编译器的操作对象是程序中的各种语法单位,如<常量声明>,<类型声明>,<变量声明>,<过程声明>,<表达式>,<语句>,<变量>等等,因此,必须把它们都表示成某种数据结构形式,而它们的最小单位是所谓的单词,故首当其充的是要把每个单词转换成一种数据形式,通常称它们为TOKEN。

词法分析器的任务就是,从源程序的ASC码(用高级语言的术语来说是字符串)序列逐个地拼出单词,并将构造相应TOKEN数据表示。

词法分析器可有两种,一种是它作为语法分析的一个子程序,一种是它作为编译器的独立一遍。

前一种情形,词法分析器不断地被语法分析器所调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其TOKEN值返回给语法分析器。

后一种情形则不同,即不是被别的部分不断地调用,而是完成编译器的独立一遍任务,具体说将整个源程序的字符序列转换成TOKEN序列,并将其交给语法/语义分析器。

实际的编译器一般都采用子程序方式,但是为了独立地介绍词法分析、语法分析和语义分析的概念和技术,我们将词法分析部分分离出来即作为独立一遍的词法处理器来介绍。

从实际的角度来说,这种方法有以下缺点:一是因为它要生成TOKEN列,自然多占用空间;二是因为要保存所有的TOKEN,需要耗费更多的时间。

第三章 有限自动机与词法分析器

第三章 有限自动机与词法分析器

REi
16/42
例3.2.3.1
[1] 数字集D = { 0,1, ......, 9 } 和字母集L = ( A | ...... | Z )可表示为:
D→ 0|1| ......| 9
L → A | B | ..... | Z
[2] 整常数的集合IntC可表示为:
IntC → D+ 或
2/42
§3.1 词法分析
一、词法分析器的功能
3/42
二、单词的内部表示
1.单词的分类:标识符、整常数、实常数
保留字、符号词、控制词 2.单词的内部表示(Token)
(词法信息,语义信息)或(词法信息)
例:x1,z12
$id
$id x1 $id z12
$id
标识符名表
…x 1…z 1 2…
4/42
7.符号串集的方幂
A0={λ }
A1={A} , A2=AA,AK=AA…A(k个)
8.符号串集的正闭包
A+=A1∪A2∪A3∪……
9.符号串集的星闭包 若A={λ ,……},则A+=A*
A*= A0∪A1∪……
13/42
二、正则表达式
R∑—字母表∑上正则表达式的集合 L(R∑) —R∑所表示的语言,即符号串的集合 (1) 是 正则表达式,即R 。其中L()={ }。 (2) 是 正则表达式,即 R 。其中L()={ }。 (3) c 是 正则表达式,即c R 。其中L(c)={ c }。 设A和B是 正则表达式,即A R,B R ,则有
9/42
词法错误校正可能产生语法错误,例如, “beg#in”将被校正为“beg in”,它很可能产 生语法错误,这是不可避免的。因此在发现词 法错误时,返回一个特殊的带警告的TOKEN。 被警告TOKEN的语义值是一个字符串,它是 重新开始扫描时被删除的部分。语法分析器遇 到被警告的TOKEN,意味着警告下一TOKEN 是不可靠的,需要错误校正。

编译原理 第3章 词法分析与有穷自动机(第5-8讲)

编译原理 第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章 词法分析与有穷自动机
■有穷自动机的状态转移图表示方法

编译原理第三版 第三章 词法分析

编译原理第三版 第三章 词法分析

超前搜索
例:FORTRAN语言中关键字的识别: DO99K=1,10 识别DO为关键字要搜 DO99K=1.10 索到“,” FORTRAN语言中常数的识别:
5.EQ.M, 5.E08
识别5为常数要搜索到Q
2、状态转换图
大多数程序设计语言中单词符号的词法规则可 以用正规文法描述。如: <标识符>→ 字母|<标识符>字母|<标识符>数字 <整数>→数字|<整数>数字 <运算符>→+|-|×|÷„ <界符>→; |, |( | )|„
#
3.3 正规表达式与有限自动机


目的: 形式化地描述词法规则和词法分析程序 词法分析程序的自动生成 主要内容 正规式与正规集 确定有限自动机 (DFA) 非确定有限自动机(NFA) 正规式与有限自动机的等价性 确定有限自动机的化简
正规文法

多数程序设计语言单词的语法都能用正规文法 (3型文法)描述 正规文法回顾 文法的任一产生式α→β的形式都为
单词符号的种类
(3) 常数 常数的类型一般有整型、实型、布 尔型、字符型等。
(4) 运算符 如 +,-,*,/等,对具体语言个 数是确定的。 (5) 界符 如 , ;()等,对具体语言个数是 确定的。
单词符号的表示形式
词法分析器所输出的单词符号常常表示成如下的 二元式:<单词种别,单词符号的属性值> 单词种别:由语法分析阶段使用的抽象符号。如: 用整数编码。 最简单的编码方案为一类一码,种别编码可设为: 1,2,3,4,5。 另一种编码方案(如本教材中): 标识符:列为一种,用一个整数编码表示; 常数:按类型分种编码; 关键字、运算符、界符:采用一字一种编码。

第3章-3-有限自动机.解析


种性质的FA称为非确定的FA(NFA:
Nondeterministic FA)
二、非确定有穷状态自动机
a A aa
S ab Z a
bB b a
例如:文法G3.1 Z → Za|Aa|Bb A → Ba|Za|a B → Ab|Ba|b
二、非确定有穷状态自动机
一个非确定的有穷自动机(NFA)M是一 个五元组:N=(K,Σ,f,S0,Z)其中
DFA f的定义
2.为定义DFA所接受(或识别)的符号串集合,我们
先将其转换函数f 的定义域拓广到 f^: K* : (1)f^ (s,)=s, sK; (2)f^ (s,aw)=f^ ( f(s,a),w), sK,a,w*;
对于x* ,f^(s,x)=t 的含义是,当自动机M从 状态s出发,依次扫描完x的各个符号后将进入状 态t.
第三章 词法分析
3.1 词法分析概述 3.2 正规文法和状态转换图 3.3 有限自动机 3.4 正规表达式和正规集 3.5 词法分析器的实现
3.3 有限自动机
一、确定有穷状态自动机(DFA) 二、非确定有穷状态自动机(NFA) 三、NFA和DFA的转换
四、具有ε-动作的NFA 五、ε-动作的NFA的确定化
实质:用自底向上方法识别句子 状态转换的下一状态不唯一,如何解决?
三、NFA和DFA的转换(NFA的确定化)
NFA状态转换的下一状态不唯一,如何解决? 确定化的概念 1.确定化:对任给的NFA,都能对应地构造一
DFA,它们有相同的接受集 2.确定化原理:令构造出的“新”DFA的状态 与“旧”NFA的某一状态子集对应,并使 “新”DFA对“旧”NFA的状态转移保持跟 踪。
1.K’=2k.即,由M的全部状态子集构成,特别地, 令 S0’=[S0].

第03章有限自动机和词法分析


d
d
S0
S1
d
d
.
0
1
d
d
2
3
第22页,共93页。
DFA 例3:
• 第二位为2的整数集(包括一位):如 x2ad • 标识符集:如 x, ab3_7
d
d
2
L
L,D-
L,D
第23页,共93页。
∑*上的符号串 t 被 M 接受
–定义1:对于∑* 中的任何字符串t,若存在一 条从初态结到某一终态结的道路,且这条路上 所有弧的标记符连接成的字符串等于t,则称t
第13页,共93页。
❖词法错误校正
• 词法错误种类:
语言不允许的符号:#
括号类配对错误:
单词的后继符错(偶尔): • 词法错误校正:
a 删除已被读过的字符,并重新扫描未被 读过的字符
b 删除已读过的第一个字符,重新扫描它 的后继部分的字符。
• 校正后的标示
第14页,共93页。
❖ 词法分析独立化的意义
f(U,b)=V
f(Q,b)=Q
a
U
Sb
bV
a a,b
aQ
b
证明:
f(S,baab)
=f(f(S,b),aab)
=f(V,aab) =f(f(V,a),ab)
=f(U,ab)
=f(f(U,a),b)
=f(Q,b)
=Q
Q属于终态。得证。
第26页,共93页。
• DFA M 所能接受的符号串的全体记为 L(M)
“x1” (2,2) “z12” (4,3)
名表 x1 z 1 2
b 指针数组法:字符串空间中的地址用指针表示,如下图所示:
3

第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等都是保 留字,它们一般不用作一般标识符。

编译原理第三章(4-2)

北京交通大学 于双元 15
无符号数一般形式:dm dm-1 · · · d1 d0 ·d-1 d-2 · · ·d-nE+ dd · · · d E d 0 d . 3 d 1 d d E 4 d 5 d d 6
.
d
2
+∣d
. d d
d
d
F
北京交通大学 于双元 16
无符号数一般形式:dm dm-1 · · · d1 d0 ·d-1 d-2 · · ·d-nE+ dd · · · d E d 0 d . 3 d 1 d d E 4 d 5 d d 6
A B
②开始符号S作为初始状态 设一符号F不属于V作为终止状态
S
F B F F
③形如A→aB的规则
④形如A→a的规则 特别:A → ε
A A
a a
A 未曾在A的射出弧中 出现过的终结符号
北京交通大学 于双元
也可以消除ε产生式后再画状态图。
4
例:G[Z]: Z→0U∣1V U →1Z∣1 V →0Z∣0
1 初态
0 Z 1
U
1 0
F
0
V
②此过程是一种推导过程. (最右(左)推导)
相当于: Z=>0U =>01Z =>011V =>0110Z =>01100U =>011001
能否编程序实现?
有什么问题?
北京交通大学 于双元
8
3 、左线性文法的状态图
左线性文法的规则呈: A→Ba或A→a A,B∈Vn ,a∈Vt (1)状态图 ①G[S]的每一个非终结符号代表一结点(状态) A B
北京交通大学 于双元
23
3、设有如下状态转换图,试给出对应的正则文法 (左线性和右线性)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档