习题第3章文法和语言参考答案
- 格式:doc
- 大小:68.50 KB
- 文档页数:5
第三章1、L(G[S])={ abc }2、L(G[N])={ n位整数或空字符串| n>0 }3、G[E]:E—>E+D | E-D | DD—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 94、L(G[Z])={ a n b n | n>0 }5、(1) 考虑不包括“0”的情况G[S]:S—>0S | ABC | 2 | 4| 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8考虑包括“0”的情况:G[S]:S—>AB | CB—>AB | CA—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>0 | 2 | 4 | 6 | 8(2)方法1:G[S]:S—> ABC | 2 | 4 | 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8方法2:G[S]:S—>AB | CB—> AB | 0B | C | 0A—> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>2 | 4 | 6 | 86、设<表达式>为E,<项>为T,<因子>为F,注:推导过程不能省略,以下均为最左推导(1) E => T => F => i(4) E => E+T => T+T => T*F+T => F*F+T => i*F+T => i*i+T => i*i+F => i*i+i(6) E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*I7、<表达式><表达式>*<表达式><表达式>+<表达式>i i i<表达式><表达式>+<表达式>i <表达式>*<表达式>i i8、是有二义性的,因为句子abc 有两棵语法树(或称有两个最左推导或有两个最右推导)最左推导1:S => Ac => abc最左推导2:S => aB => abc9、(1)(2) 该文法描述了变量a 和运算符+、*组成的逆波兰表达式10、(1) 该文法描述了各种成对圆括号的语法结构(2) 是有二义性的,因为该文法的句子()()存在两种不同的最左推导:最左推导1:S => S(S)S => (S)S => ()S => ()S(S)S => ()(S)S => ()()S => ()()最左推导2:S => S(S)S => S(S)S(S)S => (S)S(S)S => ()S(S)S => ()(S)S => ()()S => ()()11、(1) 因为从文法的开始符E 出发可推导出E+T*F ,推导过程如下:E => E+T => E+T*F ,所以E+T*F 是句型。
Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
第三章语法分析3.1 完成下列选择题:(1) 文法G:S→xSx|y所识别的语言是。
a. xyxb. (xyx)*c. xnyxn(n≥0)d. x*yx*(2) 如果文法G是无二义的,则它的任何句子α。
a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同(3) 采用自上而下分析,必须。
a. 消除左递 a. 必有ac归b. 消除右递归c. 消除回溯d. 提取公共左因子(4) 设a、b、c是文法的终结符,且满足优先关系ab和bc,则。
b. 必有cac. 必有bad. a~c都不一定成立(5) 在规范归约中,用来刻画可归约串。
a. 直接短语b. 句柄c. 最左素短语d. 素短语(6) 若a为终结符,则A→α·aβ为项目。
a. 归约b. 移进c. 接受d. 待约(7) 若项目集Ik含有A→α·,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A→α·”动作的一定是。
a. LALR文法b. LR(0)文法c. LR(1)文法d. SLR(1)文法(8) 同心集合并有可能产生新的冲突。
a. 归约b. “移进”/“移进”c.“移进”/“归约”d. “归约”/“归约”【解答】(1) c (2) a (3) c (4) d (5) b (6) b (7) d (8) d3.2 令文法G[N]为G[N]: N→D|NDD→0|1|2|3|4|5|6|7|8|9(1) G[N]的语言L(G[N])是什么?(2) 给出句子0127、34和568的最左推导和最右推导。
【解答】(1) G[N]的语言L(G[N])是非负整数。
(2) 最左推导:NNDNDDNDDDDDDD0DDD01DD012D0127NNDDD3D34NNDNDDDDD5DD56D568最右推导:NNDN7ND7N27ND27N127D1270127NNDN4D434NNDN8ND8N68D685683.3 已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。
《编译原理》课后习题答案第三章第3章文法和语言第1《编译原理》课后习题答案第三章第3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[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|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
盛威网(/doc/dc3359286.html,)专业的计算机学习网站 1《编译原理》课后习题答案第三章答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1}第5 题写一文法,使其语言是偶正整数的集合。
要求:(1) 允许0 打头;(2)不允许0 打头。
答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
练习1. 文法和语言1. 文法: Z → U0 | V1 U → Z1 | 1 V → Z0 | 0(1) 请写出全部由此文法描述的只含有四个符号的句子. (2) 该文法是 Chomsky 几型文法? Answer :(1) 1010, 0110, 1001, 0101 (2) 3型文法2. 给定前缀表示的表达式文法 G : (1) E → -EE (2) E → -E (3) E → a (4) E → b (5) E → c试问 --a-bc 是否 L(G) 的句子?若是,请给出该句子所有可能的分析树;若不是,请说明理由.Answer : --a-bc 是L(G)的句子。
所有可能的分析树如下。
(1) (2) (3)E -E E-E c-E b E -EE -E -E EE--E Ec-E E3. 考虑文法:S → ( L ) | a L → L, S | S写出句型 ( a , ( a , a ) ) 的最左推导和最右推导。
Answer :(1) 最左推导:S lm=>(L)lm=>(L,S)lm=>(S,S)lm=>(a,S)lm=>(a,(L))lm=>(a,(L,S))lm=>(a,(S,S))lm=>(a,(a,S))lm=>(a,(a,a))(2) 最右推导:S rm=>(L)rm=>(L,S)rm=>(L,(L))rm=>(L,(L,S))rm=>(L,(L,a))rm=>(L,(S,a))rm=>(L,(a,a))rm=>(S,(a,a))rm=>(a,(a,a))4. 考虑文法:S → aSbS | bSaS |ε写出句型 abab 的两个最左推导。
Answer :(1) S lm=>aSbS lm=> abSaSbS lm=> abaSbS lm=> ababS lm=> abab(2) S lm=>aSbS lm=> abS lm=> abaSbS lm=> ababS lm=> abab5. 文法 G : P → PaP | PbP | cP | Pe | f证明文法 G 是二义文法. ** 通过证明句型 f b f b f 存在两棵分析树. Answer : 因为存在两个分析树,所以是二义文法。
《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成各部分的主要功能是什么并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
第三章文法和语言课后习题参考答案第三章文法和语言课后习题参考答案1.l(g)={abc}2.l(g[n])是无符号整数。
3.g3:e→d+e|d-e|dD→0|1|2|3|4|5|6|7|8|94. l(g[z])={anbn | n>0}5.写一文法,使其语言是偶正整数的集合要求:(1)允许0前导(2)不允许0前导解决方案:(1)g[s]=({s,p,d,n},{0,1,2,…,9},p,s)p:s?pd|dp->np|nD0|2|4|6|8n->0|1|2|3|4|5|6|7|8|9(2) g[s]=({s,p,r,d,n,q},{0,1,2,…,9},p,s)p:spd | p0 | dp->nr | nr->qr | qd?2|4|6|8n->1|2|3|4|5|6|7|8|9q->0|1|2|3|4|5|6|7|8|96.已知语法G:::=|+|-::=|*|/::=()|i。
尝试给出以下表达式和语法树的派生。
(1)i;(2)(i)(3)i*i;(4)i*i+i;(5)i+(i+i);(6)i+i*i。
解决方案:(1)=>=>=>i(2) =>=>=>=>()=>()=>()=>(i)(3)=>=>=>*=>*=>i*i (4)=>+=>+=>*+=>*+=>i*i+i=w(5)=>+=>+=>+=>i+()=>i+(+)=>i+(+)=>i+(+)=>i+(i+i)(6)=>+=>+=>+=>i+ =>i+*=>i+*=>i+i*i一语法树见下图:(1)二,(2)(i)()我(4)i*i+i+*我i我(5)i+(i+i)+我()+我(6)i+i*i+我*i我(3)i*i*我i我7.为句子i+i*i构造两棵语法树,从而证明下述文法g[]是二义的。
习题第3章文法和语言参考答案
1.写一文法,使其语言是偶整数集合。
解:允许以0打头
G:N→+A|-A|A
A→DA|E
D→0|1|2|3|4|5|6|7|8|9
E→0|2|4|6|8
2.写一文法,使其语言是偶整数集合,但不允许由0打头。
解:0除外
G:N→+A|-A|A
A→CB|E
B→DB|E
C→1|2|3|4|5|6|7|8|9
D→0|1|2|3|4|5|6|7|8|9
E→0|2|4|6|8
3.写一文法G,使得L(G) = { a m b n| m≥0, n≥1 }
解:G1:S→aS|T或 G2:S→aS|bT 或 G3:S→aS|Sb|b
T→bT|b T→bT|ε
4.写一文法G,使得L(G) = { a m b n c p| m≥0, n≥0, p≥0 }
解:G1:S→ABC或G2:S→Sc|T 或 G3:A→aA|bB|cC|εA→aA|ε T→Tb|R B→bB|cC|ε
B→bB|ε R→Ra|ε C→cC|ε
C→cC|ε
5.设有文法G1:S → AaB
S → a
A → AB
A → b
A →ε
B → bB
B →ε
写一文法G2,使得L(G1) = L(G2),并且G2不含空规则。
解:G2:S→BaB|Ba|aB|a 或G2:S→bB|Sb|a
B→bB|b
6.写一文法,使其语言是十位数不是0的整数集合。
解:G:N→SA
S→+|-|ε
A→D|CD|BCD
B→B D|C
C→1|2|3|4|5|6|7|8|9
D→0|1|2|3|4|5|6|7|8|9
7.写出以下文法G所定义的语言L(G)。
G:S → SaS
S → b
S → d
解:L(G)={(xa)n x|n≥0, x∈{b,d}}
={((b|d)a)n(b|d)|n≥0}
={(b|d)(a(b|d))n|n≥0}
8.设有文法G1:S → Sab | c | d
将其改写成以下形式的文法G2,每条规则形如:
V → xW
或V → y
其中V和W为非终结符,x和y为终结符串。
解:G:S→cT|dT|c|d
T→abT|ab
9.设有文法G1:S → abcdB
B → efgB
B → b
将其改写成以下形式的3型文法G2,每条规则形如:
V → pW
或V → q
其中V和W为非终结符,p和q为终结符。
解:G:S→aA
A→bB
B→cC
C→dD
D→eE|b
E→fF
F→gD
10.设有文法G1:S → aBBaS
B → bbAA
A → aAbBc
A → a
将其改写成以下形式的文法G2,每条规则形如:
V → pX1X2…X n
或V → q
其中V和X i为非终结符,p和q为终结符。
解:G:S→aBBPS
P→a
B→bQAA
Q→b
A→aAQBR|a
R→c
11.已知C语言的下标变量形如:
a[E][E]…[E]
按第10题要求的文法G2的形式写出下标变量文法。
解:G:S→aA
A→[EB
B→]A
B→]
12.设有文法G1:S → aBcA
S → aBdB
A → bA
A → aB
B → Bd
B → a
将其改写成文法G2,使得对每个非终结符均无两个不同规则能导出相同的终结开头符。
解:G2:S→aB|P
P→cA|dB
A→bQ
Q→A|B
B→aD
D→dD|ε
13.设有文法G:S → aBbD
B → bSD
B → aDa
B → bb
D → aBD
证明L(G)为空语言。
解:∵D的唯一规则是无穷递归的,也就是无用规则
又∵开始符S的唯一规则含有D,也是无用规则
∴文法G的规则全是无用规则
故L(G)为空语言。
14.设有文法G1:S → 0Y | 1X | 1Y | 1S |ε
X → 1Y | 1S |ε
Y → 1Z
Z → 1S |ε
将其改写成不含空规则的文法G2,且L(G1) = L(G2)∪{ε}。
解:G2:S→0Y|1X|1Y|1S|1
X→1Y|1S|1
Y→1Z|1
Z→1S|1
15.设有文法 G :E → E+T | T T → T*F | F F → i | (E)
(1)构造句子(i*i+i)*i 的语法树,并写出该句子的规范推导过程;
(2)构造句型F*(T+i)+i 的语法树,并求出该句型的所有短语、简单短语和句柄。
解:(1) 句子(i*i+i)*i 的语法树 规范推导过程:
E =〉T =〉T*F
=〉T*i
=〉F*i
=〉(E)*i
=〉(E+T)*i
=〉(E+F)*i
=〉(E+i)*i
=〉(T+i)*i
=〉(T*F+i)*i
=〉(T*i+i)*i
=〉(F*i+i)*i
=〉(i*i+i)*i
(2) 句型F*(T+i)+i 的语法树 短语 简单短语 句柄
F*(T+i)+i F*(T+i)
F F F
(T+i)
T+i
T T
i i i i
E
* T F E ( ) F T i + E T T * T F F i
i F i E
+ E T *
T F T F T
E ( )
F i F
+ E T i
16.构造一个二义性文法。
解:二义性文法G :S→aS|Sa|a
∵句子aa 存在两棵语法树:
∴G 是二义性文法。
17.教材3.14题
解:(1) G1:S→CD (2) G2:S→1S0|A (3) G3:S→0S0|aSa|a C→aCb|ε A→0A1|ε
D→aDb|ε 18.教材3.16题
解:(1) G1:A→aA|ε (2) G2:A→aA|aB (3) G3:A→aA|bB|cC|ε B→bB|b B→bB|cC|ε C→cC|ε
S
a
S
a
S
S。