没有合适的资源?快使用搜索试试~ 我知道了~
第二版编译原理课后答案
需积分: 20 13 下载量 68 浏览量
2008-12-07
09:51:16
上传
评论
收藏 1.61MB DOC 举报
温馨提示
试读
36页
编译原理课后答案里面很全的啊看看吧 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
资源推荐
资源详情
资源评论
第 1 章
1.(1) × (2) √ (3) × (4) × (5) × (6) √
第 2 章
1.(1) √(2) √ (3) × (4) × (5) × (6) ×
2.(1)终结符:0,1,2,3,4,5,6,7,8,9,10
非终结符:N,S,E,D
(2)
①N SE S10 D10 110
②N SE S0 SD0 S10 D10 110
(3)偶数的集合
3.(1)句子 abab 的两个相应的最右推导:
S aSbS aSbaSbS aSbaSb aSbab abab
S aSbS aSb abSaSb abSab abab
(2)此文法产生的语言是:所有 a 的个数与 b 的个数相等的由 a 和 b 组成的字符串。
4.能被 5 整除的数从形式上看,是以 0,5 结尾的数字串。题目要求不以 0 开头,注意 0
不是该语言的句子。
所求文法 G[S]:
S→MF|5
F→5|0
N→1|2|3|4|5|6|7|8|9
D→N|0
M→MD|N
其中,S 代表能被 5 整除且不以 0 开头的无符号整数;
F 代表可以出现在个位上的数字;
D 代表所有数字;
110 最右推导的语法树
1
N
S
E
D
1
0
1
N
S
E
S
D
0
1
D
N 代表所有非零数字;
M 代表不以零开头的数字串。
5.(1)令 S 为开始符号,产生的 w 中 a 的个数恰好比 b 多一个,令 E 为一个非终结符号,
产生含相同个数的 a 和 b 的所有串,则产生式如下:
S→ aE|Ea|bSS|SbS|SSb
E→ aEbE|bEaE|ε
(2)设文法开始符号为 S,产生的 w 中满足|a|≤|b|≤2|a|。因此,可想到 S 有如下的产生式
(其中 B 产生 1 到 2 个 b):
S → aSBS|BSaS|ε
B → b|bb
(3)
S→HMT|HT|T
H→1|2|3|4|5|6|7|8|9
T→ 1|3|5|7|9
M→MN|N
N→0|H
其中,H 代表奇数头,T 代表奇数尾,M 代表整数,N 代表数字
6.(1)1 型(2)2 型(3)3 型
7.正确的程序为:
var a,b,c;
begin
read(a,b);
c:=100;
if a>0 then
begin
b:=b+1;
write(b)
end;
write(a,b,c);
end.
8.(1) 扩充条件语句的语法图为:
EBNF 的语法描述为:〈条件语句〉→if〈条件〉then〈语句〉[else〈语句〉]
(2) 扩充 repeat 语句的语法图为:
EBNF 的语法描述为:〈repeat 循环语句〉→ repeat〈语句〉{;〈语句〉 }until〈条
件〉
第 3 章
1.(1) √ (2) √ (3) × (4) × (5) √ (6) √ (7) × (8) √ (9) × (10) ×
2.注意 正规式不唯一
(1)(0|1)*01 (2)1*01* (3)(11)*
(4)(0*10*10*)* (5)(0|1)*01(0|1)* (6)1*0*
3.(1)必须以 x 开头和 x 结尾的串
(2)每个 y 至少有一个 x 跟在后边的串
(3)所有含两个相继的 x 或两个相继的 y 的串
4.
标记为others的边是指字符集中未被别的边指定的任意其它字符。
分析:这个DFA的状态数及含义并不难确定,见下面的五个状态说明。
状态1:注释开始状态。
状态2:进入注释体前的中间状态。
状态3:表明目前正在注释体中的状态。
状态4:离开注释前的中间状态。
状态5:注释结束状态,即接受状态。
在这个DFA中,最容易忽略的是状态4到本身的’*’转换。这个边的含义是:在离开注释
前的中间状态,若下一个字符是’*’,那么把刚才读过的’*’看成是注释中的一个字符,而把
这下一个字符看成可能是结束注释的第一个字符。若没有这个边,那么象
/**** This is a comment ****/
这样的注释就被拒绝。
另外,上面的状态转换图并不完整。例如,对于状态1,没有指明遇到其它字符怎么办。
要把状态转换图画完整,还需引入一个死状态6,.进入这个状态就再也出不去了。因为它
不是接受状态,因此进入这个状态的串肯定不被接受。完整的状态转换图见下图,其中all
表示任意字符。在能够说清问题时,通常我们省略死状态和所有到它的边。
5.先写出渡河的方法,串中对象顺序为人来回渡河时所运的货物的顺序:
1 2 4
5
3
others
others
/
* *
*
/
1 2 4
5
3
others
others
/
* *
*
/
6
others
others
all
all
①羊空菜羊狼空羊
②羊空狼羊菜空羊
现给出一个 NFA:M=(Σ,Q,0,{9},f)
其中 Σ={羊,空,菜,狼}
Q={0,1,2,3,4,5,6,7,8,9}
转换函数
f(0,羊)=1, f(1,空)=2, f(2,菜)=3, f(2,狼)=5, f(3,羊)=4
f(5,羊)=6, f(4,狼)=7, f(6,菜)=7, f(7,空)=8, f(8,羊)=9
6.这个 DFA 和无符号数的 DFA 有类似的地方。
首先考虑 device:和.extension 全都出现的情况。(即:device:name.extension)这时的
DFA 比较容易构造。
然后考虑缺省情况:
(1) 因为.extension 可缺省(即:device:name),因此把状态 4 也作为接受状
态。
(2) 因为 name 和 device 一样,都是字母序列,所以在 device:缺省时,把到状
态 2 为止得到的字母序列看成是 name。由于 device:和.extension 都可缺省
(即: name),因此把状态 2 也作为接受状态。
(3) (即:name.extension)因为 name 和 device 一样,都是字母序列,因此在
device:缺省时,把到状态 2 为止得到的字母序列看成是 name,所以从状
态 2 画一条转换边到状态 5,标记为’.’。
7
.
文
法
所
对
应
l l
1 2 3 4 5
6
l : l l.
l
文件名的三部分都出现的 DFA
1 3 5
2 4 6
l :
l
l
.
l
.
l l
接受文件名的 DFA
的正规式为:
S=0A|1B
=0(1S|1)| 1(0S|0)
=0(1S|1)|1(0s!0) 分配率
=01S|01|10S|10 交换率
=01S|10S|01|10 分配率
=(01|10)S|(01|10)
=(01|10)*(01|10)
8.该正规式所表示的语言为:
L(G)={X|X 以三个 0 结尾的二进制数字串}
由于除了长度可以无限、最后是三个 0 外,语言的句子没有其他的限制,因此在构造正则
文法时,将句子分成(0|1)*和 000 两部分考虑。(0|1)*可以通过递归实现,000 则只需要逐个
生产即可。所以构造其等价的右线性文法如下:
G[S]:
S→0S|1S|0A
A→0B
B→0
9.(1)根据题意,得到相应的正规式:0(0|1)*1
(2)构造相应的 NFA 如下图所示:
(3)NFA 确定化后的 DFA 如下图所示:
(4)此 DFA 不存在多余状态和等价状态,是最小化的 DFA。
10.(1)L(G)={X|X 是至少含有两个连续 1 的二进制数字串}
(2)正规式为:(0|1)*11(0|1)*
正规式到正规文法的转换过程为:
① S→(0|1)*11(0|1)*
② S→(0|1)S S→11(0|1)*
③ S→0S|1S S→1A A→1(0|1)*
Z
S
1
0
A
10
0
1
2
1
0
3
1
0
剩余35页未读,继续阅读
资源评论
lijian19830505
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功