编译原理第3章汇编
编译原理第03章PPT课件
65
-
procedure swap(var x:integer); begin x:=x+a; /*a是全局变量*/
a:=x-a; x:=x-a end; 调用swap(a);别名也影响编译器生成优化的代 a:=(x-y*z)+w ; b:=(x-y*z)+u ; 若a与x、y或z中任一个是别名
用标号控制循环体 DO 7 I=1,10 A(I)=0 B(I)=0
7 CONTINUE
19
-
②Pascal的for 语句
计数重复的值可在任何有序集上 for . . . to . . . for . . . down to . . .
20
-
2. 条件制导
①while:0次或多次重复 ②do-while,repeat-until:多次重复 ③ALGOL 68循环的一般形式:
Smalltalk 语言以对象方式来处理控 制结构。
40
-
可以认为上述语言是可扩充的,用 户可以通过定义新的(抽象)数据类型 和控制结构来扩充基本语言。
但基本的控制结构并没有发生改变。
41
-
第二节 单元级控制结构
规定程序单元之间控制流程的机制。 最简单的机制是 ALGOL60 的分程序
42
-
在程序顺序执行的过程中,遇到一 个分程序,就建立一个新的引用环境, 并执行这个分程序。
7
-
3. 多选一 嵌套 的 if then else
if语句包含if语句 ①ALGOL 60的选择结构引起二义性
if x>0 then if x<6 then x:=0 else x:=9 ②PASCAL的“最近匹配原则” ③ ALGOL 68中if语句的结束符号fi ④ ALGOL 68对else if 进行缩写
《编译原理》第3章
NFA到相应的DFA的构造的基本思路是: DFA的每 一个状态对应NFA的一组状态. DFA使用它的状 态去记录在NFA读入一个输入符号后可能达到的 所有状态.
NFA M所能接受的符号串的全体记为L(M)
结论:
上一个符号串集V是正规的,当且仅当存 在一个上的不确定的有穷自动机M,使得 V=L(M)。
DFA是NFA的特例.对每个NFA N一定存在一个DFA M,使得 L(M)=L(N)。对每个NFA N存在着与之 等价的DFA M。 有一种算法,将NFA转换成接受同样语言的DFA.这 种算法称为子集法. 与某一NFA等价的DFA不唯一.
0
1
S P
Z
{P} {}
{P}
{S,Z} {Z}
{P}
• δ为S * 到S的子集(2 S)的一种映射
• 从NFA的矩阵表示中可以看出,表项通常是一状态的集合, 而在DFA的矩阵表示中,表项是一个状态
∑*上的符号串t被NFA M接受:
• 对于Σ*中的任何一个串t,若存在一条从某一初态 结点到某一终态结点的道路,且这条道路上所有 弧的标记字依序连接成的串(不理采那些标记为ε 的弧)等于t,则称t可为NFA M所识别(读出或接 受)。 • 若M的某些结点既是初态结点又是终态结点;或 者存在一条从某个初态结点到某个终态结点的道 路,其上所有弧的标记均为ε,那么空字ε可为M所 接受。
其中: δ(S,0)={P}
δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z} • 状态图表示
1 1 S 0 0,1 Z
P
1
• 矩阵表示
状态 输入
δ(S,0)={P} δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z}
编译原理_第3章课件
编译原理_第3章课件第三章词法分析本章将讨论词法分析程序的设计原则,单词的描述技术,识别机制及词法分析程序的⾃动构造原理。
教学要求1.掌握:正规式,DFA的概念,NFA的概念2.理解:将NFA转换为DFA ,正规式、正规⽂法与有穷⾃动机间的转换⽬录3.1 词法分析程序的设计3.2 单词的描述⼯具3.3 有穷⾃动机3.4 正规式与有穷⾃动机的等价性3.5 正规⽂法和有穷⾃动机的等价性3.6 词法分析程序的⾃动构造⼯具⼩结3.1.词法分析(lexical analysis)程序的设计回顾:1、词法分析的任务:逐个读⼊源程序字符并按照构词规则切分成⼀系列单词。
2、词法分析程序:实现词法分析的程序。
⼀.词法与语法分析程序的接⼝⽅式1、作为独⽴的⼀遍词法分析是编译过程中的⼀个阶段,在语法分析前进⾏,把字符流的源程序变为单词序列,输出在⼀个中间⽂件上。
2、与语法分析结合在⼀起作为⼀遍⼀般、把词法分析程序设计成⼀个⼦程序,由语法分析程序调⽤词法分析程序来获得当前单词,供语法分析使⽤。
….词法分析程序的主要任务:读源程序,产⽣单词符号词法分析程序的其他任务:滤掉空格,跳过注释、换⾏符追踪换⾏标志,复制出错源程序,宏展开,……⼆、词法分析程序的输出输出是单词符号。
单词是语⾔中具有独⽴意义的最⼩单位。
单词包括:保留字标识符常量运算符界符(标点符号)词法分析程序所输出的单词符号常常采⽤以下⼆元式表⽰:(单词种别,单词⾃⾝的值)。
单词的种别是语法分析需要的信息,⽽单词⾃⾝的值则是编译其它阶段需要的信息。
(标识符,指向该标识符所在符号表中位置的指针) 单词的种别可以⽤整数编码表⽰,假如标识符编码为1,常数为2,保留字为3,运算符为4,界符为5例如:程序段if i=5 then x∶=y;在经词法分析器扫描后输出的单词符号和它们的表⽰如下:- 保留字if(3,'if')- 标识符i(1,指向i的符号表⼊⼝)- 等号=(4,'=')- 常数5(2,'5')- 保留字then(3,'then')- 标识符x(1,指向x的符号表⼊⼝)- 赋值号∶=(4,'∶=')- 标识符y(1,指向y的符号表⼊⼝)- 分号;(5,';')三、词法分析⼯作从语法分析⼯作独⽴出来的原因:简化设计改进编译效率增加编译系统的可移植性3.2 单词的描述⼯具程序设计语⾔中的单词是基本语法成分.单词符号的语法可以⽤有效的⼯具加以描述,并且基于这类描述⼯具,实现词法分析程序的⾃动构造.描述⼯具:正规⽂法和正规式识别⼯具:有穷⾃动机⼀.正规⽂法多数程序设计语⾔的单词的语法能⽤正规⽂法来描述。
程序设计语言编译原理(第三版)第3章
程序设计语言编译原理(第三版)第3章第3章词法分析任务:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串。
§3.1§3.2§3.3§3.4对于词法分析器的要求词法分析器的设计正规表达式与有限自动机词法分析器的自动产生(LE某)—略1§3.1对于词法分析器的要求一.功能和输出形式二.接口设计§3.1对于词法分析器的要求一.功能和输出形式1.功能:输入源程序,输出单词符号2.单词符号的分类(1)关键字:由程序语言定义的具有固定意义的标识符,也称为保留字或基本字。
例如:Pacal语言中begin(2)标识符:用来表示各种名字。
endifwhile等。
如变量名、数组名、过程名等。
(3)常数:整型、实型、布尔型、文字型等例:100(5)界符:,;3.14159()true等ample(4)运算符:+、-、某、/3§3.1对于词法分析器的要求3.输出的单词符号形式二元式:(单词种别,单词符号的属性值)通常用“整数编码”“单词符号的特征或特性”单词符号的编码:标识符:一般统归为一种常数:常按整型、实型、布尔型等分类关键字:全体视为一种/一字一种运算符:一符一种界符:一符一种4§3.1对于词法分析器的要求例:考虑下述C++代码段:while(i>=j)i--;经词法分析器处理后,它将被转换为如下的单词符号序列:<while,-><(,-><id,指向i的符号表项的指针><>=,-><id,指向j的符号表项的指针><),-><id,指向i的符号表项的指针><--,-><;,->§3.1对于词法分析器的要求二.接口设计1.词法分析器作为独立的一遍词法分析字符流(源程序)单词序列(输出在一个中间文件上)2.词法分析器作为一个独立的子程序,但并不一定作为独立的一遍语法分析器单词(至少一个)调用(取下一个单词)词法分析器优点:使整个编译程序的结构更简洁、清晰和条理化.6§3.2词法分析器的设计一.输入和预处理二.单词符号的识别三.状态转换图及其实现§3.2词法分析器的设计一.输入、预处理1.预处理:剔掉空白符、跳格符、回车符、换行符、注解部分等.原因:编辑性字符除了出现在文字常数中之外,在别处的任何出现都无意义.#注解部分不是程序的必要组成部分,它的作用仅在于改善程序的易读性和易理解性.8§3.2词法分析器的设计2.预处理子程序:每当词法分析器调用时,就处理出一串确定长度(如120个字符)的输入字符,并将其装进词法分析器所确定的扫描缓冲区中。
编译原理课件第3章
代码优化
代码优化的目的和分类
目的
提高程序运行效率,减少空间占用,提高可读 性。
局部优化
对单个程序块的优化,如基本块的优化。
全局优化
对整个程序的优化,如循环优化、死代码删除等。
代码优化的主要技术
常量折叠和替换
将常量表达式的结果在编译时计算出来,并 用结果替换掉表达式。
循环优化
编译原理课件第3章
contents
目录
• 词法分析 • 语法分析 • 中间代码生成 • 代码优化 • 目标代码生成
01
CATALOGUE
词法分析
词法分析器的任务
将源程序分解成一系列的记号(tokens) 去除源程序中的注释和空白符
识别出关键字、标识符、常量、操作符等记号 为语法分析器提供有序的记号流
通过改变循环的迭代顺序、减少循环中的计 算等方法来提高循环的效率。
死代码删除
删除永远不会被执行到的代码。
函数内联
将小的函数调用替换为函数体的直接执行, 以减少函数调用的开销。
代码优化的实现
编译器前端
负责将源代码转换成中间表示(IR),这一阶段主要 完成语义分析和语法分析。
编译器中端
对中间表示进行优化,如常量折叠、死代码删除等。
考虑文法的二义性
有些文法具有二义性,即一种语法结构可以有多种解析方 式。在设计语法分析器时需要考虑如何处理二义性问题, 避免产生错误的分析结果。
语法分析器的实现
编写词法分析器
词法分析器是将输入的字符串转 换成一个个的单词或符号,供语 法分析器使用。在实现语法分析 器之前,需要先编写词法分析器 。
实现递归下降分析
解析与语义分析
编译原理第三版 第三章 词法分析
超前搜索
例: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。 另一种编码方案(如本教材中): 标识符:列为一种,用一个整数编码表示; 常数:按类型分种编码; 关键字、运算符、界符:采用一字一种编码。
《编译原理》重点知识总结
《编译原理》知识点总结目录第一章引论第二章高级语言及其语法描述第三章语法分析——自上而下分析第四章属性文法和语法制导翻译第五章语义分析和中间代码产生第六章优化第一章引论一.编译程序(compiler):把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序二.编译程序的工作的五个阶段:词法分析、语法分析、中间代码产生、优化、目标代码产生1.词法分析任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
依循的原则:构词规则描述工具:有限自动机FOR I := 1 TO 100 DO保留字标识符等符整常数保留字整常数保留字2.语法分析任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
依循的原则:语法规则述工具:上下文无关文法3.语义分析与中间代码产生任务:对各类不同语法范畴按语言的语义进行初步翻译。
(变量是否定义、类型是否正确等)依循的原则:语义规则中间代码:三元式,四元式,逆波兰记号,树形结构等。
是一种独立于具体硬件的记号系统。
例:将Z:=X + 0.618 * Y 翻译成四元式为(1) * 0.618 Y T1(2) + X T1 T2(3) := T2 _ Z4. 优化任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
依循的原则:程序的等价变换规则FOR K:=1 TO 100 DOBEGINM := I + 10 * K;N := J + 10 * K;END4.目标代码产生任务: 把中间代码变换成特定机器上的目标代码。
依赖于硬件系统结构和机器指令的含义目标代码三种形式:a)绝对指令代码: 可直接运行b)可重新定位指令代码: 需要连接装配c)汇编指令代码: 需要进行汇编第二章高级语言及其语法描述2.1.1语法词法规则:单词符号的形成规则。
a)单词符号是语言中具有独立意义的最基本结构。
编译原理(第二版)第3章文法和语法
编译原理(第二版)第3章文法和语法编译原理(第二版)第3章文法和语法课件第3章文法和语言教学要求:本章是编译原理课程的理论基础,要求理解文法、语言、规范推导、规范归约和短语、简单短语、句柄的基本概念;掌握语言的求解方法、文法的二义性的判断方法及句型的分析方法。
教学重点:上下文无关文法,语言定义编译原理(第二版)第3章文法和语法课件一、语言语言是由句子组成的集合,是由一组记号所构成的集合。
汉语--所有符合汉语语法的句子的全体英语--所有符合英语语法的句子的全体程序设计语言--所有该语言的程序的全体编译原理(第二版)第3章文法和语法课件二、文法一种语言描述工具,用来定义句子的结构,用有限的规则把语言的全部句子描述出来,是以有穷的集合刻划无穷的集合的工具。
〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::= 你| 我| 他〈名词〉::= 王明| 大学生| 工人| 英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::= 是| 学习〈直接宾语〉::=〈代词〉|〈名词〉“我是大学生”是否是该语言的句子?编译原理(第二版)第3章文法和语法课件〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::= 你| 我| 他〈名词〉::= 王明| 大学生| 工人| 英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::= 是| 学习〈直接宾语〉::=〈代词〉|〈名词〉〈句子〉〈主语〉〈谓语〉〈代词〉〈谓语〉我〈谓语〉我〈动词〉〈直接宾语〉我是〈直接宾语〉我是〈名词〉我是大学生编译原理(第二版)第3章文法和语法课件三、符号和符号串任何一种语言可看成是某个符号集上定义的,按一定规则构成的一切基本符号串组成的集合。
字母表:元素的非空有穷集合。
(符号集) 符号:字母表中的元素。
例如:汉语的字母表中包括汉字、数字及标点符号等。
C语言的字母表是由字母、数字、若干专用符号及IF、FOR之类的保留字组成。
编译原理编译第三章
④Ada 的循环结构 loop /*可以在loop前加重复说明*/
循环体(语句序列)
end loop; 重复说明可以是:
while <条件> 或 for <计数变量> in <离散范围> 或 for <计数变量> in reverse <离散范围>
可由exit或exit when<条件>终止循环
整理课件
⑤Dijkstra的卫哨命令表示法 do B1→S1 B2→S2
...... BN→SN od
整理课件
四. 语句级控制结构讨论
顺序、选择、重复是一定意义的抽象 关于goto语句的讨论 控制结构的选择
五. 用户定义控制结构
如:Pascal的计数控制变量可以是ducer
repeat 生产一个元素; 存放这个元素到缓冲区;
forever
单元consumer
repeat 从缓冲区移出一项; 对该项执行某个运算;
forever
整理课件
2. 几个基本概念
①并发单元的特点:诸程序单元并行活动 ②同步问题 正确访问缓冲区:不会向已满的缓冲区写数据, 不会从空缓冲区读数据
signals (zero(int),overflow,had_format(string)) ③异常处理程序静态绑定于调用者
<语句> except<处理程序表>end 其中,<处理程序表>的形式是
when <异常表1>: <语句1>
…… when<异常表n>: <语句n>
整理课件
3. Ada的异常处理
p(i):-new player(i, cards) end; for i:=1 step 1 until 3 do
cyy-3(汇编)
例4:多分支程序设计 : 希望根据累加器A 被置位的情况, 希望根据累加器 被置位的情况,控制 中的一个。 转移到八个子程序 R1~R8 中的一个。 (中断查询即为此情况 中断查询即为此情况) 中断查询即为此情况 三、循环结构和循环程序设计 1、循环结构 (见书 、 见书P177) 见书 2、循环程序设计 、 (1) 循环次数已知 中的16进制数转换为 例5:将BX中的 进制数转换为 : 中的 进制数转换为ASCII 码, 放到BUF开始的内存单元中,并在屏幕显 开始的内存单元中, 放到 开始的内存单元中 示出数值。 示出数值。
(1) 段定义 段定义----SEGMENT / ENDS
格式: 格式:
段名 段名
SEGMENT
…
[定位类型 [组合类型 [分类名 定位类型] 组合类型 分类名 组合类型] 分类名]
逻辑段内容
ENDS
功能:将一个逻辑段定义成整体。 功能:将一个逻辑段定义成整体。 定位类型— 其中 : ·定位类型 表示该段的起始边界要求 定位类型 表示该段的起始边界要求. PARA PAGE WORD BYTE --节首址 缺省值 节首址(缺省值 节首址 缺省值) --页首址 页首址 --字地址 字地址 --字节地址 字节地址
(BYTE、WORD、DWORD) 、 、 )
(4) 表达式 ---由操作数和运算符组成。在 由操作数和运算符组成。 由操作数和运算符组成 汇编时,一个表达式得到一个值。 汇编时,一个表达式得到一个值。 操作数可以是常数或子表达式。 操作数可以是常数或子表达式。 运算符有下列几种: 运算符有下列几种:
例3:数据段定义一批数据如下: :数据段定义一批数据如下:
DATA1 DATA 2 DATA3 DATA4 DATA5 DATA6 DB 20H DW 0204H DB (-1*3),(15/3) DD 12345H DB ‘123’ DW 2 DUP(?)
编译原理(王晓斌)编译第三章课件
中间代码的形式
常见的中间代码形式包括三地址 代码、抽象语法树(Abstract Syntax Tree, AST)等。
三地址代码的生成
三地址代码的特点
三地址代码具有高度的局部性,便于 后续的优化和目标代码生成。
三地址代码的生成方法
常见的三地址代码生成方法包括递归 下降分析、预测分析等。
表达式的优化
数据流分析分类
根据数据流分析的侧重点不 同,可以分为值依赖分析、 活性变量分析、路径分析等
。
数据流分析应用
数据流分析在编译器优化中 主要用于确定变量的值在程 序执行过程中的变化情况, 从而帮助编译器进行更好的 优化。
控制流分析
控制流分析定义
01
控制流分析是一种静态程序分析技术,通过分析程序
中控制流的转移情况,来发现程序中的潜在问题。
分析器根据当前字符和当前状态,查找到对应的规则
,然后根据规则转换到新的状态和生成记号。
03
分析器会持续读取字符并重复上述过程,直到处理完
整个源代码。
词法分析的实现
01
词法分析器通常使用正则表达式或有限自动机来实 现。
02
正则表达式用于描述记号的模式,有限自动机用于 实现状态转换和记号生成。
03
分析器可以手动编写代码实现,也可以使用工具生 成。
词法分析概述
词法分析是编译过程的第一阶段,负责将源代码分解成一系列的记号( tokens)。
记号是源代码中的最小语法单位,例如关键字、标识符、常量、运算符等 。
词法分析器也称为扫描器或词法器,其任务是识别和生成记号序列。
词法分析过程
01
词法分析器从源代码的第一个字符开始读取,直到源
代码结束。
编译原理 3章
y x
q0
q2
x
x y x,y
q1
q3
x
x,y
y
NDFA到DFA的转换
空移环路的寻找和消除
a
ε
q1
q2
q0
aε
b
b
ε
q4
q3
b
a
a
q2
q0 b
b b
q3
NDFA到DFA的转换
消除空移
ε A
a
q1
b
B
q2
c
q3
a
a
q1c
c
A
Bb
b
q2
c
q3
• 如果B是终止状态,置A为终止状态; • 如果A是开始状态,置B为开始状态;
x,y
q1'
y
x,y
x
q4'
q5'
x
q3'
εNDFA的确定化
εNDFA=(Q ,Σ∪{ε}, t, Q0, F) • 定义 3.8 状态子集 I的ε-闭包,
ε-closure (I)={q | t (I, ε)=q}
• 定义 3.9 Ia=ε-closure (J),其中J=t (I,a)
εNDFA的确定化举例
1
A
B
②确定化
0 C
1
0
F
1
1
0
D
1
1
0 E
0 G
1 A
0
0
C
1
B
0
F
1
1
0
D
1
1
③ 最小化
1
1
a
b
编译原理cmpl_03
另一种 表示
假定基本字、运算符和界符都是一符一种,标识符自身 的值是符号表的入口地址,常数是二进制值。
经词法分析器处理后,它将被转换为如下的单词符号序 列: ( ( ( ( ( ( ( ( ( while ( id >= id ) id -; ,- ) ,- ) ,指向i的符号表表项的指针 ) ,- ) ,指向j的符号表表项的指针 ) ,- ) ,指向i的符号表表项的指针 ) ,- ) ,- )
16
简单语言单词符号及内部表示
单词 种别 符号 编码 begin 1 end 2 if 3 then 4 else 5 while 6 do 7 标识符 10 整常数 11
内码值
内部字符串 二进制形式
单词 符号 + * / <= <> < : := ;
种别 编码 13 14 15 16 17 18 19 21 2每当语法分析分析 器需要一个单词符号时就调用这个子程序。每一次调 用,词法分析器就从输入串中识别出一个单词符号。 在后面的讨论中,我们假定词法分析器是按这种方式 12 进行工作的。
词法分析器的设计
输入、预处理
词法分析器工作的第一步是输入源程序文本到输入缓冲区。 预处理工作是将输入的源程序中的多余的空白符、跳格符、 回车符、换行符等编辑性字符以及注释部分剔除掉,并将结 果存入扫描缓冲区,方便单词符号的识别。 为了保证单词符号不被扫描缓冲区边界打断,扫描缓冲区一 般设计为如下一分为二的区域,每次输入更新其一半空间的 内容,使得词法分析器在最坏情况下识别单词符号的长度是 扫描缓冲区长度的一半。因此也称配对缓冲区。
(10)
21
用 C 语言编写出的词法分析程序 程序
22
§3.3 语言单词符号的两种定义方式
编译原理 第3章
一般而言 ,当一个语言的两种单词有相同的前缀时,其扫描 器都应当考虑采用超前搜索和多字符回退操作。
编译原理
8
3.1.4 源程序的输入及预处理 •为了提高读盘的效率和便于扫描器工作,通常采用缓冲 输入的方案,即在内存设置一个适当大小的输入缓冲区, 让操作系统直接将磁盘上的源程序字符串分批送入次缓 冲区,供扫描器处理。
∴M能识别出L(G)中的全部句子。
编译原理 21
二、对于左线性文法构造状态转换图 设G=(Vn,Vt,P,S)是一左线性文法,Vn中的每个非终结符号 对应状态图中的一个结点。与右线性文法不同的是,增 设一个不属于V的符号R标记初态结点,并用S作为终态 结点 。|Vn|=k,共有k+1个节点(状态)。 1. 对于G中的每一条形如A→a的规则,从初态结点R引一 条矢线到结点A,并用符号a标记这条矢线。 2. 对于G中每一条形如A→Ba的规则,从结点B引一条矢线 到结点A,并用符号a标记这条矢线。
编译原理
16
E d
d 0
d
d
d 5 d 6
1
.
d
2
E
4
±
. 图3.4文法G<无符号数>的状态图
编译原理
17
状态图识别符号串
利用状态转换图可识别相应文法所表示的符号串。 定义:设α∈VT * ,如果状态转换图中存在一条从初态到 终态的路径,此路径上的标记符号顺序相连构成符号串α, 则称α为状态图所识别串。
状态图识别语言:状态图所识别的串集合。
a 开始 0 a 1 b 2
编译原理 18
b
2)状态转换图对符号串的识别 对符号串W=a1a2a3……an,ai∈ VT 识别过程:
从初态S出发,自左至右逐个扫描W中的字符,在S 状态下扫视的符号为a1; 在节点S所射出诸矢线中寻找标记为a1的矢线(若 不存在,则说明W有错);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/12/3
8
3.1 正规文法与有限自动机
• 一、正规文法、正规集、正规式
定理2:设若、、是字母表A上的正规式,且L(), 则:
• = | 当且仅当 = * • = | 当且仅当 = *
2018/12/3
9
3.1 正规文法与有限自动机
• 一、正规文法、正规集、正规式
A→α
α∈VT*
<标识符>→<字母>|<标识符><字母>|<标识符><数字> <字母>→a|b|…|z|A|B|…|Z|_ <数字>→0|1|2|3|4|5|6|7|8|9
2018/12/3 3
3.1 正规文法与有限自动机
• 一、正规文法、正规集、正规式
2、正规集
• 由正规文法产生的语言集合,称为正规集. • 正规集是集合,可有穷也可无穷。可通过正规式 (Re:Regular Expression)来形式化表示
• 二、有限自动机(FA:Finite Automata)
1、说明:
• 有限自动机是具有离散输入输出系统的数学模型。它具 有有限数目的内部状态,系统可以根据当前所处的状态 和面临的输入字符决定系统的后继行为。其当前状态概 括了过去输入处理的信息
输入带
a b
c d
读头
e ……
有限状态控制器
2018/12/3 12
3、正规式(Re)
• 例:
– A={ai|i=1,2,…,n},则ε,a1,a1|a5a7,a5(a3|a2)*,…都是A上 的Re –V={0,1},则ε,0,1,0011,(01)*10,((01)*|1)*,…等二进 制字符串都是V上的Re
2018/12/3
6
3.1 正规文法与有限自动机
2018/12/3
4
3.1 正规文法与有限自动机
• 一、正规文法、正规集、正规式
3、正规式(Re):正规文法所产生的语言用一种表达 式来表示,称为正规式。
• 定义:设A是非空的有限字母表,A={ai| i=1,2,……n},则
– 1) ,和ai(i=1,2,……n)都是正规式。 – 2) 若、是正规式,则|、 • 、*、 *也是正规式。 – 3) 正规式只能通过有限次使用1,2规则获得
• 一、正规文法、正规集、正规式
例:证明b(ab)*=(ba)*b
证明: ∵L(b(ab)*)={b,bab,babab,……} L((ba)*b)={b,bab,babab,……} 由于正规集的前n项相同 可知它们的正规集是相等的 ∴ 正规式 b(ab)*=(ba)*b
2018/12/3
7
3.1 正规文法与有限自动机
– – – – – S:有限状态集 :有限字母表 f:S S上的单值映射,f(s,a)=s’ s0:唯一的初态,s0∈ S Z:终止状态集,ZS
2018/12/3
14
3.1 正规文法与有限自动机
• 二、有限自动机
2、确定有限自动机(DFA)
• 注解:
– 1)用矩阵表示转换便于计算机处理,但不直观,而用状 态转换图表示比较直观 – 2)在整个状态转换图中只有一个初始状态结点,用“” 射入的结点表示初始状态。可有若干终止状态(也可能没 有),用双圆圈表示 – 3)若初始状态结点同时又是终止状态结点,则表示空串 可为相应DFA识别
1
0 1
2018/12/3 15
3.1 正规文法与有限自动机
• 例: DFA M=({0,1,2,3},{a,b},f,0,{3})
f: f(0,a)=1 f(2,a)=1 f(0,b)=2 f(2,b)=3 f(1,a)=3 f(3,a)=3 f(1,b)=2 f(3,b)=3
• 一、正规文法、正规集、正规式
定理1:令,,是Re,则
• • • • • • • (1) + = + (2) +( + )=( + )+ () =( ) (3) ( + )= + (+) = + (4) = = (5) (*)*=* (6) *=++ += * = * (7) (+ )*= (* + *)*= (* *)*
• 注意:
– 仅由字母表A={ai| i=1,2,……n}上的正规式所组成的语言 称作正规集,记作L() – 利用正规集相同,可用来证明相应正规式等价 – “|”读作为“或”,也可写作为“+”或“,”;“•”读作 连接
2018/12/3 5
3.1 正规文法与有限自动机
• 一、正规文法、正规集、正规式
4、如何由正规文法得到对应的正规式?
• 1) 由正规文法G的各个产生式写出对应的正规方程式, 得到联立方程组 • 2) 把方程组中的非终结符当作变元 • 3) 求此正规式方程组的解,得到关于开始符号S的解: S=, ∈VT*,就是所求正规式。
2018/12/3
10
3.1 正规文法与有限自动机
编译原理及编译程序构造
陈宏建 二○一二年十二月
第三章 词法分析
本章主要内容结构 Rg
Re
NFA
DFA
Min DFA
算法 结构
2018/12/3
2
3.1 正规文法与有限自动机
• 一、正规文法、正规集、正规式
1、正规文法(Rg:Chomsky 3型文法):
• 只能含有产生式: (左线性文法) A→αB 或者 (右线性文法) A→ Bα • 二者不能同时存在 • 举例 A→α α∈VT*
3.1 正规文法与有限自动机
• 二、有限自动机
电梯是典型的有限状态自动机 那电梯如何描述呢? 电梯的程序又如何构造呢?
2018/12/3
13
3.1 正规文法与有限自动机
• 二、有限自动机-分别讲解
2、确定有限自动机(DFA)
• 确定有限自动机DFA是一个五元组 M(S,,f,s0,Z),其中:
例:已知正规文法G1的产生式,求出它所定义的正规式。
产生式为:SaS|aB BbB|bA AcA|c
• 解:由产生式写出对应的联立方程组: S=aS|aB ( 1) B=bB|bA ( 2) A=cA|c ( 3) 运用定理2求解(1)(2)(3): …
2018/12/3
11
3.1 正规文法与有限自动机