编译原理-黑大-试题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理
一.填空题
1.
①⑤
②⑥
③⑦
④⑧
2.
N T N
文无关文法,通常用来描述计算机语言的语法结构。

( × )
5.前后文无关文法的是否具有二义性是不可判定的。

( √ )
6.同一字母表上的NFA和DFA是等价的。

( √ )
7.若自动机M1的状态数和自动机M2的状态数不相等,则M1与M2一定不等价( × )
8.状态转换图中终态结点只有一个。

( × )
9.正规集与正规式之间并不存在一一对应关系。

( √ )
10某些语言不能用正规式来描述,因此正规式的描述能力是有限的。

( √ )
三.求解题
1.试描述文法所产生的语言。

S→aSa|bSb|c
答:S→aSa→abSba→abcba L(G)={a m b n cb n a m|m,n≥0}
2.试描述文法所产生的语言。

S→AB A->aAb|ab B->cBd|cd
答:S→AB→aAbcBd→aabbccdd L(G)={a n b n c m d m|m,n≥0}
3.试构造所产生语言的文法。

{ a m b n c n d m | m,n>=1 }
答:S→AB A→aA|d B→bB|c
4.试构造所产生语言的文法。

{ a n # b n |n>=0 }∪{ c n # d n |n>=0 }
答:S→E|F|# E→aEb|# F→cFd|#
5.改写文法消除文法左递归。

引入{ }改写:E→EAT|T,T→TMF|F
答:
E→T{AT}
T→F{MF}
6.改写文法消除文法左递归.引入E’,T’改写:E→EAT|T,T→TMF|F
答:
E→TE’E’→ATE’|ε
T→FT’T’→MF T’|ε
四.综合题
1.文法:S→AB|c A→bA|a B→aSb|c,给出句子w=bbaacb的最左推导和最右推导。

这种推导是属于自顶向下还是自底向上的句型分析?
答:
①W的最左推导
S→AB→bAB→bbAB→bbaB→bbaacb
②W的最右推导
S→AB→AaSb →Aacb→bAacb→bbAacb→bbaacb
自底向上
2.假设<标识符>-><标识符>字母|<标识符>数字|字母|下划线,画出识别标识符的状态转换图。

答:
S→Sa|Sd|a|u
3.对下面给出的状态矩阵(初态S,终态C),画出相应的状态转换图,写出相应的右线性文法,并指出它接受的最短输入串。

| a b
S | A S
A | C B
B | B C
C | C C
答:
S→aA|bS
A→aC|bB
B→aB|bC
C→a|b|ac
4.试证明:方程 X=rX + t (X→rX|t)有形如 X=r*t的解.
方程 X=Xr + t (X→Xr|t)有形如 X=tr* 的解.
答:
X=rX+t=>x→rX|t(x→rX,x→t)
∴Lx={t,rt,rrt…}
X=r*t
∴S=(a+ba)*b s=(a|ba)*b
亦可S-a*(baS+b)=a*baS+a*b=(a*ba) *a*b
(a|ba) *b与(a*ba) *a*b等价
5.由下面的正规文法构造相应的正规式。

S→aA A→bA|aB|b B→aA
解:1.S→aA 2.A→bA|aB|b 3.B→aA
将3代入2可得A=bA+aaA+b=(b+aa)A+b
方程x=r*+t形有如同x=r*t的解
那么A=(b+aa)*b将A=(b+aa)*b代入得
S=a(b=aa)*b
即文法所产生正规式a(b|aa)*b
6.对给定的正规式r=00(0|1)*11用Thompson法构造其FA M.
五.应用题
语义动作的形式化系统。

( √ )
三.简答题
1.将后缀表示改写为中缀表式:A B * C D / -
A*B-C/D
将中缀表示改写为逆波兰式:((a * d + c) / d + e) * f + g Adc*+d/e+f*g+
2.给出下面语句的四元式表示:if (A||B<C) then S1; else S2;
1 (jnz,A,-,5)
2 (j,-,-,3)
3 (j<,B,C,5)
4 (j,-,-,P+1)
5 S1的四元式
p (j,-,-,q)
p+1 S2的四元式
q ......
3.简述预测分析方法的基本思想。

是一种比递归程序更为有效的自顶向下的语法分析方法分析器构成。

②一张预测分析表
②一个控制程序
③一个分析栈
工作流程:首先压入#和S入栈设在某一时刻栈的余留输入串.
4.简述简单优先分析方法的基本思想。

解决:建议方法符号的优先级,在分析一个句型时,从左到右依次扫视其中的符号,且每扫视一个符号都检查它和后继符号间的优先关系,以期找到句柄之尾,然后从此尾符号处反后扫描,且每扫视一个符号都检查它和其前符号间的优先关系,直到找到句柄头为止.
结论:对于简单优先文法的任何规范句型x1,x2……xm而言,它的句型是该句型中
Xi-1<·Xi
Xi=·Xi+1=·…=·Xi+k
Xi+k·>Xi+k+1
5.简述算符优先分析方法的基本思想。

算符优先文法仅定义了终结符号之间的优先关系,在扫视一个句型各符号的过程
中,如果仅查看相继出现两终结符号间的优先关系,给句型寻找一个被规约的最左子串。

此最左子串未必就是当前句型的句柄。

更确切地说,在算符优先分析过程中,每次所规约的符号串,是当前句型的最左素短语。

策略:寻找产生式右部
UjajUj+1aj+1…UiaiUi+1
UK与NK对应但不必相同,aK的位置相对应,则按此产生式进行规约。

四.综合题
1.对给定的文法计算FIRST集合。

E->TE' FIRST(E)=FIRST(T)={(,i}
E'->ATE'|εFIRST(E')=FIRST(A)∪{ε}={+,-,ε}
T->FT' FIRST(T)=FIRST(F)={(,i}
T'->MFT'|ε FIRST(T')=FIRST(M)∪{ε}={*,/,ε}
F->(E)|i FIRST(F)={(,i}
A->+|- FIRST(A)={+,-}
M->*|/ FIRST(M)={*,/}
2.设有文法G[E]: E→E+T|T
T→T*F|F E + T
F→(E)|i
①证明E+T*F+i是文法的一个右句型。

E + T F E→E+T→E+F→E+i→E+T+i→E+T*F+i
T * F i ②指出其中的直接短语和句柄,指出其中的素短语和最左素短语。

T*F是T的直接短语
i是F的直接短语
T*F是句柄
T*F和i是素短语
T*F是最左素短语
五.应用题
1.试按S-属性波兰翻译文法给出语句switch case结构翻译后所得的四元式序列(假定四元式开始序号NXQ=100)。

100 (j,0,0,101)
101 S1
102 (j,0,0,113)
103 S2
104 (j,0,0,113)
105 S3
106 (j,0,0,113)
107 (=,T,C1,108)
108 (j,0,0,101)
109 (=,T,C2,108)
110 (j,0,0,101)
111 (=,T,C3,112)
112 (j,0,0,105)
113 q
2.试按S-属性波兰翻译文法给出语句:
for (i=1;i<=10;i++) { sum=sum+i/10; }
翻译后所得的四元式序列(假定四元式开始序号NXQ=100)。

100 (=,1,0,i)
101 (j<=,i,10,103)
102 (j,0,0,q)
103 (/,i,10, sum1)
104 (+,sum, sum1,sum2)
105 (=,sum2,_,sum)
106 (+,i,1,i)
107(j,0,0,101)
3.试按S-属性波兰翻译文法给出语句:
while (x<100) do if (y>1000) then num:=a*b+x/y
翻译后所得的四元式序列(假定四元式开始序号NXQ=1000)。

1000 (j<,x,100,1002) 1001 (j,0,0,1008) 1002 (>,y,1000,1004) 1003 (j,0,0,1000) 1004 (/,x,y,T1) 1005 (*,a,b,T2) 1006 (+,T1,T2,num) 1007 (j,0,0,1000) 1008 q。

相关文档
最新文档