北航计算机学院编译习题讲解

合集下载

北航编译原理课件 03.词法分析

北航编译原理课件 03.词法分析

3. 词法分析程序算法
北京航空航天大学计算机学院
17
1.单词及内部表示 单词及内部表示: 单词及内部表示
单词名称
BEGIN END FOR DO IF THEN ELSE 标识符 常数(整 常数 整) : + * , ( ) :=
保留字和分界符采用一符一类
记忆符
BEGINSY ENDSY FORSY DOSY IFSY THENSY ELSESY IDSY INTSY COLONSY PLUSSY STARSY COMSY LPARSY RPARSY ASSIGNSY
字母、数字
标识符 无符号整数
单字符分界符
S S S
字母
标 数字
非字母数字
出口
数字

非数字
出口
+ * , 单界 ( ) :
其他字符 非=
出口
双字符分界符
北京航空航天大学计算机学院
S
冒号
=
双界
其他字符
出口 15
查保留字表 读字符
字母、数字
S
字母
标 数字
非字母数字
标识符
非数字
数字

无符号整数 单字符分界符
如:b{ab} = {ba}b {a|b} = {{a} {b}} = (a*b*)*
北京航空航天大学计算机学院 23
例:设 ∑ = { a,b },下面是定义在∑上的正则表达式和正则集合 正则表达式 ba* a(a|b)* (a|b)*(aa|bb)(a|b)* 正则集合
北京航空航天大学计算机学院
北京航空航天大学计算机学院 20
‘*’ : ‘,’ : ‘(’ : ‘)’ : ‘:’ :

北航计算机学院编译习题讲解

北航计算机学院编译习题讲解
1
0
1
q3
q4
0
18
0
Start
A
1 B
1
0
1
C
D
E
1
0
1
{A} -
{B}
q0
{B} {B} {BC}
q1
{BC} {BD} {BC}
q2
{BD} {B} {BCE}
q3
{BCE} {BD} {BC}
q4
0
1
-
q1
q1
q2
q3
q2
q1
q4
q3
q2
2008年7月2日
19
0
q0
-
q1
q1
q2
q3
q3
2008年7月2日
17
01
q0 -- q1 q1 q2 q3 q2 q2 q3 q3 q4 q3 q4 q2 q5 q5 q4 q3
q0 q1 q2 q3 q4
01
q0 -- q1
q1 q2 q3
q2 q2 q3
q3 q4 q3
q4 q2 q5
q5 q4 q3
0
1
-
q1
q1
q2
பைடு நூலகம்q3
q2
q1
q4
q3
第三章:词法分析
3.1 词法分析的功能 3.2 词法分析程序的设计与实现
–状态图
3.3 词法分析程序的自动生成
–有穷自动机、LEX
2008年7月2日
1
补充
1 2
NFA
正则文法
4 3
5 6
正则表达式
DFA 最小化
2008年7月2日

北航编译技术在线作业三

北航编译技术在线作业三

北航《编译技术》在线作业三北航《编译技术》在线作业三单选题多选题判断题一、单选题(共14道试题,共56分。

)1.文法G产生的()的全体是该文法描述的语言。

A.句型B.终结符集C.非终结符集D.句子-----------------选择:D2.Chomsky定义的四种形式语言文法中,2型语言文法又称为()文法。

A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法-----------------选择:B3.如果r、s是正规式,则下面()不一定是正规式。

A.rsB.r|sC.r*D.r+s-----------------选择:D4.算符优先分析每次规约的是()。

A.最左短语B.直接短语C.句柄D.最左素短语-----------------选择:D5.最常用的中间代码形式是()。

A.二元式B.三元式C.四元式D.树形表示-----------------选择:C6.文法E→(E)产生的语言是()。

A.空集B.()C.(E)D.((((E))))-----------------选择:A7.下面哪个文法是左递归的()。

A.E→E+T|TB.T→F*TC.E→(E)D.E→a-----------------选择:A8.Σ={0,1}上的正规式(0|1)*表示()。

A.0开头的串B.1开头的串C.有一个0和一个1的串D.由0、1组成的任意串-----------------选择:D9.正规式(a|b)*表示的是()。

A.所有由字母a或b构成的串B.字符串a|bC.字符串(a|b)*D.空串-----------------选择:A10.编译器与要编译的源程序的接口阶段是()。

A.扫描程序B.语法分析程序C.语义分析程序D.代码生成器-----------------选择:A11.有限自动机可以有()个初始状态。

A.一个B.两个C.三个D.多个-----------------选择:A12.语法分析属于编译器的()阶段。

11 北航本科编译原理课件 张莉

11 北航本科编译原理课件 张莉

• 但并不是所有展开都是合适的。如上例中循环展开后节省执行了转移和
测试语句:2*30=60语句 (其实,还不止节省60条)。 ∴增加29条省60条 但若循环体中不是一条而是40条语句,则展开后将有40*30条=1200,但省 的仍是60条,就不算优化了。 ∴判断准则:1. 主存资源丰富 处理机时间昂贵 2. 循环体语句越少越好 循环展开有利 (大型机)
北京航空航天大学计算机学院 6
为什么要优化?
• 有的大型计算程序一运行就要花上几十分钟,甚至好几 小时,这时为优化即使付出些代价也是值得的。 • 另外,程序中的循环往往要占用大量的计算时间。所以 为减少循环执行时间所进行的优化对减少整个程序的运 行时间有很大的意义。 ——尤其有实时要求的程序。如 市场决策,供需及求益的平衡 • 至于(像学生作业之类的)简单小程序(占机器内存,运行 速度均可接受),或在程序的调试阶段,花费许多代价 去进行一遍又一遍的优化就毫无必要了。
北京航空航天大学计算机学院 20
30
BY
3 空间只多二条, 但省了20次测 试时间 (只循环10次)
c) 归纳变量的优化和条件判断的替换 归纳变量(induction varable): 在每一次执行循环迭代的 过程中,若某变量的值固定增加(或减少)一个常量 值,则称该变量为归纳变量(induction variable)。即若 当前执行循环的第j次迭代。归纳变量的值应为c*j+c’, 这里c和c’都循环不变式。 例: for i := 1 to 10 do
a[i] := b[i] + c[i]
1)
2) 优化: 3) 4) 5) 6) 7) 8) 9) 10)
u := 4 labb: if u >40 goto tb := b [u] tc := c [u] t := tb + tc a [ u] := t u := u+4 goto labe :

北京航空航天大学《编译原理》第1章 概论

北京航空航天大学《编译原理》第1章 概论
编译技术
编译原理及编译程序构造
张 莉 教授 史晓华
2006. 9-2007.1
北京航空航天大学计算机学院
课程要求
课时:48学时(1-17周) 分为两部分:(分别计分)
– 理论基础(3学分):课堂教学,按时交作业。 • 作业10分; • 3-6次随堂考试,共计30分;(不补) • 期末闭卷考试,60分 • 主动回答问题,每次奖励0.5分,5分封顶(考前公布) – 实践部分(2学分):上机实践(50机时)(10周开始上机)
北京航空航天大学计算机学院
第一章 概论
(介绍名词术语、了解编译系统的结构和编译过程)
•• 编译的起源:程序设计语言的发展 编译的起源:程序设计语言的发展 •• 基本概念 基本概念 •• 编译过程和编译程序构造 编译过程和编译程序构造 编译技术的应用 •• 编译技术的应用
北京航空航天大学计算机学院
1.1 程序设计语言的发展
能运用所学技术解决实际问题能独立编写北京航空航天大学计算机学院北京航空航天大学计算机学院课程定位课程定位课程定位课程定位计算机学院核心课程计算机学院核心课程计算机学院核心课程计算机学院核心课程分类分类课程名称课程名称课程定位课程定位备注备注计算机基础计算机基础计算机导论入门算法和数据结构高级语言程序设计12基础必备工具计算机理论离散数学离散数学123计算机理论数理逻辑计算机数学集合论和图论组合数学计算机硬件类课程计算机硬件类课程数子电路和数字逻辑硬件基础课程含实验计算机原理和汇编语言部件原理含实验计算机接口与通讯部件间通讯含实验计算机体系结构体系结构含实验计算机网络计算机软件类课程计算机软件类课程编译技术编译技术系统软件层系统软件层含课程设计含课程设计操作系统操作系统含课程设计数据库系统原理含课程设计软件工程信息系统分析与设计应用类计算机图形学多媒体技术应用类北京航空航天大学计算机学院北京航空航天大学计算机学院数字逻辑计算机导论高等数学线性代数计算机原理和汇编语言高级程序设计语言1离散数学数据结构和算法c语言提高数据库系统编译技术编译技术操作系统计算机图形学网络计算机系统结构信息系统软件工程课程间的拓扑关系课程间的拓扑关系接口与通讯1学期学期23456电路分析北京航空航天大学计算机学院北京航空航天大学计算机学院??教材和参考书教材和参考书教材和参考书教材和参考书高仲仪金茂忠编译原理及编译程序构造北航出版社

北航《编译技术》复习题一

北航《编译技术》复习题一

北航《编译技术》复习题一一、单项选择题1、目标代码生成属于编译器的()阶段A.词法分析B.语法分析C.分析D.综合2、算符优先分析每次规约的是()A.最左短语B.直接短语C.句柄D.最左素短语3、简单优先分析每次规约的是()A.最左短语B.直接短语C.句柄D.最左素短语4、若文法 G 定义的语言是无限集,则文法必然是()A .递归的 B. 前后文无关的C .二义性的 D. 无二义性的5、Chomsky 定义的四种形式语言文法中, 1 型文法又称为()文法;A .短语结构文法 B.前后文无关文法C.前后文有关文法D.正规文法6、一个文法所描述的语言是()A .唯一的 B. 不唯一的C .可能唯一, D.可能不唯一7、数组的内情向量中肯定不含有数组的()的信息A.维数 B.类型C.维上下界D.各维的界差8、自顶向下的分析方法有()。

①简单优先分析②算符优先分析③递归下降分析④预测分析技术⑤LR(K)分析⑥ SLR(k)分析⑦ LL(k)分析⑧LALR(K)分析A.③④⑦B. ③④⑧C.①②⑧D.③④⑤⑥⑦9、文法 G 所描述的语言是()的集合。

A.文法 G 的字母表 V 中所有符号组成的符号串B.文法 G 的字母表 V 的闭包 V 中的所有符号串C.由文法的开始符号推出的所有终极符串D.由文法的开始符号推出的所有符号串10、乔姆斯基(Chomsky)把文法分为四种类型,即 0 型、1 型、2 型、3 型。

其中 3 型文法是()。

A.短语文法B.正则文法C.上下文有关文法D.上下文无关文法二、判断题11、每个基本块可用一个DAG表示。

A.对 B.错12、每个过程的活动记录的体积在编译时可静态确定。

A.对 B.错13、2型文法一定是3型文法。

BA.对 B.错14、一个句型一定是句子。

BA.对 B.错15、算符优先分析法每次都是对句柄进行归约。

A.对 B.错16、甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。

7 北航本科编译原理课件 张莉

7 北航本科编译原理课件 张莉

第七章 源程序的中间形式•• •• ••波兰表示 波兰表示 N-元表示 N-元表示 抽象机代码 抽象机代码北京航空航天大学计算机学院17.1 波兰表示一般编译程序都生成中间代码,然后再生成目 标代码,主要优点是可移植(与具体目标程序无关), 且易于目标代码优化。

有多种中间代码形式: 波兰表示 N-元组表示 抽象机代码 波兰表示 算术表达式: 转换成波兰表示: 波兰表示: F*3.1416*R*(H+R) F3.1416*R*HR+*赋值语句: A := F * 3.1416 * R * ( H + R ) AF3.1416 * R * HR + * :=2北京航空航天大学计算机学院#a+b#ab++ 操作符栈 # #优先级最低算法: 设一个操作符栈;当读到操作数时,立即输出该操作数, 当扫描到操作符时,与栈顶操作符比较优先级,若栈顶操作 符优先级高于栈外,则输出该栈顶操作符,反之,则栈外操 作符入栈。

北京航空航天大学计算机学院 3if 语句的波兰表示label1if 语句:if <expr> then <stmt1> else <stmt2>label2波兰表示为 :<expr><label1>BZ<stmt1><label2>BR<stmt2> BZ: 二目操作符 若<expr>的计算结果为0 (false), 则产生一个到<label1>的转移 BR: 一目操作符 产生一个到< label2>的转移北京航空航天大学计算机学院4波兰表示为 :<expr><label1>BZ<stmt1><label2>BR<stmt2> 由if语句的波兰表示可生成如下的目标程序框架: <expr> BZ label1 <stmt1> BR label2 label1:<stmt2> label2: 其他语言结构也很容易将其翻译成波兰表示, 使用波兰表示优化不是十分方便。

北京航空航天大学《编译原理》第11章 代码优化(2)

北京航空航天大学《编译原理》第11章 代码优化(2)

global_c s_c
运行栈
子程序/函数运行时所需的基本空间 进入子程序/函数时分配,地址空间向下生长 (从高地址到低地址) 从子程序/函数返回时,当前运行栈将被废弃 递归调用的同一个子程序/函数,每次调用都 将获得独立的运行栈空间
运行栈
一个典型的运行栈包括
函数的返回地址 全局寄存器的保存区 临时变量的保存区 未分配到全局寄存器的局部变量的保存区 其他辅助信息的保存区
主要内容
中间代码(补充) 代码生成 代码优化 现代编译技术综述
代码生成
代码生成器的总体设计 目标程序 运行时的存储管理 指令选择 寄存器的分配和管理
代码生成器在编译系统中的位置
中间代码 源程序 前端 优化器
中间代码
代码生成 器
目标程序
符号表
教学编译器架构
代码生成器的输入
源程序的中间表示
线性表示(波兰式) 三地址码(四元式) 栈式中间代码(P-CODE/Java Bytecode) 图形表示
丰富的运行库支持
J2ME:CLDC1.1, MIDP2.0, etc. J2SE:SWING, AWT, etc.
Java字节码举例: z = x + 1
iload x iconst_1 iadd
mov eax, esi add eax, 1
x 1 x x+1
esi 1 esi eax
istore z
(下载到本地)
Class loader
(Bytecode verification)
Java class libraries
Java Just-in-time Interpreter compiler
Run-time System Java 字节码 (*.class)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北航计算机学院编译习题讲解
习题课 (1-3章)
1、复习
2、习题讲解
北京航空航天大学计算机科学与工程系
2008年6月27日
1
第一章
概论
(介绍名词术语、了解编译系统的结构和编译过程)
北京航空航天大学计算机科学与工程系
2008年6月27日
2
1.2 编译过程
所谓编译过程是指将高级语言程序翻译为等价的目标程序的过程。

习惯上是将编译过程划分为5个基本阶段:词法分析语法分析语义分析、生成中间代码代码优化生成目标程序
北京航空航天大学计算机科学与工程系
2008年6月27日 3
典型的编译程序具有7个逻辑部分 S.P 词法分析程序符号表管理语法分析程序语义分析、生成中间代码代码优化生成目标程序 O.P 出错处理
北京航空航天大学计算机科学与工程系
2008年6月27日
4
第二章? 掌握符号串和符号串集合的运算、文法和语言的定义? 几个重要概念:递归、短语、简单短语和句柄、语法树、文法的二义性、文法的实用限制等。

? 掌握文法的表示:BNF、扩充的BNF范式、语法图。

? 了解文法和语言的分类
北京航空航天大学计算机科学与工程系
2008年6月27日 5
第三章:词法分析
3.1 词法分析的功能 3.2 词法分析程序的设计与实现
–状态图
3.3 词法分析程序的自动生成
–有穷自动机、LEX
北京航空航天大学计算机科学与工程系
2008年6月27日
6
补充
正则文法正则文法 1 2 4 NFA NFA 3 DFA DFA 最小化
北京航空航天大学计算机科学与工程系
2008年6月27日 7
5 6 正则表达式正则表达式
习题1-3章
北京航空航天大学计算机科学与工程系
2008年6月27日
8
第一章
2.典型的编译程序可划分为哪几个主要的逻辑部分?各部分的主要功能是什么?
北京航空航天大学计算机科学与工程系
2008年6月27日
9
1.2 编译过程
所谓编译过程是指将高级语言程序翻译为等价的目标程序的过程。

习惯上是将编译过程划分为5个基本阶段:词法分析语法分析语义分析、生成中间代码代码优化生成目标程序
北京航空航天大学计算机科学与工程系
2008年6月27日 10
典型的编译程序具有7个逻辑部分 S.P 词法分析程序符号表管理语法分析程序语义分析、生成中间代码代码优化生成目标程序 O.P 出错处理
北京航空航天大学计算机科学与工程系
2008年6月27日
11
P19:4.试证明:A+ =AA*=A*A 证:∵ A*=A0∪A+,A+=A1∪A2∪…∪An∪… 得:A*=A0∪A1∪A2∪…∪An∪… ∴ AA*=A(A0∪A1∪A2∪…∪An∪…)= AA0∪AA1∪AA2∪…∪A An∪… =A∪A2∪A3∪An +1∪… = A+ 同理可得:A*A =(A0∪A1∪A2∪…∪An∪…)A =A0 A∪A1A∪A2A∪…∪AnA∪… = A∪A2∪A3∪An+1∪… = A+ 因此: A+ =AA*=A*A
北京航空航天大学计算机科学与工程系
2008年6月27日 12
P26:1.设G[〈标识符〉]的规则是:〈标识符〉::=a|b|c| 〈标识符〉a|〈标识符〉c| 〈标识符〉0|〈标识符〉1 试写出VT和VN,并对下列符号串a,ab0,a0c01,0a,11,aaa给出可能的一些推导。

解:VT ={a,b,c,0,1}, VN ={〈标识符〉} (1) 不能推导出ab0,11,0a (2)〈标识符〉=>a (3)〈标识符〉=>〈标识符〉1 =>〈标识符〉01 =>〈标识符〉c01 =>〈标识符〉0c01 => a0c01 (4)〈标识符〉=>〈标识符〉a =>〈标识符〉aa =>aaa 2008年6月27日北京航空航天大学计算机科学与工程系
13
P26: 2.写一文法,其语言是偶整数的集合
常见错误: 1.终结符集中没有奇数。

2.如下定义:<偶整数> => <数字串> <偶数字>, <数字串> => <数字> | <数字串> <数字> <数字串>不能=>ε。

3.忽略负偶数。

北京航空航天大学计算机科学与工程系
2008年6月27日
14
作法一:<偶整数>::=2×<整数> <整数>::=<数字串><数字> <数字串>::=<数字> <数字>::=0|1|2|3|4|5|6|7|8|9 作法二:z=偶整数G(z)=0|2|2Z|2(Z+1)|2(Z-1) 或:G(Z)=0|2|Z+2|Z-2
北京航空航天大学计算机科学与工程系
2008年6月27日
15
解:G[<偶整数>]:<偶整数>::= <符号> <偶数字>| <符号><数字串><偶数字> <符号> ::= + | —|ε <数字串>::= <数字串><数字>|<数字> <数字> ::= <偶数字>| 1 | 3 | 5 | 7 | 9 <偶数字> ::=0 | 2 | 4 | 6 | 8
3. 写一文法,使其语言是偶整数的集合,但不允许有以0 开头的偶整数。

北京航空航天大学计算机科学与工程系
2008年6月27日
16
4.
设文法G的规则是:
〈A〉::=b| cc 试证明:cc, bcc, bbcc, bbbcc∈L[G] 证:(1)〈A〉=>cc (2)〈A〉=>b〈A〉=>bcc (3)〈A〉=>b〈A〉=>bb〈A〉=>bbcc (4)〈A〉=>b〈A〉=>bb〈A〉=>bbb〈A〉=>bbbcc 又∵cc, bcc, bbcc, bbbcc∈Vt* ∴由语言定义,cc, bcc, bbcc, bbbcc∈L[G]
北京航空航天大学计算机科学与工程系
2008年6月27日
17
5 试对如下语言构造相应文法:(1){ a(bn)a | n=0,1,2,3,……},其中左右圆括号为终结符。

(2) { (an)(bn)| n=1,2,3,……} 解:(1)文法[G〈S〉]:S::= a(B)a B::= bB |ε ( 2 ) 文法[G〈S〉]:--错了,两个n不等 S ::= (A)(B) S ::= (B) A::= aA|a B::= aBb|a)(b B::= bB|b
北京航空航天大学计算机科学与工程系
2008年6月27日 18
7.对文法G3[〈表达式〉] 〈表达式〉::=〈项〉|〈表达式〉+〈项〉|〈表达式〉-〈项〉〈项〉::=〈因子〉|〈项〉*〈因子〉|〈项〉/〈因子〉〈因子〉::=(〈表达式〉)| i 列出句型〈表达式〉+〈项〉*〈因子〉的所有短语和简单短语。

<表达式> => <表达式> + <项> => <表达式> + <项> * <因子> <表达式> + <项>
<表达式>
<项> * <因子> 短语有:〈表达式〉+〈项〉*〈因子〉和〈项〉*〈因子〉简单短语是:〈项〉*〈因子〉
北京航空航天大学计算机科学与工程系
2008年6月27日 19。

相关文档
最新文档