编译原理课后答案
- 格式:doc
- 大小:829.00 KB
- 文档页数:32
第二章 高级语言及其语法描述
4.令+、*和↑代表加,乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑2*1↑2的值:
(1) 优先顺序(从高至低)为+,*和↑,同级优先采用左结合。
(2) 优先顺序为↑,+,*,同级优先采用右结合。
解:(1)1+1*2↑2*1↑2=2*2↑1*1↑2=4↑1↑2=4↑2=16
(2)1+1*2↑2*1↑2=1+1*2*1=2*2*1=2*2=4
6.令文法G6为 N→D|ND
D→0|1|2|3|4|5|6|7|8|9
(1) G6 的语言L(G6)是什么?
(2) 给出句子0127、34和568的最左推导和最右推导。
解:(1)L(G6)={a|a∈∑+,∑=﹛0,1,2,3,4,5,6,7,8,9}}
(2)N =>ND=> NDD=> NDDD=> DDDD=> 0DDD=> 01DD=> 012D=> 0127
N=> ND=> N7=> ND7=> N27=> ND27=> N127=> D127=> 0127
N=> ND=> DD=> 3D=> 34
N=> ND=> N4=> D4 =>34
N=> ND=> NDD=> DDD=> 5DD=> 56D=> 568
N=> ND=> N8=> ND8=> N68=> D68=> 568
7.写一个文法,使其语言是奇数集,且每个奇数不以0开头。
解:A→SN, S→+|-|∑, N→D|MD
D→1|3|5|7|9, M→MB|1|2|3|4|5|6|7|8|9 B→0|1|2|3|4|5|6|7|8|9
8. 文法:
ETETETTFTFTFFEi|||*|/()|
最左推导:
EETTTFTiTiTFiFFiiFiiiETTFFFiFiEiETiTTiFTiiTiiFiii********()*()*()*()*()*()*()
最右推导:
EETETFETiEFiEiiTiiFiiiiiETFTFFFEFETFEFFEiFTiFFiFiiiii**********()*()*()*()*()*()*()*()
语法树:/********************************
EEFTE+TFFT+iiiEEFTE-TFFT-iiiEEFT+TFFTiii*i+i+ii-i-ii+i*i
*****************/
9.证明下面的文法是二义的:
S→ iSeS|iS|I
解:因为iiiiei有两种最左推导,所以此文法是二义的。
10.把下面文法改写为无二义的:
S→SS|(S)|()
解:S→ ST|T, T→ (S)|()
11.给出下面语言的相应文法
L1={anbnci|n≥1,i≥0}
L2={aibncn|n≥1,i≥0}
L3={anbnambm|n,m≥0}
L4={1n0m1m0n|n,m≥0}
解:(1)S→ AB|A
A→ aAb|ab
B→ c|cB
(2) S→ AB|B
A→ a|aA
B→ bBc|bc
(3) S→ AB|A|B|∑
A→ aAb|ab
B→ aBb|ab
(4) S→ 1S0|0A1
A→ 0A1|01
第三章 词法分析
7.构造下列正规式的相应的DFA
1(0|1)*101
1(1010*|1(010)*1)*0
0*10*10*10*
(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*
解答:
(1)1(0|1)*101
I I0 I1
{X} Ф {A,B,C}
{A,B,C} { B,C} { B,C,D}
{B,C} { B,C} { B,C,D}
{B,C,D} { B,C,E} { B,C,D}
{B,C,E} { B,C} {B,C,D,y}
{B,C,D,y} {B,C,E} { B,C,D}
S 0 1
A B
B C D
C C D
D E D
E C F
F E D
(2) 1(1010*|1(010)*1)*0
I I0 I1
{X} Ф {A,B,C}
{A,B,C} {y} {D,H,I,L}
{y} Ф Ф
{D,H,I,L} {E,J} {B,C}
{E,J} Ф {B,C,F,G,K}
{B,C} {y} {D,H,I,L}
{B,C,F,G,K} {B,C,G,I,L,y} {D,H,I,L}
{B,C,G,I,L,y} {B,C,G,J,y} {B,C,D,H,I,L }
{B,C,G,J,y} {B,C,G, y} {D,H,I,L}
{D,H,I,K,L} {E,I,J,L} {B,C}
{E,J,y} Ф {B,C,F,G,K }
{E,I,J,L} {J} {B,C,F,G,K }
{J} Ф {K}
{K} {I,L} Ф
{I,L} {J} {B,C}
8.给出下面正规表达式
(1)以01结尾的二进制数串
(2)能被5整除的十进制整数
(3)包含奇数个1或者奇数个0的二进制数串
(4)英文字母组成的所有符号串,要求符号串中的字母按照字典序排列。
(7)不包含子串abb的由a和b组成的符号串的全体。
解答:
(1) (0|1)*01
(2) (1|2|…|9)(0|1|2|…|9)*(0|5)|0|5
(3) 0*1(0*10*10*)*
(4) A*B*…Z*
(7) b*(a|ab)*
9.对下面的情况给出DFA以及正规表达式。
(1){0,1}上的含有子串010的所有串。
(2){0,1}上不含子串010的所有串。
解答:
(1)(0|1)*010(0|1)*
(2)1*(0|1*|1)*1*
12 将图3.8的(a)和(b)分别确定化和最少化。
解:1 确定化
a b
{0} {0,1} {1}
{0,1} {0,1} {1}
{1} {0} __
令A={0} B={0,1} C={1}
则状态转换图为:
2 最少化
首先,所有状态可分为 终态集{A B} 非终态集{C}
其次,考察{A B},由于{A B}由a到{B},由b到{C},所以不可分,令A={A B}
则最少化后的状态转换图为:
14 构造一个DFA,它接受∑={0,1}上所有满足下列条件的字符串,每个1都有0直接跟在右边。
解:1 正规式为: (0|10)﹡
2 由正规式转化为NFA:
3 由NFA到DFA:
0 1
{X} {X} {b}
{b} {X} __
令A={X} B={b}
则状态转换图为:
4 最少化
终态集{A} 非终态集{B}
显然不可再划分,则最简的DFA即为:
15 给定右线性文法G:
S→0S|1S|1A|0B
A→1C|1
B→0C|0
C→0C|1C|1|0
求出一个与G等价的左线性文法。
解:1 由右线性文法构造NFA:
2 从NFA中构造左线性文法:
F→A1|B0|C0|C1
A→S1|1
B→S0|0
C→C0|C1|A1|B0
S→S0|S1|1|0
第四章 语法分析-自上而下分析
1. 考虑下面文法 G1:
S→a|∧|(T)
T→T,S|S
(1)消去G1的左递归,然后对每个非终结符写出不带回溯的递归子程序。
(2)经过改写的文法是否是LL(1)的?给出它的预测分析表。
解答:
(1)消去G1的左递归:S→a|∧|(T)
T→ST’
T’ →,ST’|ε
递归子程序:
PROCEDURE S;
IF sym=’a’ THEN ADVANCE
ELSE IF sym=’ ∧’ THEN ADVANCE
ELSE IF sym=’ (’ THEN
BEGIN
ADVANCE
T;
IF sym=’ )’ THEN ADVANCE
ELSE ERROR
END
ELSE ERROR;
PROCEDURE T;
BEGIN
S;T’
END;
PROCEDURE S;
IF sym=’ ,’ THEN
BEGIN
ADVANCE
S;T’
END;
(2)是LL(1)文法。
FIRST(S)={ a,∧,( } FIRST(T)={ a,∧,( } FIRST(T’)={ ,,ε }
FOLLOW(S)={ #, , , ε, ) } FOLLOW(T)={ ) } FOLLOW(T’)={ ) }
预测分析表如下: