编译原理一些习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章形式语言基础
2.2 设有文法G[N]: N -> D | ND
D -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
(1)G[N]定义的语言是什么?
(2)给出句子0123和268的最左推导和最右推导。
解答:
(1)L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={α| α为可带前导0的正整数}
(2)
0123的最左推导:N ⇒ ND ⇒ NDD ⇒ NDDD ⇒ DDDD ⇒ 0DDD ⇒ 01DD ⇒ 012D ⇒ 0123 0123的最右推导:N ⇒ ND ⇒ N3 ⇒ ND3 ⇒ N23 ⇒ ND23 ⇒ N123 ⇒ D123 ⇒ 0123
268的最左推导:N ⇒ ND ⇒ NDD ⇒ DDD ⇒ 2DDD ⇒ 26D ⇒ 268
268的最右推导:N ⇒ ND ⇒ N8 ⇒ ND8 ⇒ N68 ⇒ D68 ⇒ 268
2.4 写一个文法,使其语言是奇数的集合,且每个奇数不以0开头。
解答:
首先分析题意,本题是希望构造一个文法,由它产生的句子是奇数,并且不以0开头,也就是说它的每个句子都是以1、3、5、7、9中的某个数结尾。如果数字只有一位,则1、3、5、7、9就满足要求,如果有多位,则要求第1位不能是0,而中间有多少位,每位是什么数字(必须是数字)则没什么要求,因此,我们可以把这个文法分3部分来完成。分别用3个非终结符来产生句子的第1位、中间部分和最后一位。引入几个非终结符,其中,一个用作产生句子的开头,可以是1-9之间的数,不包括0,一个用来产生句子的结尾,为奇数,另一个则用来产生以非0整数开头后面跟任意多个数字的数字串,进行分解之后,这个文法就很好写了。
N -> 1 | 3 | 5 | 7 | 9 | BN
B -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B0
2.7 下面文法生成的语言是什么?
G1:
S->AB
A->aA| εB->bc|bBc G2:
S->aA|a A->aS
解答:
B ⇒ bc
B ⇒ bBc⇒ bbcc
B ⇒ bBc⇒ bbBcc ⇒ bbbccc
……
A ⇒ε
A ⇒ aA ⇒ a
A ⇒ aA ⇒ aaA ⇒ aa
……
∴S ⇒ AB ⇒ a m b n c n , 其中m≥0,n≥1即L(G1)={ a m b n c n | m≥0,n≥1} S ⇒ a
S ⇒ aA ⇒ aaS ⇒ aaa
S ⇒ aA ⇒ aaS ⇒ aaaA ⇒aaaaS ⇒ aaaaa ……
∴S ⇒ a2n+1 , 其中n≥0
即L(G2)={ a2n+1 | n≥0}
2.11 已知文法G[S]: S->(AS)|(b)
A->(SaA)|(a)
请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。
解答:
S
( A S ) ( a )( b ) 因为S 不能⇒ (a),
所以(a)不是文法的句型。
没有短语、直接短语和句柄。
S
( A S )
( A S ) ( S a A ) ( b ) 因为S ⇒ (AS) ⇒(A(AS)) ⇒ (A((SaA)S)) ⇒(A((SaA)(b))),
所以(A((SaA)(b)))是文法的句型。
短语:(A((SaA)(b))),((SaA)(b)),(SaA),(b)
直接短语:(SaA),(b)
句柄:(SaA)
第3章自动机基础
3.1 构造下列正规式相应的DFA。
(2) (a|b)*(aa|bb)(a|b)*
解答:
NFA:
NFA化为DFA:
a b
{1} {1,3} {1,4} + {1}
{1,3} {1,2,3} {1,4} {2}
{1,4} {1,3} {1,2,4} {3}
{1,2,3} {1,2,3} {1,2,4} - {4}
{1,2,4} {1,2,3} {1,2,4} - {5}
a
+ a a
③ b -
b
最小化DFA:初始划分:{1,2,3},{4,5} 最终划分:{1},{2},{3},{4,5} 这样,状态4与状态5等价,将4和5合并:
+
b
3.2 将下图中的(a)和(b)分别确定化和最小化。
解答:
(a) NFA 化为DFA : a b {0} {0,1} {1}
+-{1} {0,1} {0,1} {1} - {2} {1} {0}
{3}
a
±① b 最小化DFA :{1,2},{3}
(b) 本身为DFA ,最小化DFA : {0,1},{2,3,4,5} {0,1},{2,4},{3,5}
3.4 给出文法G[S],构造相应最小的DFA 。 S->aS|bA|b A->aS
解: 原文法等价于:S->aS|bA|bB A->aS B->ε NFA :令 ①-S, ②-A, ③-B
③-
NFA 化为DFA :
a b
{1} {1} {2,3} +{1} {2,3} {1} - {2}
(a)
-
(b)
a a