编译原理ppt第三章

合集下载

编译原理第03章PPT课件

编译原理第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.1基本知识结构图 3.1基本知识结构图
语法 程序设计语言的定义 语义 文法的直观概念 文法的定义 文法 语言的定义 文法的类型 0型 1型(上下文有关) 上下文有关) 2型(上下文无关) 上下文无关) 3型(正则文法) 正则文法)
文 法 和 分析方法 句型分析 相关问题 文法的化简 文法的实用限制 文法中的空规则
3.2 知识点
3.2.1 基本概念
•程序设计语言:是一个记号系统,其完整定义包括语法和语义两个方面。 程序设计语言:是一个记号系统,其完整定义包括语法和语义两个方面。 描述语法的工具之一是文法(上下文无关文法)。程序设计语言的语义分 描述语法的工具之一是文法(上下文无关文法)。程序设计语言的语义分 )。 为两类:静态语义和动态语义。 为两类:静态语义和动态语义。 •文法:以有穷的集合刻画无穷的集合的一个工具。文法分为四种类型。 文法:以有穷的集合刻画无穷的集合的一个工具。文法分为四种类型。 •文法的形式定义:定义3.1。 文法的形式定义:定义3.1。 •规则的概念。 规则的概念。 •推导的概念。 推导的概念。 •语法树:是一种描述上下文无关文法的句型推导的直观工具。 语法树:是一种描述上下文无关文法的句型推导的直观工具。 •文法的化简。 文法的化简。

编译原理_第3章课件

编译原理_第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 单词的描述⼯具程序设计语⾔中的单词是基本语法成分.单词符号的语法可以⽤有效的⼯具加以描述,并且基于这类描述⼯具,实现词法分析程序的⾃动构造.描述⼯具:正规⽂法和正规式识别⼯具:有穷⾃动机⼀.正规⽂法多数程序设计语⾔的单词的语法能⽤正规⽂法来描述。

哈工大编译原理.ppt

哈工大编译原理.ppt

procedure SORT(CH);
{ case CH of ‘字母’:
‘字母’: call RECOGID(CH,TOKEN);
‘/’: call HANDLECOM(CH,TOKEN);
‘数字’: call RECOGDIG(CH,TOKEN);
‘’‘
call RECOGSTR(CH,TOKEN);
if TOKEN!=‘ ’ then call PRINTERR(‘注解未完’);
TOKEN:=‘ ';
return }
25
识别界限符(RECOGDEL) 输入:CH内含单界限符; 输出:各种界符的TOKEN字; procedure RECOGDEL(CH,TOKEN); { case CH of
otherwise call RECOGDEL(CH,TOKEN);
end case;
write TOKEN into TOKEN文件;
Return } 23
procedure RECOGID(CH,TOKEN);
{ WORD:= ‘ ’; WORD:=WORD||CH; Repeat {
call GETCH(CH);
%%
标识符 {入口地址=LOOKUP();}
%%
LOOKUP()
31
辅助过程是动作需要的,这些过程用C书 写,可以分别编译.例:LOOKUP()
32
28
声明 %% 翻译规则 %% 辅助过程
29
声明包括变量,符号常量和正规定义式。
翻译规则的形式为:
p1
{ 动作1}
p2
{ 动作2}


pn
{ 动作n}
30
每个pi是正规定义式的名子,每个{动 作i}是正规定义式pi识别某类单词时,词 法分析器应执行动作的程序段。用C书 写。

编译原理课件第3章

编译原理课件第3章
ຫໍສະໝຸດ 04CATALOGUE
代码优化
代码优化的目的和分类
目的
提高程序运行效率,减少空间占用,提高可读 性。
局部优化
对单个程序块的优化,如基本块的优化。
全局优化
对整个程序的优化,如循环优化、死代码删除等。
代码优化的主要技术
常量折叠和替换
将常量表达式的结果在编译时计算出来,并 用结果替换掉表达式。
循环优化
编译原理课件第3章
contents
目录
• 词法分析 • 语法分析 • 中间代码生成 • 代码优化 • 目标代码生成
01
CATALOGUE
词法分析
词法分析器的任务
将源程序分解成一系列的记号(tokens) 去除源程序中的注释和空白符
识别出关键字、标识符、常量、操作符等记号 为语法分析器提供有序的记号流
通过改变循环的迭代顺序、减少循环中的计 算等方法来提高循环的效率。
死代码删除
删除永远不会被执行到的代码。
函数内联
将小的函数调用替换为函数体的直接执行, 以减少函数调用的开销。
代码优化的实现
编译器前端
负责将源代码转换成中间表示(IR),这一阶段主要 完成语义分析和语法分析。
编译器中端
对中间表示进行优化,如常量折叠、死代码删除等。
考虑文法的二义性
有些文法具有二义性,即一种语法结构可以有多种解析方 式。在设计语法分析器时需要考虑如何处理二义性问题, 避免产生错误的分析结果。
语法分析器的实现
编写词法分析器
词法分析器是将输入的字符串转 换成一个个的单词或符号,供语 法分析器使用。在实现语法分析 器之前,需要先编写词法分析器 。
实现递归下降分析
解析与语义分析

编译原理陈火旺版第三章ppt

编译原理陈火旺版第三章ppt
预处理子程序:当词法分析器调用时处理 一串确定长度的输入字符并装入扫描缓冲区。
词法分析器对扫描缓冲区扫描时采用2个 指示器:一个指向当前单词的开始位置(起点 指示器);另一个用于向前搜索以寻找单词的 终点(搜索指示器)。
扫描缓冲区的设计:
预处理 子程序
扫描器 单词符号
起点指示器 搜索指示器
输入 输入缓冲区
else if(ch=‘+’) return($PLUS,-); else if(ch=‘*’) begin
Getchar(); if(ch=‘*’) return($POWER,-); Retract(); return($STAR,-); end else if (ch=‘;’) return ($SEMICOLON,-); else if (ch=‘(’) return ($LPAR,-); else if (ch=‘)’) return ($RPAR,-); else if (ch=‘{’) return ($LBRACE,-); else if (ch=‘}’) return ($RBRACE,-); else ProcError(); /*错误处理*/
a(a|b)* ∑上所有的以a为首的字
(a|b)*(aa|bb)(a|b)* ∑上所有含有2个相继的a或者2个
相 继的b的字
例3.2 令∑={ A , B , 0 , 1 } , 下面是∑上的正规式和相应的正规
集。
正规式
正规集
(A|B)(A|B|0|1)* ∑上 “标识符” 的全体
(0|1)(0|1)*
§3.3 正规表达式与有限自动机
3.3.1 正规式与正规集
递归定义:
⑴ε和都是∑上的正规式,其所表示的正规集

编译原理第三章-Read

第三章 词法分析
词法分析的基本概念 正规式自动机和状态图 词法分析程序的设计
1
学习目标:
掌握:词法分析程序的构造,正规式和正 规文法到有穷自动机的转换,NFA到DFA的 转换、DFA的化简
理解:正规文法、正规式、DFA的概念、 NFA的概念
了解:词法分析程序的自动构造工具
2
词法分析程序
A→(a|d)A A→ε
A→aA A→dA
最终有产生式: S→aA , A→ ε, A→aA, A→dA
30
2. 将正规文法转换成正规式 将每条产生式改写为正规式
用代入法解正规式方程组
最后只剩下一个开始符号定义的正规式,其中 不含非终结符
正规文法到正规式的转换规则:
文法产生式 正规式
规则1 A→xB B→y A=xy
分配律
5。 r=r, r=r
是“连接”的恒等元素
6。 rr=r r=rrr… “或”的抽取律
25
程序中的单词都能用正规式来定义
令l为a~z的字母,d为0~9的数字
e1= l ( l | d)* e2= dd*
e1表示标识符集合 e2表示无符号整数
注(比较): <标识符>→l|l<字母数字> <字母数字>→l|d|l<字母数字>|d<字母数字>
多含有一个终结符为止
原产生式 变换后产生式
规则1 A→xy A→xB B→y 规则2 A→x*y A→xA A→y 规则3 A→x|y A→x A→y
其中B为一新非终结符
29
例: 将R=a(a|d)*转换成相应的正则文法 令转换成文法G=(VN,VT,P,S) 其中VT={a,d}, 文法开始符为S 首先形成S→a(a|d)*,然后变换 S→aA A→(a|d)*

编译原理_课件_第三章_语法分析1

3、开始符号至少必须在某个产生式的左部出现一 次。
11
例3.1 试构造产生标识符的文法。
I→L|LS S →T|ST T →L|D L →a|b|c|d…|z|A|B…|Z|_ D →0|1|…|9
12
例3.2 写一文法,使其语言是奇数集合,但不 允许出现以 0开头的奇数。
N →A|MA M →B|MD A →1|3|5|7|9 B →1|2|3|4|5|6|7|8|9 D →0|B
4
二、形式语言
? Chomsky于1956年提出了一种用来描述语言的数学系统。 人们把用一组数学符号 和规则来描述语言的方式称为 形式 描述,而把所用的数学符号和规则称为形式语言。
? 形式语言,只是从语法上研究语言。它是抽象的数学系统, 用于模拟程序设计语言的语法,或者是并不很成功地模拟 自然语言如英语的语法。
特定的含义。 语用—在各个记号所出现的行为中,它们的来
源、使用和影响。
3
什么是符号与字母表?
? 字母表:由若干元素(符 号、字母)所组成的有限 非空集合。常用大写英文 字母A,B… 或希腊字母Σ 表示。
? 符号:可以相互区别的记 号(元素)。
? 例如:
Σ = {0,1} V = {a, b,c…z} A={begin,if,real,end}
7
引例2
有如下规则: <标识符>→<字母> <标识符> → <标识符> <字母> <标识符> → <标识符> <数字> <字母> → A <字母> → B <字母> → C <数字> → 0 <数字> → 1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
到某一终态结的通路,且该通路上所有弧的标 记符连接成的字符串等于t,则称t可以为 DFA M所识别 若DFA M的初态结同时又是终态结,则ε可为 M所识别。
a S b
2013-8-2
U a
a a,b
b
Q V
b
baab为DFA所接受
27
例:证明t=baab被下图的DFA所接受。 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属于终态。 a U a 得证。 a,b
A→aA
A→dA
最终有产生式: S→aA , A→ ε, A→aA,
2013-8-2
A→dA
15


将正规文法转换成正规式
将每条产生式改写为正规式 用代入法解正规式方程组 最后只剩下一个开始符号定义的正规式,其中不含 非终结符

正规文法到正规式的转换规则: 文法产生式 规则1 A→xB B→y 规则2 A→xA|y 规则3 A→x A→y 正规式 A=xy A=x*y A=x|y
2013-8-2
33
例 NFA M=({S,P,Z},{0,1},f,{S,P},{Z}) 其中: f(S,0)={P} f(S,1)={S,Z} f(Z,0)={P} f(Z,1)={P} f(P,1)={Z} 状态图表示:
1 1 S 0
2013-8-2
矩阵表示: S P Z
0,1
P 1
Z
0 {P} {} {P}
为1,常数为2,保留字为3,运算符为4, 分解符为5。则语句 if(bc>9) y=a; 二元式形式的单词序列如下: (3,‘if’) (5,’(’)
2013-8-2
4
1.3 词法分析实现方法 把词法分析作为单独一遍独立出来。使词法分
析和语法分析完全独立 把词法分析工作穿插在语法分析过程中,即作 为语法分析的子程序
2013-8-2
30
2013-8-2
312013-8-2 Nhomakorabea32
3.2 不确定的有穷自动机
NFA的定义
一个不确定的有穷自动机M是一个五元组: M=(K,Σ ,f,S,Z),其中: 1. K是一个有穷集,它的每个元素称为一个状态; 2. ∑是一个有穷字母表,它的每个元素称为一 个输入字符; 3. f是一个从K × ∑*至K的子集的映射; 4. S K,是一个非空初态集 5. Z K,是一个终态集。
词法分析
掌握:词法分析程序的构造,正规式和
正规文法到有穷自动机的转换,NFA到 DFA的转换、DFA的化简 理解:正规文法、正规式、DFA的概念、 NFA的概念 了解:词法分析程序的自动构造工具
2013-8-2
1
$1 词法分析的基本概念
1.1 词法分析的意义 识别单词、并标记单词的属性、再转换成统一长
初态为唯一初态结点,用=〉标记; 终态对应终态结点,用双圈表示。 若有f(ki , a)=kj,则从结点ki 到结点kj 画标记为a 的弧。
2013-8-2
24
例 DFA M=({S,U,V,Q},{a,b},f,S,{Q}) f(S,a)=U f(S,b)=V
f(V,a)=U
f(U,a)=Q

仅由字母表A={ai|i=1,2,…,n}上的正规式所组 成的语言称谓正规集,记为 L( )
2013-8-2
8
正规式 (e1)
e1|e2 e1.e2 e1 *
正规集 L(e1) L(e1)∪L(e2) L(e1)L(e2) (L(e1))*
2013-8-2
9
举例: 令={a,b}, 上的正规式和相应的正规集有 正规式 正规集 a {a} ab {a,b} ab {ab} (ab)(ab) {aa,ab,ba,bb} a { ,a,aa,…任意个a串} (ab) { ,a,b,aa,ab ……所有由a和b 组成的串}
2013-8-2
10
正规式的代数性质
设 r,s,t 是正规式,正规式服从的代数规律是: r|s = s|r “或”满足交换律 r|(s|t) = (r|s)|t “或”的结合律 (r s) t = r (s t) “连接”的结合律 r(s|t) = r s|r t (r|s) t = r t|s t 分配律 εr = rε= r ε是“连接”的恒等元 素 rr=r “或”的抽取律 r=rrr…
2013-8-2
29
DFA M所能接受的符号串的全体记为L(M). 结论:
上一个符号串集V是正规的,当且 仅当存在一个上的确定有穷自动机M,使 得 V=L(M) 确定性 表现在:转换函数f:K×Σ→K是一个单值函数, 也就是说,对任何状态k∈K,和输入符号a∈Σ, f(k,a)唯一地确定了下一个状态。
2013-8-2
17
2013-8-2
18
根据规则2:A→xA|y A=x*y
2013-8-2
19
$3 有穷自动机(也称有限自动机)
是一种识别装置 作用:能准确地识别正规集,即识别正规文法所 定义的语言和正规式所表示的集合 意义:为词法分析程序的自动构造寻找特殊的方 法和工具。 分类: 确定的有穷自动机 (Deterministic Finite Automata) 不确定的有穷自动机 (Nondeterministic Finite Automata)
S b
2013-8-2
b
a
Q
V
b
28
DFA的行为很容易用程序来模拟
DFA M=(K,Σ,f,S,Z)的行为的模拟程序 K:=S; c:=getchar; while c<>eof do { K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’)
2013-8-2
11
程序中的单词都能用正规式来定义 令l为a~z的字母,d为0~9的数字 e1= l ( l | d)* e1表示标识符集合 e2= dd* e2表示无符号整数
注: <标识符>→l|l<字母数字> <字母数字>→l|d|l<字母数字>|d<字母数字>
正规式比正规文法更容易让人理解单词是按怎 样的规律构成的,且可以从某个正规式自动地 构造识别程序。
2013-8-2
20
2013-8-2
21
3.1 确定的有穷自动机(DFA)
定义: 一个DFA M是一个五元组: M=(K,Σ,f,S,Z) 1. K是一个有穷集,它的每个元素称为一个状态 2. Σ是一个有穷字母表,它的每个元素称为一个输 入字符 3. f是一个从 K × ∑→K的单值部分映射,即 f( ki , a)=kj ,意味着当前状态为ki ,输入字符为a 时,将转换到下一状态kj 4. S∈K,是唯一的初态 5. Z K,是一个终态集,终态也称为可接受状态 或结束状态。
规则1 规则2
规则3
A→xy A→x*y
A→x|y
A→xB B→y A→xA A→y
A→x A→y
其中B为一新非终结符
2013-8-2
14
例: 将R=a(a|d)*转换成相应的正则文法 令转换成文法G=(VN,VT,P,S) 其中VT={a,d}, 文法开始符为S 首先形成S→a(a|d)*,然后变换 S→aA A→(a|d)* A→(a|d)A A→ε
2013-8-2
22
例: DFA M=({S,U,V,Q},{a,b},f,S,{Q})
其中f定义为:
f(S,a)=U f(V,a)=U f(U,a)=Q f(Q,a)=Q
2013-8-2
f(S,b)=V f(V,b)=Q f(U,b)=V f(Q,b)=Q
23
DFA表示成状态转换图(Transition Diagram) 每个状态对应图中的一个结点:
f(V,b)=Q
f(U,b)=V
f(Q,a)=Q
状态转换图表示为:
a
f(Q,b)=Q
U a a a,b
S
b
b
Q
V
2013-8-2
b
25
DFA表示成状态转换矩阵
例 DFA M=({S,U,V,Q},{a,b},f,S,{Q}) f(S,a)=U f(S,b)=V f(V,a)=U f(V,b)=Q f(U,a)=Q f(U,b)=V f(Q,a)=Q f(Q,b)=Q
2013-8-2
5
$2 正规文法和有限自动机
2.1 正规文法、正规集、正规式 正规文法(3型文法) 正规集:有正规文法产生的语言
正规集是集合,有穷或无穷,可以通过正规式 来形式化的表示
2013-8-2
6
例如 : 用l表示a~z中的任一英文字母,d 表示0~9中任一数字。 描述标识符的正规文法为:
2013-8-2
12
2.2 正规文法和正规式间的转换
等价性: 对任意一个正规文法,存在一个定义同一
语言的正规式 对任意一个正规式,存在一个定义同一语 言的正规文法
2013-8-2
13
将∑上的一个正规式r转换成文法G=(VN,VT,S,P) VT= ∑,首先形成产生式S→r,S为G的开始符 不断利用下面的规则做变换,直到每个产生式 最多含有一个终结符为止 原产生式 变换后产生式
16
2013-8-2
例:将文法G[S]转换成正规式 G:S→a A|a A→dA|d 先由产生式得: S=aA|a A=d*d 将A代入S中得: S=ad*d|a 利用正规式变换得 S=a(d*d|ε)=ad* 说明:d*d|ε =(ε|d|dd|…)d|ε =d|dd|…|ε= d* 所求正规式为ad*
相关文档
最新文档