编译原理作业集第一章修订版
编译原理作业标准答案
编译原理作业标准答案第一章引言一、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。
源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。
目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。
目标程序(结果程序)一般可由计算机直接执行。
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。
如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。
其中包括:编译程序,解释程序,汇编程序。
编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。
解释程序: 以该语言写的源程序作为输入,但不产生目标程序。
按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。
二、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。
三、简述编译程序的基本过程的任务。
编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分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)编译器生成的目标程序都是可执行的程序。
(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.程序设计语言 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满分答案
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
一,单选题
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.解:源程序是指以某种程序设计语言所编写的程序。
目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。
翻译程序是将某种语言翻译成另一种语言的程序的统称。
编译程序与解释程序均为翻译程序,但二者工作方法不同。
解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。
即边解释边执行,翻译所得的指令序列并不保存。
编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。
即先翻译、后执行。
2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
3.解:C语言的关键字有:auto break case char const continuedefault do double else enum extern float for goto if int longregister return short signed sizeof static struct switch typedef union unsigned void volatile while。
上述关键字在C语言中均为保留字。
4.解:C语言中括号有三种:{},[],()。
其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。
C语言中无END关键字。
逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。
5.略第二章习题解答1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){a n b n|n≥0}解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)(2){a n b m c p|n,m,p≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){a n # b n|n≥0}∪{c n # d n|n≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X,S→Y,X→aXb|#,Y→cYd|# },S)(4){w#w r# | w?{0,1}*,w r是w的逆序排列}解:G(S) = ({S,W,R},{0,1,#}, {S→W#, W→0W0|1W1|# },S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S) = ({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e, I→J|2|4|6|8, Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B3.描述语言特点(1)S→10S0S→aAA→bAA→a解:本文法构成的语言集为:L(G)={(10)n ab m a0n|n, m≥0}。
编译原理 第1章习题解答
第一章习题解答1.1 简述计算机程序设计语言的发展过程。
1.2 高级程序设计语言有哪些特点?1.3 高级程序设计语言为何需要翻译程序?1.4 高级程序设计语言有哪两种翻译方式?分别介绍它们的特点。
1.5 编译程序具有哪些特点?1.6 编译程序包括哪几个主要组成部分?分别阐述各个组成部分的主要任务。
1.7 试叙述编译程序的结构和组织方式。
1.8 简述编译程序的自展技术、移植、自动化以及可再入性。
1.9 何谓翻译程序的编写系统?1.10 并行编译程序有什么特点?参考答案1.1 答:最早的计算机程序设计语言是机器语言(指令系统),机器语言中的指令都是用二进制代码直接表示的。
随后出现了符号语言和汇编语言等程序设计语言,它们比机器语言虽前进了一步,但仍属计算机低级语言,编写程序效率很低。
程序设计语言发展的第三阶段是计算机高级程序设计语言的诞生。
随着1954年第一种高级语言FORTRAN I语言的问世,计算机高级程序设计语言从此以后如雨后春笋,不断涌现。
作为高级程序设计语言的一种发展,目前流行的面向对象程序设计语言是对传统的面向过程程序设计语言的一种挑战。
1.2 答:高级程序设计语言具有以下的特点:独立于机器、接近自然语言、编写效率高、编写出的程序易读、易理解、易修改、易移植等。
1.3 答:由于计算机不能直接执行用高级语言编写的程序,只能直接执行机器语言程序。
所以,用高级语言编写的程序必须由一个翻译程序翻译成机器语言程序。
1.4答:翻译有两种方式,一种是编译方式,另一种是解释方式。
编译方式是先将源程序翻译成汇编语言程序或机器语言程序(称为目标程序),然后再执行它。
它一般包括词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格处理程序和出错处理程序。
编译过程可由一遍或多遍完成。
和编译方式不同,解释方式并不先产生目标程序然后再执行之,而是对源程序边翻译边执行。
二者的根本区别在于是否生成目标代码,而不是是否进行翻译。
编译原理-第一
并行化编译技术
目的:提高并行计算机体系结构的性能。 超大规模计算的日益增长的需求 高性能计算机
第一章 引论
1.1 什么是编译程序 1.2 编译过程和编译程序的结构 1.3 研究领域 参考书
1。1 什么是编译程序
功能
高级程 序设计 语言书 写的程 序 术语 编译程序 低级语言 程序
源语言(程序)
目标语言(程序) 实现语言
S
I
O
1。1 什么是编译程序
分类
软件 系统软件 语言处理系统
代码优化
id1:= id2 + id3 * 60
(1) (2) (3) (4) (inttoreal ( ( ( * + := 60 id3 id2 t3 t1 t2 t1 t2 t3 id1 ) ) ) )
变换
(1) ( * id3 id2 60.0 t1 t1 id1 ) )
( 2)( +
解释程序直接将4的值输出(显示)
编译阶段和运行阶段存储结构
源程序缓冲区 名字表 目标代码缓冲区 数据区 编译用源程序中 间表示各种表格 目标代码区
编译时
运行时
解释系统存储结构
解释系统 源程序
工作单元
名字表
标号表
缓冲区 (输入输出) 栈区
1.3 研究领域
并行编译技术 交叉编译技术 硬件描述语言及其编译技术
骨架程序 预处理器 源程序
编译器
可重定位目标文件库 汇编器
目标汇编程序
可重定位机器代码
装配连接编辑
一个语言处理系统
绝对机器码
什么是编译程序
编译原理-第1-5章习题课答案ppt课件
9、对下面情况给出DFA及正规表达式:
chapter1~5习题
(1){0,1}上的含有子串010的所有串。 正规式:(0 | 1)* 010 (0 | 1)*
(2) {0,1}上不含子串010的所有串。 正规式:1*(0|11*1)* 1*( 0 | 11)*1* 1*0*1* (0 | 11)*(0 | 1) DFA做法同第7题。
I0 Φ {c,d} {c,d}
{c,d,f} {c,d} {c,d,f}
I1 {b,c,d} {c,d,e} {c,d,e} {c,d,e} {c,d,e,g} {c,d,e}
编
译
原 理 “雪亮工程"是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。
c
ε
1
1 d
e0f
1
g
编
译
原 理 “雪亮工程"是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。
②.状态转换矩阵
a 1
b
ε
0 c
ε
1
chapter1~5习题
1 d
e0f
1
g
I {a} {b,c,d} {c,d} {c,d,e} {c,d,f} {c,d,e,g}
1 {c,dF,e}
{c,d,e}
0{c,d,e}
{c,d,e,g} {c,d,e}
1 B D D D F(终态) D
编
译
原 理 “雪亮工程"是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。
编译原理第1章课后习题答案(修订版)
1.6.3 答:各声明的作用域分别如下: 块 B1 B1 B1 B1 B2 B2 B3 B3 B4 B4 B5 B5 声明 INT INT INT INT INT INT INT INT INT INT INT INT X W Y Z X Z W X W X Y Z 作用域 B1-B2-B4 B1-B3-B4 B1-B5 B1-B2-B5 B2-B3 B2 B3 B3 B4 B4 B5 B5
1.1.2 编译器相对于解释器的优点是什么?解释器相对于编译器的优点是什么? 答: 编译器是针对于某一个特定的处理器对源程序进行翻译的, 所以它能够将一次性翻译成 目标代码, 再在处理器上运行, 这种形式的程序运行显然要比翻译一部分命令执行一部分命 令要快,这也正是相对于解释器的优点所在。 对于解释器而言恰恰相反, 它并不是将源程序一次性翻译成目标代码而是翻译一部分再执行 一部分,这种做法有两好处,首先它使得运行变得动态性,即对于相同的小部分代码它不用 再解释, 这使得编译的效益提高。 其次是这种解释的机制使得相同的程序在不同的处理器上 运行成为可能,通过解释可以在不同的处理器上执行。 1.1.3 答:汇编语言比较容易输出和调试,再由汇编器处理后生成可重新定位的机器语言。 1.1.4 把一种高级语言翻译成为另一种高级语言的编译器称为源到源的翻译器。 编译器使用 C 语言做为目标语言有什么好处? 答: 把 C 语言作为目标语言的好处是一方面 C 语言被广泛的应用, 使得编译后的目标语言能 够被大多数人理解。 另一方面 c 语言已经有比较高效完备的编译器, 便于再程序编译成其它 语言的目标程序。 1.6.1(左),1.6.2(右) 对下图中的块结构的 C 代码,指出赋给 w、x、y 和 z 的值。 int w,x,y,z; int i=4;int j=5; { int j=7; i=6; w=i+j; } x=i+j; { int i=8; y=i+j; } z=i+j; A1 A2 int w,x,y,z; int i=3;int j=4; { int i=5; w=i+j; } x=i+j; { int j=6; i=7; y=i+j; } z=i+j; B1 B2
最新编译原理第一章作业完整答案版
编译原理第一章作业完整答案版------------------------------------------作者xxxx------------------------------------------日期xxxx01-普通作业一(第一章)一、选择题(从备选项中选出一个或多个正确答案)。
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。
词组二、判断题(对于下列陈述中正确的说法选择回答“对”,否则选择回答“错”)。
1。
编译程序是一种常见的应用软件。
2. C语言的编译程序可以用C语言编写。
3。
编译方式与解释方式的区别之一在于是否生成目标程序。
4。
中间代码生成是编译程序不可或缺的部分。
5。
含有优化的编译程序执行效率高。
三、解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍四、一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么? 并画出编译程序的总体结构图。
五、何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系?参考答案:一、选择题1. D 2。
A 3。
AC 4. C 5. B二、判断题1。
错 2。
对 3.对4。
错 5.错三、(1)把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序。
(2)源程序,是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件。
编译原理习题集与答案解析(整理后)
编译原理习题集与答案解析(整理后)第⼀章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.产⽣规则d.词法规则7、词法分析器的输⼊是。
a.单词符号串b.源程序c.语法单位d.⽬标程序8、中间代码⽣成时所遵循的是- 。
a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序是对。
a.汇编程序的翻译b.⾼级语⾔程序的解释执⾏c.机器语⾔的执⾏d.⾼级语⾔的翻译10、语法分析应遵循。
a.语义规则b.语法规则c.构词规则d.等价变换规则⼆、多项选择题1、编译程序各阶段的⼯作都涉及到。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序⼯作时,通常有阶段。
a.词法分析b.语法分析c.中间代码⽣成d.语义检查e.⽬标代码⽣成三、填空题1、解释程序和编译程序的区别在于。
2、编译过程通常可分为5个阶段,分别是、语法分析、代码优化和⽬标代码⽣成。
3、编译程序⼯作过程中,第⼀段输⼊是,最后阶段的输出为程序。
4、编译程序是指将程序翻译成程序的程序。
单选解答1、将编译程序分成若⼲个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、⽬标语⾔及编译⽅法等三⽅⾯的知识,故选d。
3、对编译⽽⾔,变量既持有左值⼜持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
17春《编译原理》
17春《编译原理》作业_1一、单选题1. 用高级语言编写的程序经编译后产生的程序叫_____。
A. 源程序B. 目标程序C. 连接程序D. 解释程序答案B2. 构造编译程序应掌握______。
A. 源程序B. 目标语言C. 编译方法D. 以上三项都是答案D3. 四种形式语言文法中,1型文法又称为_____文法。
A. 短语结构文法B. 前后文无关文法C. 前后文有关文法D. 正规文法答案C4. 解释程序处理语言时, 大多数采用的是_____方法。
A. 源程序命令被逐个直接解释执行B. 先将源程序转化为之间代码, 再解释执行C. 先将源程序解释转化为目标程序, 再执行D. 以上方法都可以答案B5. 四元式之间的联系是通过_____实现的。
A. 指示器B. 临时变量C. 符号表D. 程序变量答案B6. 把汇编语言程序翻译成机器可执行的目标程序的工作是由_____完成的。
A. 编译器C. 解释器D. 预处理器答案B7. 下列______优化方法不是针对循环优化进行的。
A. 强度削弱B. 删除归纳变量C. 删除多余运算D. 代码外提答案C8. 将编译程序分成若干个"遍"是为了( )。
A. 提高程序的执行效率B. 使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D. 利用有限的机器内存但降低了机器的执行效率答案B9. 在自底向上的语法分析方法中,分析的关键是_____。
A. 寻找句柄B. 寻找句型C. 消除递归D. 选择候选式答案D10. 设G 是一个给定的文法,S 是文法的开始符号,如果S->x( 其中x∈V*), 则称x 是文法G 的一个_____。
A. 候选式B. 句型C. 单词D. 产生式答案B二、多选题1. 一个LR(1) 项目可以看成()两个部分组成。
A. 心B. 向前搜索符集合C. 分析表答案A,B2. 循环优化的重要技术有()。
A. 代码外提B. 删除归纳变量C. 强度削弱D. 局部优化答案A,B,C3. 运行时的存储区常常划分为:()A. 目标区B. 静态数据区C. 栈区D. 堆区答案A,B,C,D三、判断题1. 解释程序适用于COBOL 和FORTRAN 语言。
编译原理作业集-第一章-修订版
第一章引论本章要点: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. 编译程序处理的对象是源语言。
编译原理习题及答案1~3[优质PPT]
《编译原理教程》习题解析
40
图2-16 正规式((a | b)*|aa)*b对应的NFA
故选D。
《编译原理教程》习题解析
17
(5) NFA可以有DFA与之等价,即两者描述能力相同; 也即,对于任一给定的NFA M,一定存在一个DFA M', 使L(M)=L(M′)。故选B。
(6) DFA便于识别,易于计算机实现,而NFA便于定 理的证明。故选C。
(7) 本题虽然是第二章的题,但答案参见第三章3.1.3 节。即选C。
实际上,当闭包*取0时,正规式(ab) *a与正规 式a(ba)*由初态X到终态Y之间仅存在一条a弧。由 于(ab)*在a之前,故描述(ab)*的弧应在初态结点X 上;而(ba)*在a之后,故(ba)*对应的弧应在终态结 点Y上。因此,(ab)*a和a(ba)*所对应的NFA也可 分别描述为如图2-9(a)和(b)所示的形式,它们确定 化并化简后仍可得到图2-8所示的最简DFA。
【解答】 计算机执行用高级语言编写的程序主要有两种途 径:解释和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全 部翻译成机器代码程序,然后执行这个机器代码程序的方法, 而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能 的机器代码语句串并执行,然后再读入下一条源程序语句并解 释执行,而所翻译的机器代码语句串在该语句执行后并不保留。 这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行 的,如果一语句处于一循环体中,则每次循环执行到该语句时, 都要将其翻译成机器代码后再执行。
《编译原理教程》习题解析
19
2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的
有限自动机,其中f定义如下:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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. 编译程序:把某一种高级语言源程序转换成汇编语言程序或机器语言程序的程序。
解释程序:对高级语言源程序并不生成汇编程序或机器语言程序,而是边解释边执行的程序。
编译程序把源语言程序翻译成目标代码,然后由操作系统加载执行;而解释程序则是边。