编译原理作业集第一章修订版

合集下载

编译原理作业标准答案

编译原理作业标准答案

编译原理作业标准答案第一章引言一、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。

源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。

目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。

目标程序(结果程序)一般可由计算机直接执行。

低级语言:机器语言和汇编语言。

高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。

如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。

翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。

其中包括:编译程序,解释程序,汇编程序。

编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。

解释程序: 以该语言写的源程序作为输入,但不产生目标程序。

按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。

二、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

三、简述编译程序的基本过程的任务。

编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。

词法分析:输入源程序,进行词法分析,输出单词符号。

语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。

中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。

优化:对中间代码进行优化处理。

目标代码生成:把中间代码翻译成目标语言程序。

四、编译程序与解释程序的区别?编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。

编译原理 第一章

编译原理 第一章

Target program
2020/12/2
编译原理
14
程序的等价:若两个程序P1和P2所允许的输入集合
相同,且对相同的输入,均产生相同的输出,则称
程序P1和P2等价。
狭义看法:通常,源程序是用某种高级语言编写的, 而目标程序是用目标代码或机器代码编写的。
广义看法:程序变换,翻译器(translator)
Linker/Loader
Target Machine Code
编译原理
Library files and/or
Re2
编译过程概述
编译程序的工作,从输入源程序开始,到输出目标 程序结束,与自然语言之间的翻译有很多相似之处。
2020/12/2
编译原理
19
Example: Java Compiler & Java VM
Java语言结合了编译和解释的过程。
Java program (app.java)
(Javac)
Java Bytecodes
(app.class)
2020/12/2
编译原理
20
The context of a compiler
mov X, 2 ▪ Assembly language
X=2 ▪ C language
程序设计语言 ▪ 高级语言 ▪ 汇编语言 ▪ 机器语言
在计算机上如何执行一个 高级语言程序?
▪ 把高级语言程序翻译成 机器语言程序
▪ 运行所得的机器语言程 序求得计算结果
2020/12/2
编译原理
12
Compiler: A Bridge Between PL and Hardware
2020/12/2

编译原理-第1章 编译概述--习题答案

编译原理-第1章 编译概述--习题答案

第1章编译概述1.判断下面的陈述是否正确。

(1)编译器生成的目标程序都是可执行的程序。

(2)汇编器将高级语言程序翻译成汇编语言程序。

(3)编译程序和解释程序的根本区别在于解释程序对源程序并没有真正进行翻译。

(4)因为编译程序和解释程序具有不同的功能,所以它们的实现技术也完全不同。

(5)编译程序的五个组成部分缺一不可。

(6)许多编译程序在识别出语法单位后并不真正构造语法树。

(7)高级语言程序到低级语言程序的转换是基于语义的等价变换。

(8)含有优化部分的编译程序的执行效率高。

(9)优化的任务在于对中间代码进行加工和变换,以使其能产生运行结果更为准确的目标代码。

(10)编译前端主要由与源语言和目标机相关的那些部分组成。

(11)无论一遍扫描的编译器还是多遍扫描的编译器都要对源程序至少扫描一遍。

(12)在编译过程中,既可以将几个不同的阶段合为一遍,也可以把一个阶段的工作分为若干遍。

(13)取编译程序前端改写其后端以生成不同机器上的目标代码,目前技术上还难以实现。

(14)支持程序设计人员进行程序计开发的工具,除了编译程序以外,还需要编辑程序、链接程序和调试程序等其他一些工具。

2. 指出下列错误信息是编译的哪个阶段报告的A. 词法B. 语法C. 语义(1)else没有匹配的if(2)使用的标识符没有定义(3)标识符中出现?号(4)赋值语句写成:x+y=1;(5)float a=1.1, b=2, c ; c=a%b;(6)数组下标越界3. 阅读教材第1章,回答以下问题:(1)计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?(2)画出编译程序的总体逻辑结构图,以语句“Area=3.14*r*r”编译过程为例,简述编译各个阶段的主要任务。

习题答案1.(1) × (2) × (3) × (4) × (5) × (6) √ (7) √(8) × (9) × (10) × (11) √ (12) √ (13) × (14) √2.BCABCC。

编译原理课后习题答案

编译原理课后习题答案

(a) 0 ( 0 | 1)* 0
由0和1组成且以0开始和结束的符号串全体. (b) ( ( | 0 ) 1* ) * 由0和1组成的符号串全体.
(c) ( 0 | 1 )* 0 ( 0 | 1) ( 0 | 1) 由0和1组成且以000,001,010或011结束的符号串全体. 长度大于等于3且倒数第3个字符为0的01符号串全体.
R R ‘|’ S | S S ST | T T U* | U U (R) | a | b
a
a
a
28
4.5 dangling-else文法: stmt if expr then stmt | matched-stmt matched-stmt if expr then matched-stmt else stmt | other 试说明此文法是二义性的。 句子 if e1 then if e2 then s1 else if e3 then s2 else s3 if e1 then if e2 then s1 else if e3 then s2 else s3
0|1 B 1 D E 0 ABDE ABDE ABCDE ABDE 1 ABCDE ABCDE
start
A
1
C
NFA 0
start A' 1
0
B'
0
1
start
A'
1
最小化DFA
24
DFA
3.8 给定右线性文法G: S 0S | 1S | 1A | 0B A 1C |1 B 0C | 1 C 0C | 1C | 0 | 1 试求一个等价的左线性文法G’.
20
3.6 给出接受下列在字母表{0,1}上的DFA。 (a)所有以00结束的符号串的集合; (1|0)*00

第1章编译原理答案(主编张晶).

第1章编译原理答案(主编张晶).

编译原理与其它课程关系
操作系统
控制对象
数据结构
编译理论
基础
素材
离散数学
自动机和形式语言
要求先学习以下课程
1.程序设计语言 2.算法与数据结构:栈分配、堆分配、静态分配等各种存 储分配方式。线性表、二叉查找树、哈希表等多种数据结 构。 3.离散数学:集合论与数理逻辑是进一步学习形式语言与 自动机理论的数学基础。
最好学习过或同时学习以下课程
1.软件工程:掌握大型程序设计以及工程化的软件生产方 法。 2.形式语言与自动机:相当于本课程中词法分析与语法分 析的理论基础。
目 录
•第一章 •第二章 •第三章 •第四章 •第五章 •第六章 引言 文法和语言 词法分析 语法分析—自顶向下分析方法 语法分析—自底向上分析方法 语法分析—LR方法
Compiler
面向机器代码 汇编 装配 目标程序代码
源程序的编译和运行
编译或汇编阶段
源程序 编译程序 或汇编程序 目标程序
运行阶段
输入数据
目标程序 + 运行子程序
输出数据
1.1.3 解释程序
解释程序(Interpreter)(类似于口译,不生成目标代码) 对源程序进行解释执行的程序。
工作过程 源程序
综合
编译过程
符号表管理
源程序
词 法 分 析
语 法 分 析
语 义 分 析


目 标 代 码 生 成
目标程序
出错处理
1.2.1 词法分析
任务
输入源程序;扫描、分解字符串,识别出一 个个单词(定义符、标识符、运算符、界符、 常数)
所做转换
源程序字符串
单词符号

编译原理作业集-第一章-修订版

编译原理作业集-第一章-修订版

第一章引论本章要点:1. 正确理解什么是编译程序;2. 了解编译程序工作的基本过程及各阶段的基本任务;3. 熟悉编译程序的总体结构框图;4. 了解编译程序的构造过程和构造工具。

本章目标:1. 掌握本章的“编译程序”、“交叉编译程序”、“编译前端与编译后端”等基本概念,并能在以后的学习熟练运用;2. 掌握T形图表示。

本章重点:1. 概念比较:①编译程序、解释程序;②诊断编译程序、优化编译程序;③交叉编译程序、可变目标编译程序;④编译前端与编译后端;2. 编译工作过程的五个阶段;3. 编译程序总框;4. 编译程序“移植”。

本章难点1. 编译程序“移植”;作业题及参考答案一、单项选择题:(按照组卷方案,至少8道小题)1. 如果一个编译程序能产生不同于其宿主机的机器代码,则称它为:。

a. 诊断编译程序b. 优化编译程序c. 交叉编译程序d. 可变目标编译程序2. 编译程序将高级语言程序翻译成。

a. 机器语言程序或高级语言程序b. 汇编语言或机器语言程序c. 汇编语言程序或高级语言程序d. 中间语言程序或高级语言程序3. 下面的四个选项中,__________不是编译程序的组成部分。

a. 词法分析程序b. 代码生成程序c. 设备管理程序d. 语法分析程序4. 现代多数实用编译程序所产生的目标代码都是一种可重定位的指令代码,在运行前必须借助于一个把各个目标模块,包括系统提供的库模块连接在一起,确定程序变量或常数在主存中的位置,装入内存中制定的起始地址,使之成为一个可运行的绝对指令代码的程序。

a. 重定位程序;b. 解释程序;c. 连接装配程序;d. 诊断程序;5. 从编译程序的角度说,源程序中的错误通常分为两大类。

a. 词法错误和语法错误;b. 语法错误和语义错误;c. 编辑错误和诊断错误;d. 词法错误和语义错误;6. 下面对编译原理的有关概念正确描述的是:。

a. 目标语言只能是机器语言b. 编译程序处理的对象是源语言。

18秋《编译原理》作业1234满分答案

18秋《编译原理》作业1234满分答案
D. Ml和M2状态数和有向弧条数相等
10.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_____。
A.模拟执行器
B.解释器
C.符号表处理和出错处理
D.符号执行器
11.一个编译程序中,不仅包含词法分析,_____,中间代码生成,代码优化,目标代码生成等五个部分,还应包括符号表处理和出错处理。
A. L(G[N])={bi│i≥0}
B. L(G[N])={b2i│i≥0}
C. L(G[N])={b2i+1│i≥0}
D. L(G[N])={b2i+1│i≥1}
9.正规式MI和M2等价是指_____。
A. MI和M2的状态数相等
B. Ml和M2的有向弧条数相等
C. M1和M2所识别的语言集相等
A.提高程序的执行效率
B.使程序的结构更加清晰
C.利用有限的机器内存并提高机器的执行效率
D.利用有限的机器内存但降低了机器的执行效率
二、判断题(每题4分,共10道小题,总分值40分)
1.
2.所有的编译程序都需要生成中间代码。
3.一个数组是由同一类型数据所组成的某种n维矩形结构。
4.决定目标代码的因素主要取决于具体的机器结构、指令格式、字长及寄存器的个数和种类,并与指令的语义和所用操作系统、存储管理等都密切相关。
5.一个上下文无关文法G包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组_____。
A.句子
B.句型
C.单词
D.产生式
6._____是一种典型的解释型语言。
A. BASIC
B. C
C. FORTRAN

奥鹏14秋《编译原理》作业1满分答案

奥鹏14秋《编译原理》作业1满分答案

14秋《编译原理》作业1
一,单选题
1. ( )是把中间代码进行变换或者进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。

A. 语法分析
B. 语义分析
C. 中间代码生成
D. 代码优化
E. 目标代码生成
?
正确答案:D
2. 编译程序是将高级语言程序翻译成( )。

A. 高级语言程序
B. 机器语言程序
C. 汇编语言程序
D. 汇编语言或机器语言程序
?
正确答案:D
3. 文法G 所描述的语言是_____的集合。

A. 文法G 的字母表V 中所有符号组成的符号串
B. 文法G 的字母表V 的闭包V* 中的所有符号串
C. 由文法的开始符号推出的所有终极符串
D. 由文法的开始符号推出的所有符号串
?
正确答案:C
4. 下列______优化方法不是针对循环优化进行的。

A. 强度削弱
B. 删除归纳变量
C. 删除多余运算
D. 代码外提
?
正确答案:C
5. 文法分为四种类型,即0型、1型、2型、3型。

其中0型文法是_____。

A. 短语文法
B. 正则文法
C. 上下文有关文法
D. 上下文无关文法
?。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章引论
本章要点:
1. 正确理解什么是编译程序;
2. 了解编译程序工作的基本过程及各阶段的基本任务;
3. 熟悉编译程序的总体结构框图;
4. 了解编译程序的构造过程和构造工具。

本章目标:
1. 掌握本章的“编译程序”、“交叉编译程序”、“编译前端与编译后端”等基本概念,并能在以后的学习熟练运用;
2. 掌握T形图表示。

本章重点:
1. 概念比较:
①编译程序、解释程序;
②诊断编译程序、优化编译程序;
③交叉编译程序、可变目标编译程序;
④编译前端与编译后端;
2. 编译工作过程的五个阶段;
3. 编译程序总框;
4. 编译程序“移植”。

本章难点
1. 编译程序“移植”;
作业题及参考答案
一、单项选择题:
(按照组卷方案,至少8道小题)
1. 如果一个编译程序能产生不同于其宿主机的机器代码,则称它为:。

a. 诊断编译程序
b. 优化编译程序
c. 交叉编译程序
d. 可变目标编译程序
2. 编译程序将高级语言程序翻译成。

a. 机器语言程序或高级语言程序
b. 汇编语言或机器语言程序
c. 汇编语言程序或高级语言程序
d. 中间语言程序或高级语言程序
3. 下面的四个选项中,__________不是编译程序的组成部分。

a. 词法分析程序
b. 代码生成程序
c. 设备管理程序
d. 语法分析程序
4. 现代多数实用编译程序所产生的目标代码都是一种可重定位的指令代码,在运行前必须借助于一个把各个目标模块,包括系统提供的库模块连接在一起,确定程序变量或常数在主存中的位置,装入内存中制定的起始地址,使之成为一个可运行的绝对指令代码的程序。

a. 重定位程序;
b. 解释程序;
c. 连接装配程序;
d. 诊断程序;
5. 从编译程序的角度说,源程序中的错误通常分为两大类。

a. 词法错误和语法错误;
b. 语法错误和语义错误;
c. 编辑错误和诊断错误;
d. 词法错误和语义错误;
6. 下面对编译原理的有关概念正确描述的是:。

a. 目标语言只能是机器语言
b. 编译程序处理的对象是源语言。

c. Lex是语法分析自动生成器
d. 解释程序属于编译程序
7. 目标代码生成阶段所生成的目标代码的形式不可能是。

a. 绝对指令代码
b. 可充定位的指令代码。

c. 汇编指令代码
d. 三地址代码
8. 语义错误是指源程序中不符合语义规则的错误,不包括:
a. 非法字符错误
b. 类型不一致错误。

c. 作用域错误
d. 说明错误
一.答案:1. c; 2. b;3. c; 4. c;5. b;6. d;7. d;8.a;
二、填空题:
(按照组卷方案,至少8道小题)
1.我们有时把编译程序划分为编译前端和编译后端。

前端主要由与有关但与
无关的那些部分组成。

2.对编译程序而言,输入数据是;输出数据是。

3. 编译后端通常不依赖于源语言而仅仅依赖于。

4. 如果不需改写编译程序中与机器无关的部分就可以把编译程序移植到另外一个目标机上,则称该编译程序是。

5. 描述程序设计语言词法的有效工具是。

6. 编译过程的每一个阶段都能检测出错误,其中,绝大多数错误在_______ 阶段检测出来的。

7. 为了使编译后的Java程序从一个平台移到另外一个平台上执行,Java定义了一种称为ByteCode的虚拟机代码。

只要实际使用的操作平台上实现了执行ByteCode的Java解释器,这个操作平台就可以执行各种Java程序。

这就是所谓Java语言的。

8.在一个程序设计环境中,起着中心作用。

连接程序、调试程序、程序分析等工具的工作直接依赖于它所产生的结果。

二.答案:1. 源程序,目标机;2. 源程序,目标程序;3. 中间语言;4. 可变目标编译程序;5. 正规式和有限自动机;6. 词法分析、语法分析和语义分析;7. 操作平台无关性;8.编译程序。

三、判断题:
(按照组卷方案,至少8道小题)
1. 在编译过程中,既可以将几个不同的阶段合为一遍,也可以把一个阶段的工作分为若干遍。

()
2. 编译程序生成的目标程序都是可执行的程序。

()
3. 编译前端主要由与源语言和目标机相关的那些部分组成。

()
4. 优化的任务在于对前端编译所产生的中间代码进行加工和变换,以其能产生运行结果更为准确的目标代码。

()
5. 为了让编译程序可改变目标机,通常需要一种良好定义的中间语言支持。

()
6. 汇编器将高级语言程序翻译成汇编语言程序。

()
7. 许多编译程序在识别出语法单位后并不真正构造语法树。

()
8. 取编译程序前端改写其后端以生成不同机器上的目标代码,目前技术上还难以实现。

()三.答案 1. √;2. ×;3. ×;4. ×;5. √;6. ×;7. √;8. ×;
四、名词解释:、
(按照组卷方案,至少3道小题)
1. 诊断编译程序、优化编译程序;
2. 交叉编译程序、可变目标编译程序;
3. 编译程序的“遍”
4. 程序设计环境
四.答案:
1.诊断编译程序:专门用于帮助程序开发和调试的编译程序。

优化编译程序:着重于提高目标代码效率的编译程序。

2.交叉编译程序:能产生不同于其宿主机的机器代码的编译程序。

可变目标编译程序:不需重写编译程序中与机器无关的部分就能改变目标机的编译程序。

3. 编译程序的“遍”:就是对源程序或者中间结果从头到尾的一次扫描,并做有关的加工处理,生成新的中间结果或者目标程序。

4. 程序设计环境:支持程序设计人员进行程序设计开发所需要的如编辑程序、编译程序、连接程序和调试程序等软件工具,一起构成程序设计环境。

五、简答题:
(按照组卷方案,至少3道小题)
1. 什么是编译程序的“遍”?
2. 什么编译程序、解释程序?编译程序和解释程序有什么区别?
3. 前端编译和后端编译是如何划分的?
4. 什么是标识符,什么是名字,它们的区别是什么?
5. 如果机器A上已有一个用A机器代码实现的某高级语言L1的编译程序,则可以用L1编写另一种高级语言L2的编译程序,画出这个实现过程的T形图表示。

6. 如何采用“移植”的办法,利用A机器上已有的高级语言L编写能够在B机器上运行的高级语言L的编译程序?画出T形图表示。

五.答案:
1. 编译程序的“遍”,就是对源程序或者中间结果从头到尾的一次扫描,并做有关的加工处理,生成新的中间结果或者目标程序。

既可以将几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。

当一遍中包含若干阶段时,各阶段的工作是穿插进行的。

一个编译程序究竟应分为几遍、如何划分,是与源语言、设计要求、硬件设备等诸因素有关的,难以统一规定。

2. 编译程序:把某一种高级语言源程序转换成汇编语言程序或机器语言程序的程序。

解释程序:对高级语言源程序并不生成汇编程序或机器语言程序,而是边解释边执行的程序。

编译程序把源语言程序翻译成目标代码,然后由操作系统加载执行;而解释程序则是边。

相关文档
最新文档