欢迎来到天天文库
浏览记录
ID:18468856
大小:390.00 KB
页数:25页
时间:2018-09-18
《编译原理(王力红 著)习题答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、习题11-1说明解释程序和编译程序的区别。答:通常,翻译程序可分为解释程序、汇编程序和编译程序。所谓解释程序是一种将源程序按动态顺序逐句进行分析解释编译,边解释边执行、不产生目标程序的一种翻译程序。这种翻译程序结构简单、占用内存较少,易于在执行过程中对源程序进行修改,但工作效率低,只适合一些规模较小的语言,如解释BASIC等。而编译程序(也称编译器)是源语言为某种高级语言,目标语言为相应于某一计算机的汇编语言或机器语言的一种翻译程序。这种编译程序将源程序翻译成执行时可完全独立于源程序的经优化的目标语言代码,因而运行效率高。更为重要的是,它使工作于高级语言环境下的程序设计人员,不必考虑
2、与机器有关的繁琐细节,却能完成机器语言所能完成的绝大多数工作。在解释方式下,并不生成目标代码,而是直接执行源程序本身。这是编译方式与解释方式的根本区别。1-2简述高级语言程序按编译方式的执行过程。答:高级语言程序按编译方式的执行过程一般可分为两个阶段:编译阶段和运行阶段。其中,编译阶段完成由源程序到目标程序的翻译,若目标程序是汇编语言程序,还需再通过汇编程序进一步翻译成机器语言程序。而运行阶段的任务是在目标计算机上执行编译阶段所得到的目标程序。但目标程序往往不能由计算机直接执行,一般还应有运行系统进行配合,这个运行系统包括链接程序和由这样一些子程序组成的系统库,如标准函数计算子程序、
3、数组动态存储子程序等。由链接程序将目标程序和系统库连接在一起,最终形成一个可执行程序,在计算机上直接执行。1-3什么是编译系统?答:通常将编译程序、链接程序、系统库、源程序编辑程序等软件组成的系统称为编译系统。1-4编译过程通常有哪几个阶段?简述各阶段的主要任务。答:程序设计语言的编译过程一般可以分为词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成5个阶段。词法分析是编译过程的第一个阶段。该阶段的主要任务是从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位——单词,并指出其属性。语法分析阶段的主要任务是在词法分析的基础上,根据相应程序设计语言的语法规定进行
4、语法分析,在源程序的单词串中识别出各种语法成分,如“程序”、“语句”、“表达式”等,并确定整个输入串是否构成一个语法上正确的程序,检查出语法错误。语义分析和中间代码生成阶段的主要任务有两个,其一是进行相应的语义检查,以保证源程序在语义上的正确性,其二是确定各语法成分的含义、用途,收集类型信息,确定应进行的运算和操作,并将其转换为某种内部表示形式,即生成中间代码。代码优化阶段是编译过程的最后阶段。这一阶段的任务是对上一阶段产生的中间代码进行变换和改造,以期获得高质量的目标代码。目标代码生成阶段的任务是把优化后的中间代码转换成特定机器上的绝对指令代码,或可重定位的指令代码,或汇编指令代码
5、。由于这种转换工作与具体的目标计算机的系统结构及其指令系统有关,涉及各种变量的存储空间分配、寄存器的调度、各种硬件功能部件的使用等,因此工作比较复杂。1-5什么是编译程序的遍?对编译程序来说,遍多和遍少各有什么优缺点?所谓一遍(pass)或一趟,是指在编译过程中对源程序或与之等价的中间程序从头到尾扫描一遍,并将其转换成下一个中间程序的整个过程。答:编译程序按其扫描次数可分为单遍(趟)扫描和多遍(趟)扫描。采用多遍扫描方式,各遍的工作分工明确,便于多人合作开发,缩短开发周期,同时节省运行时的内存空间,易于提高目标程序的质量。但各遍之间的重复工作多,编译效率低。而单遍(趟)扫描的编译程序
6、,编译速度快、效率高,但运行时占用空间大,目标程序质量低。1-6一个最简单的编译程序至少要包含哪几个组成部分(程序)?答:至少要包含词法分析程序、语法分析程序、目标代码生成程序等3个组成部分(程序)。习题22-3已知算术表达式文法G[E]:E→E+T
7、TT→T*F
8、FF→(E)
9、i求符号串i*i的最左推导、最右推导、最左归约、最右归约。解:最左推导:E=>T=>T*F=>F*F=>i*F=>i*i最右推导:E=>T=>T*F=>T*i=>F*i=>i*i最左归约:i*i=>F*i=>T*i=>T*F=>T=>E最右归约:i*i=>i*F=>F*F=>T*F=>T=>E2-4设有文法G
10、[A]:A→bA
11、cc判断符号串bbc,bbbcc,bbA,bbAc是否是G[A]的句型或句子。解答:∵A=>bA=>bbA=>bbbA=>bbbcc∴bbA是G[A]的句型,bbbcc是G[A]的句子,bbAc不是G[A]的句型,bbc不是G[A]的句子。2-5分别求下列文法所描述的语言:①G1[S]:S→aaSbb
12、e解答:∵S=>aaSbb=>aaaaSbbbb=>…∴L(G1[S])={a2nb2n
13、n≥0}②G2[S]:S→10S0
14、aAA→bA
此文档下载收益归作者所有