文档库 最新最全的文档下载
当前位置:文档库 › 程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案

【篇一:西北工业大学版(蒋立源第三版)编译原理课后

习题答案】

解:源程序是指以某种程序设计语言所编写的程序。目标程序是指

编译程序(或解释程序)将源程序处理加工而得的另一种语言(目

标语言)的程序。翻译程序是将某种语言翻译成另一种语言的程序

的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而

是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机

器指令并执行之,然后再读入下一条语句继续进行解释、执行,如

此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程

序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指

定的空间中,在用户需要时再执行之。即先翻译、后执行。

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}

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

(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打头的所有奇整数所组成的集合

(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}。

解:l(g)={1n10n11n20n2 ? 1nm0nm |n1,n2,?,nm≥0;且

n1,n2,?nm不全为零}该语言特点是:产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。

解:本文法构成的语言集为:

l(g)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特点是具有1p1n0n

或1n0n0q形式,进一步,可知其具有形式1n0mn,m≥0,且n+m0。解:可知,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?这样的句子。

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

stabtabctabc

stdctdctabc

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

11.解:

(1) stabtaasbtaacbtbaacbtbbaacbtbbaacb

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

全部的短语:

【篇二:编译原理_课后习题答案_杨明】

题1

1.1翻译程序:把用某种程序设计语言(源语言)编写的程序(源程序)翻译成与

之等价的另一种语言(目标语言)的程序(目标程序)。

编译程序:一种翻译程序,将高级语言编写的源程序翻译成等价的机器语言或

汇编语言的目标程序。

1.2词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成 1.3词法分析:根据语言的词法规则对构成源程序的符号进行扫描和分解,识别出

一个个的单词。

语法分析:根据语言的语法规则,把单词符号串分解成各类语法单位。

语义分析及中间代码生成:对语法分析识别出的语法单位分析其含义,并进行初步翻译。

代码优化:对中间代码进行加工变换,以产生更高效的目标代码。目标代码生成:将中间代码变换成特定机器上的绝对指令代码、可重定位的

指令代码或会变指令代码。

以上5个阶段依次执行。

习题2

2.1 (1)有穷非空的符号集合

(2)利用产生是规则a-v将a替换为v时与a的上下文无关。(3)略

(4)推导是把句型中的非终结符用一个产生是规则的右部开替代的

过程;直接推导是将非终结符的替代结果只用了一次产生式规则。(5)略

(6)一个句型的最左直接短语

(7)如果一个文法存在某个句子对应两棵不同的语法树或有两个不

同的最左

(右)推导,则称这个文法是二义的。

2.2(1)vn ={z,a,b} vt ={a,b,c,d,e}(2)abbcde,abbbcde是,acde不是。 2.3 (1)l[g]={d (2)

2.4 (1)

(2)a=aab=aac=aae=bae=bccae=bceae=cceae=eceae (3)

a=b=bcc=bcfag=bcfaabg=bcfaacg=bcfaaeg=bcfbaeg

=bcfcaeg=bcfeaeg=ccfeaeg=ecfeaeg

(3)中题目有错应为c?fcg|e

|n≥1,m≥0}

2.5 l[g]={a?b?c?|aab,n≥2}

(5)z→aaab|ab z→aabb|bb a→aaab|ab b→aabb|bb

2.7 一位数:z→2|4|6|8

两位数:z→aba→1|2|3|4|5|6|7|8|9b→0|2|4|6|8 三

z→acb

a→1|2|3|4|5|6|7|8|9

b→0|2|4|6|8

c→cd

d→0|1|2|3|4|5|6|7|8|9

2.8证明:e=e+t=e+t*f

短语:t*fe+t*f直接短语:t*f 句柄:t*f

2.9 语法树:短语:e*t , (e*t) , f↑(e*t) ,f ,e* f↑(e*t) 直接短语:e*t , ft ↑句柄:f 2.10(1)语法树(2)直接短语:a , z 句柄:z

2.11最左推导:z=zab=bab=b+aab=a+aab=(+)z*ab=(+)zab*ab

=(+)+ab*ab=(+)+aa*ab=(+)+a(*ab=(+)+a(*aa =(+)+a(*a( 直接短语:(,+ 句柄:(

2.12(1) s=ises=iises=iiies=iiiei s=is=iises=iiies=iiiei (2)

s=sas=csas=cfas=cfaf s=cs=csas=cfas=cfaf

(3) e=eoe=eoeoe=ioeoe=i+eoe=i+ioe=i+i-e=i+i-i

e=eoe=ioe=i+e=i+eoe=i+ioe=i+i-e=i+i-i

2.13 z→aabz|ccacd a→bab|aza|cccb→bab|czbc→cz|c

习题3

3.1(1)确定的有限自动机

(2)不确定的有限自动机

(3)正规集是一类特殊的单词集合,正规式是正规集的描述工具 3.2 (1) (1|2|3|4|5|6|7|8|9|0)*(1|3|5|7|9) (2) 11(0|1)*00

3.3 证明:b*(a|b)+={a,b,ab,ba,aa,bb…}(a|b)+=

{a,b,ab,ba,aa,bb…} 3.4(1)

(2)

d

d

d

d

3.5(1)(2)

(3)

*(01|10)

d

d

→ab

3.6(1)(01|10)

3.7(1)z aab b

3.8r=a(a|b

3.9 zbz

3.10 3.11

【篇三:编译原理课后习题答案】

/p> 程序设计语言:程序设计语言是遵守一定规范的、描述“计算”(computing)过程的形式语言。一般可以划分为低级语言和高级

语言两大类。低级语言是面向机器的语言,它是为特定的计算机系

统设计的语言,机器指令、汇编语言是低级语言。高级语言是与具

体计算机无关的“通用”语言,它更接近于人类的自然语言和数学表示,例如fortran、pascal、c等等我们熟悉的语言是高级语言。

语言处理程序:由于目前的计算机只能理解和执行机器语言,因此

必须有一个程序将用程序设计语言书写的程序等价(执行效果完全

一致)地转换为计算机能直接执行的形式,完成这一工作的程序称

为“语言处理程序”。它一般可分为解释程序和翻译程序两大类。

翻译程序:翻译程序(translator)是一种语言处理程序,它将输入的

用程序设计语言书写的程序(称为源程序)转换为等价的用另一种

语言书写的程序(称为目标程序)。若源语言是汇编语言,目标程

序是机器语言,称这种翻译程序为汇编程序。若源语言是高级语言,目标程序是低级语言,称这种翻译程序为编译程序。

解释程序:解释程序(interpreter)是一种语言处理程序,它对源

程序逐个语句地进行分析,根据每个语句的含义执行语句指定的功能。 2.解答:

编译程序的总框图见图1.2。其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果是单词符号。

语法分析器,对单词符号串进行语法分析(根据语法规则进行推导

或归约),识别出程序中的各类语法单位,最终判断输入串是否构

成语法上正确的“程序”。

语义分析及中间代码产生器,按照语义规则对语法分析器归约出

(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的

中间代码。编译程序可以根据不同的需要选择不同的中间代码形式,有的编译程序甚至没有中间代码形式,而直接生成目标代码。

优化器对中间代码进行优化处理。一般最初生成的中间代码执行效

率都比较低,因此要做中间代码的优化,其过程实际上是对中间代

码进行等价替换,使程序在执行时能更快,并占用更小的空间。

目标代码生成器把中间代码翻译成目标程序。中间代码一般是一种

机器无关的表示形式,只有把它再翻译成与机器硬件直接相关的机

器能识别的语言,即目标程序,才能在机器上运行。

表格管理模块保持一系列的表格,登记源程序的各类信息和编译各

阶段的进展状况。编译程序各个阶段所产生的中间结果都记录在表

格中,所需要的信息也大多从表格中获取,整个编译过程都在不断

地和表格打交道。

出错处理程序对出现在源程序中的错误进行处理。如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告

给用户。编译程序的各个阶段都有可能发现错误,出错处理程序要对发现的错误进行处理、记录,并反映给用户

chapter 2

1.试写出vt={0,1}上下述集合的正则表达式:

⑴所有以1开始和结束的符号串。

⑵恰含有3个1的所有符号所组成的集合。⑶集合{01,1}。

⑷所有以111结束的符号串。解答:⑴ 1(0|1)*1|1 ⑵ 0*10*10*10* ⑶ 01|1 ⑷ (0|1)*111

2.⑴试写出非负整数集的正则表达式。⑵试写出以非5数字为头的所有非负整数集的正则表达式。解答:⑴

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

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

3.试将2.8中所示的有限状态自动机m最小化。

分析:只能对确定的有限状态自动机进行最小化,本题的自动机已经是确定的。最小化采用状态分离法,具体做法如下:①进行0等价类的划分:q划分为qf与q-qf

②若已进行了k等价划分,即q已被划分成(q1,q2,?qn),再进行k+1划分,对qi(i=1?n),若q、q’?qi,使得对某一个

a?vt,?(q,a)?qj和?(q’,a)?ql,j≠l或?(q,a)存在而?(q’,a)不存在或反之。则将qi划分为二个子集qi1,qi2,使

q?qi1,q’ ?qi2。

③重复②直至无法进一步划分为止。对最后划分得到的状态子集中每一个子集,选择该子集中任何一个状态作为该状态子集的代表,然后修改原来的有限状态自动机的状态转换函数?,凡在?作用下转向某状态子集中任何一个状态的一律改成转向该状态子集的代表。若一个状态子集中某一状态是原来的开始状态,则该状态子集的代表就是新的有限状态自动机的开始状态。同理,若一个状态子集中的状态均是最终状态,则该状态子集的代表就是新的有限状态自动机的最终状态。④抹去可能存在的无用状态与不可及状态。

解答:此有限状态自动机的状态转换表如表3.1所示:

表2.1 m的状态转换表

由此看出:此有限状态自动机是确定的。最小化:

初始划分由2个子集组成,即:({a,b,c},{d,e,f,g})

集合{d,e,f,g}不需要进一步划分,考察子集{a,b,c}。由于 ?(b,a)

=d?{d,e,f,g},而?(a,a)=?(c,a)=b?{a,bc},因此q可进一步划分为:({a,c},{b},{d,e,f,g})。由于?(a,b)=c?{a,c},而?(c,b)=e?{d,e,f,g}。因此q可进一步划分为:

({a},{c},{b},{d,e,f,g})。

这时不能再划分了,得到的最小化的有限状态自动机如表3.2所示:表2.2 最小化的有限状态自动机

4.某程序语言的无(正负)符号常数可以用下面正则表达式r来表示:(d+e|d+.d+e|e|.d+e)((+|-)d|d)d*|d+|d*.d+ ⑴试把它转换成

确定性有限状态自动机。⑵把上述有限状态自动机最小化。

⑶在上述有限状态自动机中添加相应动作,取出无(正负)符号常数。分析:从正则表达式构造有限状态自动机可以分两步进行。

①画一条从结点x到结点y的有向弧,有向弧上标以正则表达式r。结点x为标以“-”的初始状态,结点y为标以“+”的最终状态。从

这一有向图出发反复应用图3.2所示的替代规则,直至所有有向弧都以vt中的符号或标记?为止。

图2.2 3条替代规则

i.将

图2.3 逐步消除法

图2.4替代规则的应用过程

应用子集法消除?弧:

得到的dfa m’的初始状态是a1,最终状态集由a2,a6,a7,a9组成。图2.5是m’的状态转换图,m’的状态转换表如表2.3所示。

表2.3 m’的状态转换表

图2.5 m’的状态转换图

⑵采用状态分离法:

初始时分成2个子集,即:({a1,a3,a4,a5,a8},{a2,a6,a7,a9})考察子

集{ a2,a6,a7,a9},它进一步可分成:({a6,a9},{a2},{a7})考察子集{ a1,a3,a4,a5,a8},它进一步分成:({a4},{a1},{a8},{a3,a5})不能

再进一步划分了,得到的最小化的有限状态自动机如图2.6所示:

图2.6 最小化的有限状态自动机

⑶由于数的表示和具体的机器有着内在联系,这里仅将此无(正负)符号常数的十进制数部分和指数部分分别存入2个工作单元。设立

下述工作单元:

此常数的十进制数部分number 此常数的指数部分 exp 小数点位数n 此常数指数部分正负号expsign

这4个工作单元进入有限状态自动机的模拟程序时被初始化为0。函数过程getchar,其功能是读入下一个字符到工作单元char中。

程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案 【篇一:西北工业大学版(蒋立源第三版)编译原理课后 习题答案】 解:源程序是指以某种程序设计语言所编写的程序。目标程序是指 编译程序(或解释程序)将源程序处理加工而得的另一种语言(目 标语言)的程序。翻译程序是将某种语言翻译成另一种语言的程序 的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而 是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机 器指令并执行之,然后再读入下一条语句继续进行解释、执行,如 此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程 序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指 定的空间中,在用户需要时再执行之。即先翻译、后执行。 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}

《C语言程序设计教程》(第三版)李凤霞 主编——第十章习题答案

习题十 一、单选题 1~5 DDDCC 6~10 AABDB 11~14 CADC 二、填空题 1、34 12 2、ARRAY a,b,c; 3、1 3 4、a c 5、(*b).day=? b->day=? 5、分析下列程序执行结果。 #include “stdio.h” main() {static struct s1 {char c[4],*s; s1={“abc”,”def”}; static struct s2 {char *cp;struct s1 ss1; }s2={“ghi”,{“jkl”,”mno”}}; printf(“%c%c\n”,s1.c[0],*s1.s); /*output ab */ printf(“%s%s\n”,s1.c,s1.s); /*output abcdef */ printf(“%s%s\n”,s2.cp,s2.ss1.s); /*output ghimno */ printf(“%s%s\n”,++s2.cp,++s2.ss1.s); /* output hino */ } 6、以下程序的功能是:读入一行字符(如:a,...,y,z),按输入时的逆序建立一个链式的结点序列,即 先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。 #define getnode(type)_________malloc(sizeof(type)) ( (struct node *)) main() {struct node {char info; struct node *link; }*top,*p; char c; top=NULL; while((c=getchar())______________) (!='\n') {p=getnode(struct node); p->info=c; p->link=top; top=p; } while(top) {_________________; (p=top) top=top->link; putchar(p->info); free(p);

编译原理及实现课后习题答案

编译原理及实现课后习题解答 2.1 设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5以及A+和A*. x0=(aaa)0=ε| x0|=0 xx=aaaaaa |xx|=6 x5=aaaaaaaaaaaaaaa | x5|=15 A+ =A1∪A2∪…. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…} A* = A0 ∪A1 ∪A2∪…. ∪ A n ∪…={ε,a,aa,aaa,aaaa,aaaaa…} 2.2 令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3 xy=abcb |xy|=4 xyz=abcbaab |xyz|=7 (xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=12 2.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语 法树。 S => SS* => Sa* => SS+a* => Sa+a* => aa+a*

2.4 已知文法G[Z]:Z∷=U0∣V1 、U∷=Z1∣1 、V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。 Z=>U0=>Z10=>U010=>1010 Z=>U0=>Z10=>V110=>0110 Z=>V1=>Z01=>U001=>1001 Z=>V1=>Z01=>V101=>0101 2.5 已知文法G[S]:S∷=AB A∷=aA︱εB∷=bBc︱bc , 写出该文法描述的语言。 A∷=aA︱ε描述的语言: {a n|n>=0} B∷=bBc︱bc描述的语言:{b n c n|n>=1} L(G[S])={a n b m c m|n>=0,m>=1} 2.6 已知文法E∷=T∣E+T∣E-T 、T∷=F∣T*F∣T/F 、F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。 开始符号:E V t={+, - , * , / ,(, ), i} V n={E , F , T}

C程序设计第三版课后习题答案全解

C程序设计第三版课后习题答案全解第一章介绍 本章主要介绍了C程序设计的基本概念和语法规则。C语言作为一 种通用的编程语言,被广泛应用于各个领域的软件开发中。在本章中,我们将回答C程序设计第三版书中第一章习题,并给出详细的解答。 1.1 选择题 1. A 2. B 3. C 4. A 5. D 1.2 填空题 1. 编译器 2. 源程序 3. 高级语言 4. 运行时错误 5. 堆栈 6. 弱类型检查

1.3 简答题 1. 运行时错误与逻辑错误之间的区别是什么? 运行时错误是程序在运行过程中出现的错误,例如除以零、数组 越界等。而逻辑错误是程序的设计或者实现上的错误,导致程序运行 的结果不符合预期。 2. 为什么C语言被广泛应用于系统编程? C语言具有高效、灵活和可移植等特点,使得它成为系统编程的 首选语言。C语言可以直接访问底层硬件,具有强大的指针操作能力,同时又具备高级语言的特点,可以进行模块化设计和复用。 3. C语言的运算符有哪些类别? C语言的运算符可以分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。 1.4 编程题 #include int main() { int a = 5, b = 10; int c = a + b; printf("Sum is %d", c); return 0;

} 第二章数据类型 本章主要讲解了C语言的数据类型及其使用方法。数据类型是C程序中非常重要的概念,不同的数据类型可以存储不同范围和类型的数据。在本章中,我们将回答C程序设计第三版书中第二章习题,并给出详细的解答。 2.1 选择题 1. D 2. A 3. C 4. B 5. A 2.2 填空题 1. char 2. 整型 3. 浮点型 4. double 5. 短整型 2.3 简答题

编译原理第一章练习和答案

例1设有文法G[S]: S →a|(T )| T →T,S|S (1) 试给出句子(a,a,a)的最左推导。 (2) 试给出句子(a,a,a)的分析树 (3) 试给出句子(a,a,a)的最右推导和最右推导的逆过程(即最左规约)的每一步的句柄。 【解】(1) (a,a,a)的最左推导 S=>(T) =>(T,S) =>( T,S,S) =>( S,S,S) =>(a,S,S) =>(a,a,S) =>(a,a,a) (2)(a,a,a)的分析树 S ( T ) T , S S a T , S a a (3) (a,a,a)最右推导 最左规约每一步的句柄 S=>(T) 句柄为:(T) =>(T,S) 句柄为:T,S =>(T,a) 句柄为:a =>(T,S,a) 句柄为:T,S =>(T,a,a) 句柄为:第一个a =>(S,a,a) 句柄为:S =>(a,a,a) 句柄为:第一个a 例2已知文法G[Z]: Z →0U|1V U →1Z|1 V →0Z|0 (1) 请写出此文法描述的只含有4个符号的全部句子。 (2) G [Z]产生的语言是什么? (3) 该文法在Chomsky 文法分类中属于几型文法? 【解】(1)0101,0110,1010, 1001 (2)分析G[Z]所推导出的句子的特点:由Z 开始的推导不外乎图1所示的四种情形。 图 1文法G[Z]可能的几种推导 Z 1 U Z U Z Z 1 V 0 Z Z 1 V 由Z 推导出10或01后就终止或进入递归,而Z 的每次递归将推导出相同的符号串:10或

01。所以G[Z]产生的语言L(G[Z])={x|x∈(10|01)+ } (3)该文法属于3型文法。 例3 已知文法G=({A,B,C},{a,b,c},P,A), P由以下产生式组成: A→abc A→aBbc Bb→bB Bc→Cbcc bC→Cb aC→aaB aC→aa 此文法所表示的语言是什么? 【解】 分析文法的规则: 每使用一次Bc→Cbcc,b、c的个数各增加一个; 每使用一次aC→aaB或aC→aa, a的个数就增加一个; 产生式Bb→bB、 bC→Cb起连接转换作用。 由于A是开始符号,由产生式A→abc推导得到终结符号串abc;由产生式A→aBbc推导得到B后,每当使用产生式Bb→bB、Bc→Cbcc、bC→Cb、aC→aaB就会递归调用B一次,所产生的a、b、c的个数分别增加一个,因此推导所得的终结符号串为abc、aabbcc、aaabbbccc、…所以文法描述的语言为{ a n b n c n|n>0}. 例4 构造描述语言L(G[S])={(n)n|n≥0} 的文法。 【解】(1)找出语言的一些典型句子: n=0 ε n=1 ( ) n=2 (()) … 所以, L(G[S])={ ε、( ) (())、((()))、…} (2)分析句子的特点: 只含有(和),(和)的个数相同且对称, 句子中所含的符号数可无限, 句子的个数可无限。 (3)凑规则:由 S→ε|() 得到ε|(),由 A→ (S) 得到 (()),(()) 是在()的两边再加上一对()得到,((()))是在(())的两边再加上一对()得到,…所以将上述产生式合并为S→(S) |ε。 (4)得到文法 G[S]: S→(S) |ε (5)检验:语言所有的句子均可由文法G[S]推导出来, 文法G[S]推导出来的所有终结符号串均为语言的句子. 例5 构造描述语言L(G[S])={a m b n |n>m>0} 的文法。 【解】找出语言的一些典型句子:abb、abbb、…、aabbb、aabbbb、…,语言的句子的特点是仅含有a、b, a在b的左边,b的个数大于a的个数,a的个数至少是1。 单独生成c k, k>1 可用产生式 C→c |Cc 句子中要求b的个数大于a的个数,所以得到文法:

编译原理教程课后习题答案

编译原理教程课后习题答案【篇一:编译原理教程课后习题答案——第一章】 完成下列选择题: (1) 构造编译程序应掌握 a. 源程序 b. 目标语言 c. 编译方法 d. 以上三项都是 (2) 编译程序绝大多数时间花在上。 a. 出错处理 b. 词法分析 c. 目标代码生成 d. 表格管理 (3) 编译程序是对。 a. 汇编程序的翻译 b. 高级语言程序的解释执行 c. 机器语言的执行 d. 高级语言的翻译 【解答】 (1) d (2) d(3) d 1.2 计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么? 【解答】计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,最后再读入下一条源程序语句,并解释执行。这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。 在编译方式下,高级语言程序的执行是分两步进行的:第一步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。因此,编译对源程序的处理是先翻译,后执行。 从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型好,便于程序调试。 这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。

1.3 请画出编译程序的总框图。如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题? 【解答】编译程序总框图如图1-1所示。 作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其 语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标 语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。总之,总设 计师在设计编译程序时必须估量系统功能要求、硬件设备及软件工 具等诸因素对编译程序构造的影响等。 程序 子程序或分程序 语句 表达式 数据引用 算符函数调用 【篇二:编译原理教程课后习题答案——第四章】 txt>4.1 完成下列选择题: (1) 四元式之间的联系是通过实现的。 a. 指示器 b. 临时变量 c. 符号表 d. 程序变量 (2) 间接三元式表示法的优点为。 a. 采用间接码表,便于优化处理 b. 节省存储空间,不便于表的修改 c. 便于优化处理,节省存储空间 d. 节省存储空间,不便于优化处理 (3) 表达式(┐a∨b)∧(c∨d)的逆波兰表示为 a. ┐ab∨∧cd∨ b. a┐b∨cd∨∧ c. ab∨┐cd∨∧ d. a┐b∨∧cd∨ (4) 有一语法制导翻译如下所示: s→bab{print″1″} a→(b {print″2″} a→a {print″3″} b→aa){print″4″} 若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章 第3 章文法和语言 第1 题 文法G=({A,B,S},{a,b,c},P,S)其中P 为: S→Ac|aB A→ab B→bc 写出L(G[S])的全部元素。 答案: L(G[S])={abc} 第2 题 文法G[N]为: N→D|ND D→0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? 答案: G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD.... =>NDDDD...D=>D......D 或者:允许0 开头的非负整数? 第3题 为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。答案: G[S]: S->S+D|S-D|D D->0|1|2|3|4|5|6|7|8|9 第4 题 已知文法G[Z]: Z→aZb|ab 写出L(G[Z])的全部元素。 盛威网(https://www.wendangku.net/doc/3019240063.html,)专业的计算机学习网站 1 《编译原理》课后习题答案第三章 答案: Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb L(G[Z])={anbn|n>=1} 第5 题 写一文法,使其语言是偶正整数的集合。要求: (1) 允许0 打头; (2)不允许0 打头。 答案: (1)允许0 开头的偶正整数集合的文法 E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8

(2)不允许0 开头的偶正整数集合的文法 E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→D|0 第6 题 已知文法G: <表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子> <因子>::=(<表达式>)|i 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)i+i*i 盛威网(https://www.wendangku.net/doc/3019240063.html,)专业的计算机学习网站 2 《编译原理》课后习题答案第三章 答案: <表达式> <表达式> + <项> <因子> <表达式> <表达式> + <项> <因子> i <项> <因子> i <项> <因子> i ( ) (5) <表达式> =><表达式>+<项> =><表达式>+<因子> =><表达式>+(<表达式>) =><表达式>+(<表达式>+<项>) =><表达式>+(<表达式>+<因子>) =><表达式>+(<表达式>+i) =><表达式>+(<项>+i) =><表达式>+(<因子>+i) =><表达式>+(i+i) =><项>+(i+i) =><因子>+(i+i)

习题参考答案-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

附录部分习题参考答案 第1章习题 1. 解释下列术语。 翻译程序,编译程序,解释程序,源程序,目标程序,遍,前端,后端 解答:略! 2. 高级语言程序有哪两种执行方式?阐述其主要异同点。描述编译方式执行程序的过程。 解答:略! 3. 在你所使用的C语言编译器中,观察程序1.1经过预处理、编译、汇编、链接四个过程 生成的中间结果。 解答:略! 4. 编译程序有哪些主要构成成分?各自的主要功能是什么? 解答:略! 5. 编译程序的构造需要掌握哪些原理和技术?编译程序构造工具的作用是什么? 解答:略! 6. 复习C语言,其字母表中有哪些符号?有哪些关键字、运算符和界符?标识符、整数和实数的构成规则是怎样的?各种语句和表达式的结构是什么样的? 解答:略! 7.编译技术可应用在哪些领域? 解答:略! 8. 你能解释在Java编译器中,输入某个符号后会提示一些单词、某些单词会变为不同的颜色是如何实现的吗?你能解释在Code Blocks中在输入{后,会自动添加},输入do 会自动添加while()是为什么吗? 解答:略! 第2章习题 1. 判断题,对下面的陈述,正确的在陈述后的括号内画√,否则画×。 (1) 有穷自动机识别的语言是正规语言。() (2) 若r1和r2是Σ上的正则表达式,则r1|r2也是。() (3) 设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。() (4) 令Σ={a,b},则所有以b开头的字构成的正规集的正则表达式为b*(a|b)*。() (5) 对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。()1解答:略! 2.从供选择的答案中,选出应填入下面叙述中?内的最确切的解答。 有穷自动机可用五元组(Q,V T,δ,q0,Q f)来描述,设有一有穷自动机M定义如下:V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为: δ (q0,0)=q1δ (q1,0)=q2 δ (q2,1)=q2δ (q2,0)=q2

编译原理第三版课后习题解答

第二章习题解答P36-6 (1) 是0~9组成的数字串 (2) 最左推导: 最右推导: P36-7 G(S) P36-8 文法: 最左推导: 最右推导:

语法树:/******************************** *****************/ P36-9 句子iiiei有两个语法树: P36-10 /************** ***************/ P36-11 /*************** L1:

L2: L3: L4: ***************/ 第三章习题参考答案 P64–7 (1) 1 1 0 1 1 确定化: 0 1 {X} φ {1,2,3} φ φ φ {1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4} {2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y} {2,3,5} {2,3,4,} X 1 2 3 4 Y 5 X Y

1 0 0 0 1 1 0 0 1 0 1 1 1 最小化: 1 0 0 1 0 0 1 0 1 1 1 P64–8 (1) (2) (3) 6 0 1 2 3 5 4 5 0 1 2 4 3

P64–12 (a) a a,b a 确定化: a b {0} {0,1} {1} {0,1} {0,1} {1} {1} {0} φ φ φ φ 给状态编号: a b 0 1 2 1 1 2 2 0 3 3 3 3 a a a b b b b a 最小化: 0 1 2 3 0 1

何钦铭-C语言程序设计(第3版)部分课后习题参考答案.docx

何钦铭《C语言程序设计》(第3版) 课后习题参考答案 习题1 1.对C 语言来说,下列标识符中哪些是合法的,哪些是不合法的? total, _debug, Large&Tall, Counter1, begin_ 解答:合法标识符:total, _debug, Counter1;不合法标识符:Large&Tall, begin_。 2.改写本章1.4 节中的流程图1.2,求1~100 中能被6 整除的所有整数的和。 解答: 3.改写本章1.4 节中的程序,求1~100 中能被6 整除的所有整数的和,并在编程环境中验证该程序的运行结果。 解答:

#include int main(void) { int i, sum = 0; for(i = 1; i <= 100; i++) if (i % 6 == 0) sum = sum + i; printf("%d", sum); return 0; } 4.对于给定的整数n(n>1),请设计一个流程图判别n 是否为一个素数(只能被1 和自己整除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构与循环结构。 解答:在流程图中,分支结构和循环结构如图1.2 所示,自上而下的2 个实线框和2 个虚线组成了顺序结构。

习题2 1.求整数均值:输入4 个整数,计算并输出这些整数的和与平均值,其中平均值精确到小数点后1 位。试编写相应程序。 解答: #include int main (void) { int num1, num2, num3, num4; double average, sum; scanf ("%d%d%d%d", & num1, & num2, & num3, & num4); sum = num1+ num2+ num3 + num4; average = sum / 4; printf ("Sum = %.0f; Average = %.1f\n", sum, average); return 0; } 2.阶梯电价:为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50 千瓦时(含50 千瓦时)以内的,电价为0.53 元/千瓦时;超过50 千瓦时的,超出部分的用电量,电价上调0.05 元/千瓦时。输入用户的月用电量(千瓦时),计算并输出该用户应支付的电费(元)。试编写相应程序。 解答: #include int main (void) { double cost, e; scanf ("%lf", &e); if(e < 0){ printf ("Invalid Value!\n"); } else{ if (e <= 50){ cost = 0.53 * e; } else{ cost = 0.53 * 50 + (e - 50) * 0.58; } printf ("cost = %.2f\n", cost); } return 0; }

《C语言程序设计教程》(第三版)课后习题参考答案

C语言程序设计课后习题参考答案 习题一 一、单项选择题 1、C 2、B 3、B 4、C 5、D 6、A 7、C 8、A 二、填空题 1、判断条件 2、面向过程编程 3、结构化 4、程序 5、面向对象方法 6、基本功能操作、控制结构 7、有穷性 8、直到型循环结构 9、算法 10、可读性 11、模块化 12、对问题的分解和模块的划分 习题二 一、单项选择题 1、B 2、D 3、C 4、B 5、A 6、A 7、B 8、C 二、填空题 1、主 2、C编译系统 3、结构化 4、程序 5、面向对象方法 6、.OBJ 7、库函数 8、直到型循环结构 习题三 一、单项选择题 1、D 2、B 3、A 4、C 5、A 6、D 7、B 8、D 9、B 10、C 11、A 12、D 13、C 14、B 15、C 16、A 17、B 18、C 19、C 20、D 21、A 22、D 23、D 24、D、A 25、D 26、A 二、填空题 1、补码 2、10^-138~10^138、15~16

3、实 4、单目运算符、自右向左 5、函数调用 6、65,89 习题四 一、单项选择题 1、D 2、C 3、D 4、A 5、D 6、B 7、A 8、C 9、B 10、B 二、填空题 1、两, ; 2、5.169000 3、-200 2500、i=-200,j=2500回车、i=-200回车j=2500回车 4、a=98,b=765.000000,c=4321.000000 5、100 25.81 1.89234、100,25.81,1.89234、100回车25.81回车1.89234回车 6、0,0,3 7、3 8、scanf(“%lf %lf %lf”,&a,&b,&c); 9、13 13.000000 13.000000 10、c=b-a;a=b+c; 习题五 一、单项选择题 1、B 2、D 3、C 4、B 5、B 6、D 7、A 8、B 9、D 二、填空题 1、1 、0 2、k!=0 3、if(x>4||x<-4)printf(“%d”,x); else printf(“error!”); 4、if(((x>=1&&x<=10)||(x>=200&&x<=210))&&(x%2!=0)) Printf(“%d”,x); 5、1 6、1 7、10! Right! 8、a=0 9、2,1 10、0

C语言程序设计(第3版)-参考答案 (9)

参考答案 第 9 章编译预处理 一、选择题 二、编程题 略。 习题 一、选择题 (1)编译预处理的工作是在( A )完成的。 A)编译前B)编译时C)编译后D)执行时(2)以下选项汇总,( D )不属于编译预处理。 A)宏定义B)文件包含C)条件编译D)连接(3)以下选项中,( C )是C语句。 A)#include B)#define PI 3.1415926 C)j++; D)a=3 (4)以下叙述中错误的是( D )。 A)在程序中凡是以“#”开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号结束 C)“#define MAX 3 ”是合法的预处理命令行 D)C程序对预处理命令行的处理是在程序执行的过程中进行的 (5)以下关于宏的叙述中正确的是( C )。 A)宏名必须用大写字母表示 B)宏定义必须位于源程序中所有语句之前C)宏展开没有数据类型限制D)宏调用比函数调用耗费时间(6)在宏定义#define PI 3.1415926中,用宏名代替一个( D )。 A)单精度数B)双精度数C)常量D)字符串(7)设有宏定义#define A B abcd,则宏展开时( A )。 A)宏名A用B abcd替换B)宏名A B用abcd替换 C)宏名A和宏名B都用abcd替换D)语法错误,无法替换 (8)若程序中有宏定义行#define N 100,则以下叙述中正确的是( B )。 A)宏定义行中定义了标识符N的值为整数100 B)对C源程序进行预处理时,用100替换标识符N C)对C源程序进行编译时,用100替换标识符N D)在运行时,用100替换标识符N (9)以下程序的运行结果是( B )。 #include #define M 5

编译原理期末考试题目及答案

一、填空题(每空2分,共20分) 1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。 2.编译器常用的语法分析方法有自底向上和自顶向下两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。 5.对编译程序而言,输入数据是源程序,输出结果是目标程序。 1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。 3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。 4.一个LL(1)分析程序需要用到一张分析表和符号栈。 5.后缀式abc-/所代表的表达式是a/(b-c)。 二、单项选择题(每小题2分,共20分) 1.词法分析器的输出结果是__C。 A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 2.正规式M 1 和M 2 等价是指__C_。 A.M1和M2的状态数相等 B.M1和M2的有向边条数相等 C.M1和M2所识别的语言集相等D.M1和M2状态数和有向边条数相等 3.文法G:S→xSx|y所识别的语言是_C____。 A.xyx B.(xyx)* C.xnyxn(n≥0) D.x*yx* 4.如果文法G是无二义的,则它的任何句子α_A____。 A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。 A.源程序B.目标语言C.编译方法D.以上三项都是 6.四元式之间的联系是通过__B___实现的。 A.指示器B.临时变量C.符号表D.程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为__B___。 A.┐AB∨∧CD∨B.A┐B∨CD∨∧ C.AB∨┐CD∨∧D.A┐B∨∧CD∨ 8. 优化可生成__D___的目标代码。 A.运行时间较短 B.占用存储空间较小 C.运行时间短但占用内存空间大D.运行时间短且占用存储空间小 9.下列___C___优化方法不是针对循环优化进行的。 A. 强度削弱B.删除归纳变量C.删除多余运算D.代码外提 10.编译程序使用_B_区别标识符的作用域。 A. 说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D. 标识符的行号 三、判断题(对的打√,错的打×,每小题1分,共10分) 2.一个有限状态自动机中,有且仅有一个唯一的终态。x 3.一个算符优先文法的每个非终结符号间都也可能存在优先关系。X

编译原理答案(前三章)

编译原理答案(前三章)

第 1 章引论 第 1 题 解释下列术语: 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语 言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与 目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段, 即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语 义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和 错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表 中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代

编译原理课后习题答案

第一章 1.典型的编译程序在逻辑功能上由哪几部分组成? 答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些? 答:主要有:转换法、移植法、自展法、自动生成法。 3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式? 答:编译法、解释法。 4. 编译方式和解释方式的根本区别是什么? 答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快; 解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

第二章 1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关 系如何? 答:1)0型文法、1型文法、2型文法、3型文法。 2) 2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。 答: Z→SME | B S→1|2|3|4|5|6|7|8|9 M→ε | D | MD D→0|S B→2|4|6|8 E→0|B 3. 设文法G为: N→ D|ND D→ 0|1|2|3|4|5|6|7|8|9 请给出句子123、301和75431的最右推导和最左推导。 答:N⇒ND⇒N3⇒ND3⇒N23⇒D23⇒123 N⇒ND⇒NDD⇒DDD⇒1DD⇒12D⇒123 N⇒ND⇒N1⇒ND1⇒N01⇒D01⇒301 N⇒ND⇒NDD⇒DDD⇒3DD⇒30D⇒301 N⇒ND⇒N1⇒ND1⇒N31⇒ND31⇒N431⇒ND431⇒N5431⇒D5431⇒75431 N⇒ND⇒NDD⇒NDDD⇒NDDDD⇒DDDDD⇒7DDDD⇒75DDD⇒754DD⇒7543D⇒75431 4. 证明文法S→iSeS|iS| i是二义性文法。 答:对于句型iiSeS存在两个不同的最左推导: S⇒iSeS⇒iiSes S⇒iS⇒iiSeS 所以该文法是二义性文法。 5. 给出描述下面语言的上下文无关文法。 (1)L1={a n b n c i |n>=1,i>=0 } (2)L2={a i b j|j>=i>=1} (3)L3={a n b m c m d n |m,n>=0} 答: (1)S→AB A→aAb | ab B→cB | ε (2)S→ASb |ab

大学教材课后题答案网站

大学教材部分答案参考网站 (供大家学习) 1、C 程序设计第三版 (谭浩强著) 清华大学出版社课后答案 2、复变函数与积分变换第四版 (张元林西安交大著) 高等教育出版社课后答案 C 语言程序设计教程第三版(谭浩强张基温著) 高等教育出版社课后答案[khdaw_lxywyl] C 语言程序设计教程第二版 (谭浩强张基温著) 高等教育出版社课后答案【khdaw】 离散数学(第三版)(耿素云屈婉玲张立昂著) 清华大学出版社课后答案【khdaw_ricardo】 耿国华数据结构课后答案 严蔚敏《数据结构(c 语言版)习题集》答案 谭浩强C++程序设计习题答案 《微机原理与接口技术》清华(冯博琴吴宁)版课后答案 数据库系统概论 (王珊萨师煊著) 清华大学出版社课后答案 C 程序设计第二版 (谭浩强著) 课后答案 清华大学《数据结构》习题+课后答案 《数学物理方法》(梁昆淼第二版)习题解答

谢希仁版《计算机网络教程》课后答案 《计算机网络第四版》答案【khdaw】 数据结构习题集(C 版)答案 计算机操作系统 (汤子赢著) 西安电子科技大学课后答案 离散数学 (左孝凌著) 上海科学技术文献出版社课后答案【khdaw】 近世代数基础 (刘绍学著) 高等教育出版社课后答案【khdaw_lxywyl】 计算机组成原理习题&答案唐朔飞高等教育出版社【khdaw】 计算机网络(第4 版)清华(Andrew S.Tanenbaum)版答案(中文版)【khdaw】 《常微分方程》王高雄高等教育出版社课后答案【khdaw_lxywyl】 数学分析(陈传璋版)习题答案下载 计算机算法设计与分析(第 3 版) (王晓东著) 电子工业出版社课后答案【khdaw_ricardo】 《计算机系统结构》清华第2 版习题解答(chm)【khdaw】 《编译原理》课后习题答案 《计算机网络》(第三版) (Andrew S.Tanenbaum 著) 清华大学出版社课后答案

相关文档
相关文档 最新文档