◆第2章编译程序橛述·· 2. 一个编译程序,不仅包含词法分析、语法分析、中间代码生成、中间代码优化、目 标代码生成等5个部分,还应包括(1)。其中,。(2)和优化部分不是每个编 译程序都必需的。词法分析器用于识别(3) 语法分析器则可以发现源程序中所有 的(4) 可选项有: (1)a.模拟执行器b.解释器 c.表格处理和出错处理d.符号执行器 (2)a.语法分析 b.中间代码生成c.词法分析 d.目标代码生成 (3)a.字符串 b.语句 c.单词 d.标识符 (4)a.语义错误 b.语法和语义错误c.错误并校正 d.语法错误 答案:(1)c (2)b(3)c(4)d 分析(2): 编译程序的优化功能是针对日标代码而言的,提高的是日标代码的质量。但是没有做 优化工作,编译程序得到的目标代码仍然可以运行并得到正确结果(机器语言程序可以直 接运行:汀编语言程序需礼编后运行):编译程序可以直接将源程序翻译成目标代码,所 以可以没有中间代码生成。 3.程序设计语言的语言处理程序是一种(1)。(2)是两类程序语言处理程 序,它们的主要区别在于(3) 可选项有: (1)a.系统软件b.应用软件c.实时系统d.分布式系统 (2)a.高级语言程序和低级语言程序b.解释程序和编译程序 c,编译程序和操作系统d.系统程序和应用程序 (3)4.单用户与多用户的差别b.对用户程序的查错能力 c.机器执行效率d.是香生成目标代码 答案:(1)a (2)b (3)d 分析(3): 编译方式和解释方式下都完成了对源程序的翻译 在编译方式下,翻译工作完成后,会生成一个与源程序等价的目标代码,该目标代码 一次生成后可以被多次使用:而在解释方式下,虽然也可能生成某种中间形式,但当源程 序的解释工作完成后,所生成的中间形式并不保留,下一次解释该源程序,又需要重新生 成中间形式。 所以,编译方式与解释方式的根本区别在于是否生成日标代码。 4.(华东计算所1985)汇编程序是将(1)翻译成(2);编译程序是将(3) 翻译成(4)。 可选项有: a.汇编语言程序b.机器语言程序c.高级语言程序 d.a或bea或c·fb或c
编译原理习题与解析(第2版) = 答案:(1)a(2)b(3)c.(4)d 5.高级语言的语言处理程序分为解释程序和编译程序两种。编译程序有5个阶段,而 解释程序通常缺少(1)和(2)。其中,()的目的是使最后阶段产生的目 标代码更为高效。与编译系统相比,解释系统(3)一。解释程序处理语言时,大多数采 用的是(4)方法。 (5)就是一种典型的解释型语言。 可选项有: (1)、(2)a.中间代码生成 b.目标代码生成c.词法分析 d.语法分析e.代码优化 (3)a.比较简单,可移植性好,执行速度快 b.比较复杂,可移植性好,执行速度快 ,比较简单,可移植性差,执行速度慢 d.比较简单,可移植性好,执行速度慢 (4)a.源程序命令被逐个直接解释执行 h.先将源程序转化为中间代码.再解释执行 ℃.先将源程序解释转化为目标程序,再执行 d.以上方法都可以 5) a.BASIC b.C c.FORTRAN d.PASCAL 答案:(1)e(2)b(3)d(4)b(5)a 6。用高级语言编写的程序经编译后产生的程序叫(1)。用不同话言编写的程 序产生 (1)后,可用(2)连接在一起生成机器可执行的程序。在机器中真 正执行的是(3) 9 可选项有: a.源程序b.目标程序c.函数d.过程 e.机器指令代码f模块g.连接程序h.程序库 答案:(1)b(2)g(3)e 7.要在某一台机器上为某种语言构造一个编译程序,必须掌握下述3个方面的内容: (1 (2) (3) 可选项有: a.汇编语言b.高级语言c.源语言d.目标语言 e.程序设计方法学f编译方法g.测试方法h.机器语言 答案:(1)c(2)d(3)f 分析: 理解了源语言,才能知道编译程序的翻译对象是什么:了解了目标语言,才能知道编 译程序要将源程序翻译成什么样的目标:掌握了编译方法,才能知道该如何翻译。 8.由于受到具体机器主存容量的限制,编译程序的几个不同阶段的工作往往被组合成 (1)一,诸阶段的工作往往是(2)进行的
第2章编译程序概述·”。 可选项有: (1)a.过程b.程序c.批量d.遍 (2)a.顺序b.并行c.成批d.穿插 答案:(1)d (2)d 分析: (1)编译过程中的每一个T作都需要保存不同的信息,如果不分遍进行,则所有工作 所需要的信息都要同时占用存储空间,这就需要较大的内存:而将编译的工作分成若干遍 以后,只要将该遍所需的信息保存在内存中即可。所以,当机器存储容量较小时,为避免 编译过程中需要的信息占用太多的内存空间,可以将编译的工作分成若干遍:如果机器存 储容量较大,则可以不受此限制 (2)编译程序各阶段的工作有可能是穿插进行的。 例如, 一遍扫描的编译程序工作时,山语法分析程序控制整个翻译过程。语法分析程 序首先调用词法分析程序,获取足够形成一个语法成分的单词串,然后分析该语法成分的 语法结构,如果其语法结构正确,则调用语义分析程序,分析其语义并生成月标代码:此 后,语法分析程序将再调州词法分析程序,开始对下一个语法成分的处理:重复上述过程, 直至整个源程序被处理完。在这个过程中,各阶段的工作就是穿插进行的。 9.编译程序与具体的机器(1),与具体的语言(2)。 可选项有: a.有关b.无关 答案:(1)a(2)a 分析 编译程序与具体的机器和语言都有关,即任何一个具体的编译程序都是某一特定类型 的机器上关于某一特定语言的编译程序。不同的语言(如C和Pascal)被翻译到同一种机器 系统上,需要由不同的编译程序来完成:同一个语言〔如C)被翻译到不同的机器系统上, 也需要由不同的编译程序来完成。 10。(国防技大学1984)编译过程中,语法分折器的任务是 ①分析单词是怎样构成的 ②分析单词串是如何构成语句和说明的 ③分析语和说明是如何构成程序的 ④分析程序的结构 可选项有: a.②③ b.②③④ c.①②③ d.①②③④ 答案:b 分析: 语法分析程序的任务就是分析源程序的语法结构是否正确,所以④是正确的,而④的 工作又具体化为②和③
编译原理习题与解析(第2版)一—了 11.(湖南大学1984)编写一个计算机高级语言的源程序后,到正式上机运行之前, 般要经过」 这几步。 ①编辑②编译③连接④运行 可选项有 a.①②③④b.①②③c.①③d.①④ 答案:b 分析: 编译后得到的目标代码程序有可能是机器代码模块,还需要连接装配程序来完成相关 的工作才能成为·个可执行程序。 12.“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行。” 这种说法 可选项有: a.不正确b.下确 答案:a 分析: 还可以通过解释方式进行翻译 13.把汇编语言程序翻译成机器可执行的目标程序的工作是由完成的。 可选项有: a.编译器b.汇编器c.解释器d.预处理器 答案:b 分析: 不能选。因为编译程序的功能是将高级语言的程序翻译成汇编语言程序或机器语言程 序。 这里也不能选c。因为题目中说明了是翻译成“可执行的目标程序”,而解释程序是不 生成目标代码的. 14.编译程序生成的目标程序 是机器语言的程序。 可选项有: a.一定b.不一定 答案:b 分析: 编译程序得到的目标代码还可能是汇编语言程序。 15.编译程序生成的目标程序 是可执行的程序。 可选项有: 一定b.不一定 答案:b 分析: 如果编译程序生成的甘标代码是汇编语言程序,则还需要汇编程序的进一步翻译后才 12 Page
第2章编译程序概述。” 能被执行。如果编译程序生成的目标代码是机器语言代码模块,则还需要连接装配程序的 辅助才能被执行。 23习题解析 1.“含有优化功能的编译程序执行效率高”,这种说法正确吗? 解答:含有优化功能的编译程序,其优化的主要目标是提高目标代码的质量,而不是 编译程序本身得到优化。因此“含有优化功能的编译程序”提高的是目标代码的效率,而 不是编译程序自身的效率。 所以,上述说法不对, 2.“解释方式与编译方式的区别在于解释程序对源程序并没有真正进行翻译。”这种 说法对吗? 解窖:这种说法木对。 编译方式与解释方式的根本区别在于是否生成目标代码,而不是是否进行翻译。编译 方式和解释方式实际上都进行了翻译,只是前者最后生成了可多次使用的目标代码,相当 于自然语言翻译中的笔译,而后者没有生成日标代码,每一次执行源程序都需要重新翻译, 相当于自然语言翻译中的即席口译。 3.(武汉大学1999)计算机执行用高级语言编写的程序有哪些途径?它们之间的士要 区别是什么? 解答:计算机执行用高级语言书写的程序主要有两种途径:解释和编译 编译方式和解释方式的根本区别在丁:是否生成了目标代码。 在解释方式下,翻译程序事先并不对高级语言程序进彻底翻译以得到机器码,而 是每读入一条语句,就解释其含义并执行,然后再读入下一条语句,再解释执行,即按源 程序中语句的动态顺序逐句地进行分析解释,并立即予以执行。 在编译方式下,翻译程序先对高级言程序进行彻底翻译并生成目标代码,然后再对 目标代码进行执行,即对源程序的处理是先翻译后执行。 从速度上看,编译方式下,源程序的执行比解释方式下快,但在解释方式下,有利于 程序的调试。 4.有人认为编译程序的5个组成部分缺一不可,这种看法正确吗? 解答:不正确。编译程序的5个组成部分中,词法分析、语法分析、语义分析和代码生 成是必须完成的,而代码优化是为了提高目标程序的质量,它不是必需的,没有优化部分 的编译程序也能生成日标代码。 5.“多遍扫描的编译程序是高质量的编译程序,优于单遍扫描的编译程序。”对吗? 编译程序的结构采用多遍扫描还是单遍扫描需要考虑哪些因素? 将