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

合集下载

北航编译原理课件 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)

北航编译原理课件 08.错误处理

北航编译原理课件 08.错误处理
15
北京航空航天大学计算机学院
3.目标程序运行时错误检测与处理 目标程序运行时错误检测与处理. 目标程序运行时错误检测与处理 下标变量下标值越界 计算结果溢出 动态存储分配数据区溢出 · 在编译时生成检测该类错误的代码。 在编译时生成检测该类错误的代码。 对于这类错误,要正确的报告出错误位置很难,因为 对于这类错误,要正确的报告出错误位置很难,因为 要正确的报告出错误位置很难 目标程序与源程序之间难以建立位置上的对应关系 一般处理办法: 当目标程序运行检测到这类错误时,就调用异常 处理程序,打印错误信息和运行现场(寄存器和存储 器中的值)等, 然后停止程序运行。
有时候报错不一定十分准确 位置和性质), ),需进一步分析 (位置和性质),需进一步分析
:= B+ *C
缺“]”or n 表达式语法错 m
错误编号

begin ........ i := 1 step 1 ............ end
until n do
北京航空航天大学计算机学院
8
8.4 错误处理技术
发现错误后, 发现错误后,在报告错误的同时还要对错误进行 处理,以方便编译能进行下去。目前有两种处理办法: 处理,以方便编译能进行下去。目前有两种处理办法: 1. 错误改正:指编译诊察出错误以后,根据文法进 错误改正:指编译诊察出错误以后, 行错误改正。 行错误改正。 如:A[i , j :=B+*C 但不是总能做到,如 但不是总能做到 如A:=B-C*D+E) 2. 错误局部化处理:指当编译程序发现错误后,尽可 错误局部化处理:指当编译程序发现错误后, 能把错误的影响限制在一个局部 的范围, 的范围,避免错误扩散和影响 程序其他部分的分析。 程序其他部分的分析。

北航远程教育201509学期《编译技术》阶段导学2

北航远程教育201509学期《编译技术》阶段导学2

《编译技术》第二阶段导学材料(对应教材第三章、第四章、第五章)第3章语法分析⏹目标:通过本章的学习,掌握有关上下文无关文法的基本概念,理解适合于手工实现的预测分析技术,掌握自上而下分析法和自下而上分析法,掌握自动工具用的LR分析算法。

⏹主要内容:3.1 上下文无关文法3.2 语言和文法3.3 自上而下分析3.4 自下而上分析3.5 LR分析器3.6 二义文法的应用3.7 分析器的生成器⏹重点:语法、语义、文法的构造,语法分析方法。

⏹难点:LR分析法第4章词法制导的翻译⏹目标:通过本章的学习,掌握语法制导的定义,掌握自下而上、自上而下的实现方法。

了解递归计算的方法,掌握翻译方案实现方法。

⏹主要内容:介绍了语义规则和产生相联系的两种方式:语法制导的定义和翻译方案。

语法制导的定义是较抽象翻译说明,它隐藏了一些实现细节;而翻译方案陈述了一些实现细节,主要是指明了语义规则的计算次序。

讲述了语法制导的定义和翻译方案实现方法。

4.1 语法制导的定义4.2 S属性定义的自下而上计算4.3 L属性定义的自上而下计算4.4 L属性的自下而上计算4.5 递归计算⏹重点:属性翻译文法的概念,属性的正确使用和计算。

第5章类型检查⏹目标:通过本章的学习,了解类型在程序设计语言中的作用,掌握类型系统的组成与作用、类型检查的作用,了解多态函数的作用,掌握重载的概念,了解控制流检查、唯一性检查和关联名字检查的功能。

⏹主要内容:讲述了静态检查的概念,讲述了类型系统的组成与作用、类型检查的作用和多态函数的作用,介绍了重载的概念,介绍了控制流检查、唯一性检查、关联名字检查的概念和各自的功能。

5.1 类型在程序设计语言中的作用5.2 描述类型系统的语言5.3 简单类型检查器的说明5.4 多态函数5.5 类型表达式的等价5.6 函数和算符的重载⏹重点:类型系统的组成与作用,类型检查的作用,函数和算符的重载。

北航编译技术在线作业一二三

北航编译技术在线作业一二三

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

)1. LR(1)文法都是(C)。

A. 无二义性且无左递归B. 可能有二义性但无左递归C. 无二义性但可能是左递归D. 能够既有二义性又有左递归总分值:4 分2. 已知文法:S→aAa|aBb|bAb|bBaA→x B→x ,那么(A)。

A. LR(1)文法B. LALR(1)文法C. 都不是D. A和B总分值:4 分3. 语法分析程序输出(B )。

A. 记号系列B. 分析树或语法树C. 中间代码D. 目标代码总分值:4 分4. 正规式(a|b)*表示的是(A )。

A. 所有由字母a或b组成的串B. 字符串a|bC. 字符串(a|b)*D. 空串总分值:4 分5. (A )的任务是从源代码中读取字符并形成由编译器的以后部份处置的逻辑单元——记号。

B. 语法分析程序C. 语义分析程序D. 源代码优化程序总分值:4 分6. 下面哪个文法是右递归的(A)A. A E→TE|TB. T→aTC. E→(E)D. E→a总分值:4 分7. 编译程序诸时期的工作往往是(D)。

A. 顺序B. 并行C. 成批D. 穿插总分值:4 分8. 在语法分析处置中,FIRST集合、FOLLOW集合、SELECT集合均是(B)。

A. 非终极符集B. 终极符集C. 字母表D. 状态集总分值:4 分9. Chomsky 概念的四种形式语言文法中,1 型文法又称为(C )文法。

A. 短语文法B. 上下文无关文法C. 上下文有关文法总分值:4 分10. 标准规约是(A )。

A. 最左规约B. 最右规约C. 动态规约D. 静态规约总分值:4 分11. 编译器与要编译的源程序的接口时期是(A )。

A. 扫描程序B. 语法分析程序C. 语义分析程序D. 代码生成器总分值:4 分12. Chomsky 概念的四种形式语言文法中,2 型语言文法又称为(B )文法。

A. 短语文法B. 上下文无关文法C. 上下文有关文法D. 正规文法总分值:4 分13. 假设文法G概念的语言是无穷集,那么文法必然是(D)。

17春北航《编译技术》在线作业一

17春北航《编译技术》在线作业一

2017秋17春北航《编译技术》在线作业一一、单选题(共14 道试题,共56 分。

)1. 下面哪个文法具有二义性()。

A. A→AA | (A) |B. E→E+T|TC. E→(E)D. E→a正确答案:2. Chomsky 定义的四种形式语言文法中,2 型语言文法又称为()文法。

A. 短语文法B. 上下文无关文法C. 上下文有关文法D. 正规文法正确答案:3. 最常用的中间代码形式是()。

A. 二元式B. 三元式C. 四元式D. 树形表示正确答案:4. 赋值语句X::=-(a+b)/(c-d)-(a+b*c)r的逆波兰表示是()。

A. Xab+cd-/-bc*a+-:=B. Xab+/cd--bc*a+--:=C. Xab+-cd-/abc*+-:=D. Xab+cd-/abc*+--:=正确答案:5. 规范规约是()。

A. 最左规约B. 最右规约C. 动态规约D. 静态规约正确答案:6. 如果r、s是正规式,则下面()不一定是正规式。

A. rsB. r|sC. r*D. r+s正确答案:7. 目标代码生成属于编译器的()阶段。

A. 词法分析B. 语法分析C. 分析D. 综合正确答案:8. 文法E→(E)产生的语言是()。

A. 空集B. ()C. (E)D. ((((E))))正确答案:9. 编译器与要编译的源程序的接口阶段是()。

A. 扫描程序B. 语法分析程序C. 语义分析程序D. 代码生成器正确答案:10. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。

A. 自左至右B. 自上而下C. 自下而上D. 自右向左正确答案:11. 在自下而上的语法分析方法中,分析的关键是()。

A. 寻找句柄B. 寻找句型C. 消除递归D. 选择候选式正确答案:12. 语法分析程序输出()。

A. 记号系列B. 分析树或语法树C. 中间代码D. 目标代码正确答案:13. ()的任务是从源代码中读取字符并形成由编译器的以后部分处理的逻辑单元——记号。

计算机编译原理课后习题及答案详细解析

计算机编译原理课后习题及答案详细解析

在此深情而热烈的感谢沈仲秋同学的大力支持和帮助,同时希望本文档对各位有些帮助。

一1、画出编译程序的总体结构图,简述其部分的主要功能。

[答案]编译程序的总框图见下图。

图编译程序的总体结构图其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果上单词符号。

语法分析器对单词符号串进行语法分析(根据语法规则进行推导或归纳),识别出程序中的各类语法单位,最终判断输入串是否构成语语义分析及中间代码产生器,按照语义规则对语法分析器归纳出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间优化器对中间代码进行优化处理。

一般最初生成的中间代码执行效率都比较低,因此要做中间代码的优化,其过程实际上是对中间代码目标代码生成器把中间代码翻译成目标程序。

中间代码一般是一种与机器无关的表示形式,只有把它再翻译成与机器硬件相关的机器能表格管理模块保持一系列的表格,登记源程序的各类信息和编译各阶段的进展状况。

编译程序各个阶段所产生的中间结果都记录在表格出错处理程序对出现在源程序中的错误进行处理。

如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。

编译程2、计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?[答案]计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。

像Basic之类的语言,属于解释型的高级语言。

它们的特点是计算机并不事先对高级语言进行全盘翻译,将其变为机器代码,而是每读总而言之,是边翻译边执行。

像C,Pascal之类的语言,属于编译型的高级语言。

它们的特点是计算机事先对高级语言进行全盘翻译,将其全部变为机器代码,再统1.文法G[S]为:S->Ac|aBA->abB->bc写出L(G[S])的全部元素。

[答案]S=>Ac=>abc或S=>aB=>abc所以L(G[S])={abc}2. 文法G[N]为:N->D|NDD->0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?[答案]G[N]的语言是V+。

北航编译原理课件 10.语义分析和代码生成

北航编译原理课件 10.语义分析和代码生成

北京航空航天大学计算机学院
16
16
@svardef动作符号是把 ,i 和t 填入符号表中。 动作符号是把n, 填入符号表中。 动作符号是把 procedure svardef( t, i, n ); j := tableinsert ( n, t, i ); /*将有关信息填入符号表 将有关信息填入符号表*/ 将有关信息填入符号表 if j = 0 //填表时要检查是否重名 填表时要检查是否重名 then errmsg ( duplident , statementno); else if j = -1 //符号表已满 符号表已满 then errmsg( tblovflow, statementno); end svardef;
北京航空航天大学计算机学院
12
12
动作程序 @dec_on↑x 是把符号表当前可用表项的入口地址(指向符 是把符号表当前可用表项的入口地址( 号表入口的指针, 表项下标值)赋给属性变量x 号表入口的指针,或称 表项下标值)赋给属性变量 。 @name_defn ↓n是将由各实体名所得的 继承属性值,依次填 是将由各实体名所得的n继承属性值 继承属性值, 入从x开始的符号表中 开始的符号表中。 入从 开始的符号表中。
–继承属性为值形参 继承属性为值形参 –综合属性为变量形参 综合属性为变量形参
• 语法成分翻译动作子程序参数设置: 语法成分翻译动作子程序参数设置:
–继承属性为值形参 继承属性为值形参 –综合属性不设形参,而作为动作子程序的返回值 综合属性不设形参, 综合属性不设形参 RETURN语句返回 语句返回) (由RETURN语句返回)
………
北京航空航天大学计算机学院
8
8
指令名称 等于比较 不等比较 大于比较 小于比较 大于等于 小于等于 逻辑与 逻辑或 逻辑非 转子 分配

习题课3 北航编译

习题课3 北航编译
2008年7月2日 8
PROCEDURE E; t1,t2; /*局部变量*/ e; t1 = T; /* 调用过程T */ while CLASS = '+' do beห้องสมุดไป่ตู้in NEXTSYM; t2 = T; /*调用过程T*/ e = NewAddr; /*用一个新单元存放计算结果*/ ADD(t1,t2,e); t1 = e; end return (t1); end E;
2008年7月2日
10
P185: 6 画出下面的分程序结构的程序段当程序段3和4编译即将完成以前, 栈式符号表的图形(包括有效部分和失效部分)。
BBLOCK; REAL Z; INTEGER Y; SUB-1 PBLOCK(INTEGER J); … BBLOCK; ARRAY STRING S(J+2); LOGICAL FLAG; INTEGER Y; … END; SUB-2 PBLOCK(REAL W); REAL J; LOGICAL TEST1,TEST2,TEST3; … END SUB-2; END SUB-1; END;
常见的错误 I 在画程序运行②时,没有画出局部数据区的R; II 活动记录间应该用双线条间隔; III 很多同学在画指针的指向时,把ret addr作为 指针的引出地点
S Y X J prev abp ret addr1 abp abp(1) Y X I
2008年7月2日
13
R R的模板 prev abp ret addr2 abp(2) abp(1) abp S Y X J prev abp ret addr1 abp(1) Y X I
6画出下面的分程序结构的程序段当程序段3和4编译即将完成以前栈式符号表的图形编译即将完成以前栈式符号表的图形包括有效部分和失效部分

2021年北航《编译技术》在线作业三辅导资料

2021年北航《编译技术》在线作业三辅导资料

1. 有限自动机有()个接受状态A. 只能一个B. 只能两个C. 只能三个D. 0个、一个或多个该题参考选项是:D 满分:4 分2. 编译程序中语法分析器接收以()为单位的输入。

A. 单词B. 表达式C. 产生式D. 句子该题参考选项是:A 满分:4 分3. 描述一个语言的文法是()。

A. 唯一的B. 不唯一的C. 可能唯一D. 可能不唯一该题参考选项是:B 满分:4 分4. Chomsky 定义的四种形式语言文法中, 3 型文法又称为()文法。

A. 短语文法B. 上下文无关文法C. 上下文有关文法D. 正规文法该题参考选项是:D 满分:4 分5. ()的任务是从源代码中读取字符并形成由编译器的以后部分处理的逻辑单元——记号。

A. 扫描程序B. 语法分析程序C. 语义分析程序D. 源代码优化程序该题参考选项是:A 满分:4 分6. 在编译时安排所有数据对象的存储单元的分配策略属于()。

A. 静态分配策略B. 动态分配策略C. 栈式分配策略D. 堆分配策略该题参考选项是:A 满分:4 分7. 语法分析属于编译器的()阶段。

A. 词法分析B. 语法分析C. 分析D. 综合该题参考选项是:C 满分:4 分8. 类型转换时,整数到实数的转换称为()。

A. 截断B. 舍入C. 拓展D. 收缩该题参考选项是:C 满分:4 分9. 如果r、s是正规式,则下面()不一定是正规式。

A. rsB. r|sC. r*D. r+s该题参考选项是:D 满分:4 分10. 正规式(a|b)*表示的是()。

A. 所有由字母a或b构成的串B. 字符串a|bC. 字符串(a|b)*D. 空串该题参考选项是:A 满分:4 分11. 算符优先分析每次规约的是()。

A. 最左短语B. 直接短语C. 句柄D. 最左素短语该题参考选项是:D 满分:4 分12. 有限自动机可以有()个初始状态。

A. 一个B. 两个C. 三个D. 多个该题参考选项是:A 满分:4 分13. 一个文法所描述的语言是()。

  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。

相关文档
最新文档