• 一年级答案
  • 二年级答案
  • 三年级答案
  • 四年级答案
  • 五年级答案
  • 六年级答案
  • 初一答案
  • 初二答案
  • 初三答案
  • 语文答案
  • 数学答案
  • 英语答案
  • 政治答案
  • 历史答案
  • 物理答案
  • 化学答案
  • 生物答案
  • 地理答案
  • 其他答案
  • 寒假作业答案
  • 暑假作业答案
  • 当前位置: 千叶帆文摘 > 答案大全 > 其他答案 > 编译原理第三版课后答案王生原

    编译原理第三版课后答案王生原

    时间:2017-06-23 来源:千叶帆 本文已影响

    篇一:编译原理课后答案(第三版 蒋立源 康慕宁编)

    class="txt">第一章 习题解答

    1解:源程序是指以某种程序设计语言所编写的程序。目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。翻译程序是将某种语言翻译成另一种语言的程序的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。即先翻译、后执行。

    2解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

    3解:C语言的关键字有:auto break case char constcontinue default do double else enum extern float for goto if int long register 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){anbn|n≥0}

    解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)

    (2){anbmcp|n,m,p≥0}

    解:对应文法为G(S) = ({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)

    (3){an # bn|n≥0}∪{cn # dn|n≥0}

    解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X, S→Y,X→aXb|#,Y→cYd|# },S)

    (4){w#wr# | w?{0,1}*,wr是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|0B

    3.描述语言特点

    (1)S→10S0S→aAA→bAA→a

    解:本文法构成的语言集为:L(G)={(10)nabma0n|n, m≥0}。

    (2)S→SS S→1A0A→1A0A→ε

    解:L(G)={1n10n11n20n2 ? 1nm0nm |n1,n2,?,nm≥0;且n1,n2,?nm不全为零}该语言特点是:产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。

    (3)S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε

    解:本文法构成的语言集为:L(G)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特点是具有1p1n0n 或1n0n0q形式,进一步,可知其具有形式1n0mn,m≥0,且n+m>0。

    (4)S→bAdcA→AGSG→εA→a

    解:可知,S=>?=>baSndc n≥0

    该语言特点是:产生的句子中,是以ba开头dc结尾的串,且ba、dc个数相同。

    (5)S→aSSS→a

    解:L(G)={a(2n-1)|n≥1}可知:奇数个a

    4.解:此文法产生的语言是:以终结符a1 、a2 ?an 为运算对象,以∧、∨、~为运算符,

    以[、]为分隔符的布尔表达式串

    5.5.1解:由于此文法包含以下规则:AA→e,所以此文法是0型文法。

    5.2证明:略

    6.解:

    (1)最左推导:

    <程序>T<分程序>T<标号>:<分程序>TL:<分程序>

    TL:<标号>:<分程序>

    T L:L:<分程序>

    T L:L:<无标号分程序>

    T L:L:<分程序首部>;<复合尾部>

    T L:L:<分程序首部>;<说明>;<复合尾部>

    T L:L:begin<说明>;<说明>;<复合尾部>

    T L:L:begin d;<说明>;<复合尾部>

    T L:L:begin d;d;<复合尾部>

    T L:L:begin d;d;<语句>;<复合尾部>

    T L:L:begin d;d;s;<复合尾部.

    T L:L:begin d;d;s;<语句> end

    T L:L:begin d;d;s;s end

    最右推导:

    <程序>T<分程序>T<标号>:<分程序>

    T<标号>:<标号>:<分程序>

    T<标号>:<标号>:<无标号分程序>

    T<标号>:<标号>:<分程序首部>;<复合尾部>

    T<标号>:<标号>:<分程序首部>;<语句>;<复合尾部>

    T<标号>:<标号>:<分程序首部>;<语句>;<语句>;end

    T<标号>:<标号>:<分程序首部>;<语句>;s;end

    T<标号>:<标号>:<分程序首部>;s;s;end

    T<标号>:<标号>:<分程序首部>;说明;s;s;end

    T<标号>:<标号>:<分程序首部>;d;s;s;end

    T<标号>:<标号>:begin 说明;d;s;s;end

    T<标号>:<标号>:begin d;d;s;s;end

    T<标号>: L:begin d;d;s;s;end

    TL:L:begin d;d;s;s;end

    (2)句子L:L:begin d;d;s;s end的相应语法树是:

    7.解:

    aacb是文法G[S]中的句子,相应语法树是:

    最右推导:S=>aAcB=>aAcb=>aacb

    最左推导:S=>aAcB=>aacB=>aacb

    (2)aabacbadcd不是文法G[S]中的句子

    因为文法中的句子不可能以非终结符d结尾

    (3)aacbccb不是文法G[S]中的句子

    可知,aacbccb仅是文法G[S]的一个句型的一部分,而不是一个句子。

    (4)aacabcbcccaacdca不是文法G[S]中的句子

    因为终结符d后必然要跟终结符a,所以不可能出现?dc?这样的句子。

    (5)aacabcbcccaacbca不是文法G[S]中的句子

    由(1)可知:aacb可归约为S,由文法的产生式规则可知,终结符c后不可能跟非终结符S,所以不可能出现?caacb?这样的句子。

    8.证明:用归纳法于n,n=1时,结论显然成立。设n=k时,对于α1α2...αkT*b,存在βi:i=1,2,..,k,αiT*bi成立,现在设

    α1α2... αkαk+1T*b,因文法是前后文无关的,所以α1α2... αk可推导出b的一个前缀b',αk+1可推导出b的一个后缀=b"(不妨称为b k+1)。由归纳假设,对于b',存在βi :i=1,2,..,k,b'=β1β2...βk,使得

    αiT*bi成立,另外,我们有αk+1T*b"(=b k+1)。即n=k+1时亦成立。证毕。

    9.证明:(1)用反证法。假设α首符号为终结符时,β的首符号为非终结符。即设:α=aω;β=Aω’且 α=>*β。

    由题意可知:α=aωT ?T Aω’=β,由于文法是CFG,终结符a不可能被替换空串或非终结符,因此假设有误。得证;

    (2)同(1),假设:β的首符号为非终结符时,α首符号为终结符。即设:α=aω;β=Aω’且α=aωT ?T Aω’=β,与(1)同理,得证。

    10.证明:因为存在句子:abc,它对应有两个语法树(或最右推导):

    STABTAbcTabc

    STDCTDcTabc

    所以,本文法具有二义性。

    11.解:

    (1) STABTAaSbTAacbTbAacbTbbAacbTbbaacb

    上面推导中,下划线部分为当前句型的句柄。对应的语法树为:

    篇二:编译原理第三版课后习题答案

    ..................................................................................................................................... 2 P36-7 ...................................................................................................................................... 2 P36-8 ...................................................................................................................................... 2 P36-9 ...................................................................................................................................... 3 P36-10 .................................................................................................................................... 3 P36-11 .................................................................................................................................... 3 P64–7 ................................................................................................................................... 4 P64–8 ................................................................................................................................... 5 P64–12 ................................................................................................................................. 5 P64–14 ................................................................................................................................. 7 P81–1 ................................................................................................................................... 8 P81–2 ................................................................................................................................... 9 P81–3 ................................................................................................................................. 12 P133–1 ............................................................................................................................... 12 P133–2 ............................................................................................................................... 12 P133–3 ............................................................................................................................... 14 P134–5 ............................................................................................................................... 15 P164–5 ............................................................................................................................... 19 P164–7 ............................................................................................................................... 19 P217–1 ............................................................................................................................... 19 P217–3 ............................................................................................................................... 20 P218–4 ............................................................................................................................... 20 P218–5 ............................................................................................................................... 21 P218–6 ............................................................................................................................... 22 P218–7 ............................................................................................................................... 22 P219–12 ............................................................................................................................. 22 P270–9 ............................................................................................................................... 24

    P36-6

    (1)

    L(G1)是0~9组成的数字串

    (2)

    最左推导:

    N?ND?NDD?NDDD?DDDD?0DDD?01DD?012D?0127N?ND?DD?3D?34

    N?ND?NDD?DDD?5DD?56D?568

    最右推导:

    N?ND?N7?ND7?N27?ND27?N127?D127?0127N?ND?N4?D4?34

    N?ND?N8?ND8?N68?D68?568

    P36-7

    G(S)

    O?1|3|5|7|9N?2|4|6|8|OD?0|NS?O|AOA?AD|N

    P36-8

    文法:

    E?T|E?T|E?TT?F|T*F|T/F F?(E)|i

    最左推导:

    E?E?T?T?T?F?T?i?T?i?T*F?i?F*F?i?i*F?i?i*iE?T?T*F?F*F?i*F?i*(E)?i*(E?T)?i*(T?T)?i*(F?T)?i*(i?T)?i*(i?F)?i*(i?i)

    最右推导:

    E?E?T?E?T*F?E?T*i?E?F*i?E?i*i?T?i*i?F?i*i?i?i*iE?T?F*T?F*F?F*(E)?F*(E?T)?F*(E?F)?F*(E?i)?F*(T?i)?F*(F?i)?F*(i?i)?i*(i?i)

    语法树:/********************************

    E

    E+

    T

    E+TF

    TFi

    Fi

    i

    i+i+i

    *****************/

    P36-9

    句子iiiei有两个语法树:

    SS??iSeSiS??iiSeSiSei??iiSeiiiSei??iiiei

    iiiei

    P36-10

    /**************

    S?TS|TT?(S)|( )

    ***************/

    P36-11

    /*************** L1:

    S?ACA?aAb|ab C?cC|?

    L2:

    S?ABA?aA|?

    B?bBc|bc

    L3:

    E

    E+T

    T

    T*F

    F

    Fi

    i

    i

    i-i-i

    E

    E

    -T

    E

    -TF

    TFi

    Fi

    i

    i+i*i

    S?ABA?aAb|? B?aBb|?

    L4:

    S?A|BA?0A1|? B?1B0|A

    ***************/

    第三章习题参考答案

    P64–7

    (1)

    确定化:

    最小化:

    {0,1,2,3,4,5},{6}

    {0,1,2,3,4,5}?{1,3,5} {0,1,2,3,4,5}?{1,2,4,6}

    01

    {0,1,2,3,4},{5},{6}{0,1,2,3,4}?{1,3,5}

    {0,1,2,3},{4},{5},{6}

    {0,1,2,3}?{1,3} {0,1,2,3}?{1,2,4}

    01

    {0,1},{2,3}{4},{5},{6}

    {0,1}?{1} {0,1}?{1,2}

    01

    {2,3}?{3} {2,3}?{4}

    01

    {0},{1},{2,3},{4},{5},{6}

    P64

    –8

    (1)

    (1|0)*01

    (2)

    (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(0|5)|(0|5)

    (3)

    0*1(0|10*1)*|1*0(0|10*1)*

    P64–12

    (a)

    确定化:(本文来自:WWw.bDFQy.com 千 叶 帆文摘:编译原理第三版课后答案王生原)

    篇三:编译原理(第二版)张素琴清华大学---答案详解

    第1题

    解释下列术语:

    (1)编译程序

    (2)源程序

    (3)目标程序

    (4)编译程序的前端

    (5)后端

    (6)遍

    答案:

    (1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语

    言,则此翻译程序称为编译程序。

    (2) 源程序:源语言编写的程序称为源程序。

    (3) 目标程序:目标语言书写的程序称为目标程序。

    (4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与

    目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶

    段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符

    号表管理等工作。

    (5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,

    即目标代码生成,以及相关出错处理和符号表操作。

    (6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

    第2题

    一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程

    序的总体结构图。

    答案:

    一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语 义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和

    错误处理程序。其各部分的主要功能简述如下。

    词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

    语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

    语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表

    中。

    中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式

    的中间语言代码,如三元式或四元式。

    中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

    盛威网(www.snwei.com)专业的计算机学习网站 1

    目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

    表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的

    各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的 中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指 出的是,这里的"表格管理程序"并不意味着它就是一个独立的表格管理模块,而是指编译

    程序具有的表格管理功能。

    错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源 程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误

    进行适当的校正(修复) ,目的是使编译程序能够继续向下进行分析和处理。

    注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚,

    就回答八部分。

    第3题何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系?

    答案:

    翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序, 如编译程

    序和汇编程序等。

    编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编

    写的目标程序的翻译程序。

    解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是, 源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,

    则依据这个单词把控制转移到实现这条语句功能的程序部分, 该部分负责完成这条语句的功 能的实现,完成后返回到解释程序的总控部分再读人下一条语句继续进行解释、执行,如此 反复;另一种方式是,一边翻译一边执行,即每读出源程序的一条语句,解释程序就将其翻 译成一段机器指令并执行之,然后再读人下一条语句继续进行解释、执行,如此反复。无论

    盛威网(www.snwei.com)专业的计算机学习网站 2

    是哪种方式,其加工结果都是源程序的执行结果。目前很多解释程序采取上述两种方式的综 合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行

    中间代码程序,最后得到运行结果。

    广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是 边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源 程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来

    完成,即只翻译不执行。

    第4题

    对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、

    代码生成)报告的。

    (1) else 没有匹配的 if

    (2) 数组下标越界

    (3) 使用的函数没有定义

    (4) 在数中出现非数字字符

    答案:

    (1) 语法分析

    (2) 语义分析

    (3) 语法分析

    (4) 词法分析

    第5题

    编译程序大致有哪几种开发技术?

    答案:

    (1)自编译:用某一高级语言写其本身的编译程序。

    (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。

    (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编译

    程序 T0,再把语言 L0 扩充到 L1,此时 L0?? L1 ,并用 L0 编写 L1 的编译程序 T1,再把语

    言 L1 扩充为 L2,有 L1?? L2 ,并用 L1 编写 L2 的编译程序 T2,??,如此逐步扩展下去,好似滚雪球一样,直到我们所要求的编译程序。

    (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。

    盛威网(www.snwei.com)专业的计算机学习网站 3

    第6题

    计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?

    答案:

    计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。

    像 Basic 之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语

    言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一

    条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反复。

    总而言之,是边翻译边执行。

    像 C,Pascal 之类的语言,属于编译型的高级语言。它们的特点是计算机事先对高级语

    言进行全盘翻译,将其全部变为机器代码,再统一执行,即先翻译,后执行。从速度上看,

    编译型的高级语言比解释型的高级语言更快。

    盛威网(www.snwei.com)专业的计算机学习网站 4

    《编译原理》课后习题答案第二章

    第 2 章 PL/0 编译程序的实现第1题

    PL/0 语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管

    理。

    答案:

    PL/0 语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储

    管理。(数组 CODE 存放的只读目标程序,它在运行时不改变。)运行时的数据区 S 是由 解释程序定义的一维整型数组,解释执行时对数据空间 S 的管理遵循后进先出规则,当每 个过程(包括主程序)被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。

    应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。

    第2题

    若 PL/0 编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方 式分别解决递归调用和非局部变量的引用问题,试写出下列程序执行到赋值语句 b∶=10 时

    运行栈的布局示意图。

    var x,y;

    procedure p;

    var a;

    procedure q;

    var b;

    begin (q)

    b∶=10;

    end (q);

    procedure s;

    var c,d;

    procedure r;

    var e,f;

    begin (r)

    call q;

    end (r);

    begin (s)

    call r;

    end (s);

    begin (p)

    call s;

    盛威网(www.snwei.com)专业的计算机学习网站 1

    相关热词搜索:课后编译第三版编译原理第三版何炎祥编译原理第三版陈火旺