编译原理习题.docx
- 文档编号:25459668
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:25
- 大小:35.30KB
编译原理习题.docx
《编译原理习题.docx》由会员分享,可在线阅读,更多相关《编译原理习题.docx(25页珍藏版)》请在冰豆网上搜索。
编译原理习题
试卷一
一、是非题(下列各题,你认为正确的,请在题干的括号内打“√”,错的打“×”。
每题1分,共5分)
1、算符优先关系表不一定存在对应的优先函数。
………………………………………()
2、数组元素的地址计算与数组的存储方式有关。
………………………………………()
3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。
…………………………()
4、每个文法都能改写为LL
(1)文法。
……………………………………………………()
5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。
……………………()
二、填空题(每题2分,共20分)
1、从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
2、扫描器的任务是从()中识别出一个个()。
3、所谓最右推导是指:
()。
4、语法分析最常用的两类方法是()和()分析法。
5、一个上下文无关文法所含四个组成部分是()。
6、所谓语法制导翻译方法是()。
7、符号表中的信息栏中登记了每个名字的有关的性质,如()等等。
8、一个过程相应的DISPLAY表的内容为()。
9、常用的两种动态存贮分配办法是()动态分配和()动态分配。
10、产生式是用于定义()的一种书写规则。
三、名词解释(每题2分,共10分)
1、遍--
2、无环路有向图(DAG)--
3、语法分析--
4、短语--
5、后缀式--
四、简述题(每题4分,共24分)
1、考虑下面程序
…………
Vara:
integer;
ProcedureS(X);
VarX:
integer;
Begin
a:
=a+1;
X:
=a+X
End;
Begin
a:
=5;
S(a);
Print(a)
End.
试问:
若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么?
2、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
3、写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列。
4、已知文法G(S)
S→a|∧|(T)
T→T,S|S
写出句子((a,a),a)的规范归约过程及每一步的句柄。
5、何谓优化?
按所涉及的程序范围可分为哪几级优化?
6、目标代码有哪几种形式?
生成目标代码时通常应考虑哪几个问题?
五、计算题(共41分)
1、写一个文法,使其语言是奇数集,且每个奇数不以0开头。
(5分)
2、设文法G(S):
S→(L)|aS|a
L→L,S|S
(1)消除左递归和回溯;
(2)计算每个非终结符的FIRST和FOLLOW;
(3)构造预测分析表。
3、Whilea>0∨b<0do
Begin
X:
=X+1;
ifa>0thena:
=a-1
elseb:
=b+1
End;
翻译成四元式序列。
(7分)
4、已知文法G(E)
E→T|E+T
T→F|T*F
F→(E)|i
(1)给出句型(T*F+i)的最右推导及画出语法树;
(2)给出句型(T*F+i)的短语、素短语。
(7分)
5、设布尔表达式的文法为
E→E
(1)∨E
(2)
E→E
(1)∧E
(2)
E→i
假定它们将用于条件控制语句中,请
(1)改写文法,使之适合进行语法制导翻译和实现回填;
(2)写出改写后的短个产生式的语义动作。
(6分)
6、设有基本块
T1:
=2
T2:
=10/T
T3:
=S-R
T4:
=S+R
A:
=T2*T4
B:
A
T5:
=S+R
T6:
=T3*T5
B:
=T6
(1)画出DAG图;
(2)假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。
(6分)
参考答案
一.是非题
1.√2.√3.√4.×5.×
二.填空题
1.执行性、说明性;
2.源程序、单词符号;
3.任何一步α→β都是对α中最右非终结符进行替换的;
4.自上而下、自下而上;
5.一组终结符号,一组非终结符号、一个开始符号、一组产生式;
6.为每个产生式配上一个翻译子程序,并在语法分析的同时执行
这些子程序;
7.类型、种属、所占单元大小、地址;
8.现行活动记录地址和所有外层最新活动记录的地址;
9.栈式、堆式;
10.语法范畴。
三.名词解释
1.遍--指编译程序对源程序或中间代码程序从头到尾扫描
一次。
2.无环路有向图(DAG)--如果有向图中任一通路都不是环路,
则称庐有向图为无环路有向图,简称DAG。
3.语法分析--按文法的产生式识别输入的符号串是否为一
个句子的分析过程。
4.短语--令G是一个文法。
S划文法的开始符号,假定αβδ
是文法G的一个句型,如果有S→αAδ且AB,则称β是句型
α→β相对非终结符A的短语。
5.后缀式--一种把运算量写在前面,把算符写在后面的表示
表达式的方法。
四、
1、答:
传名:
a=12(2分)
传值:
a=6(2分)
3、逆波兰表示:
abc*+ab+/d-(2分)
三元式序列:
①(*,b,c)
②(+,a,①)
③(+,a,b)
④(/,②,③)
⑤(-,④,d)(2分)
4、答:
句型归约规则句柄
((a,a),a)S→aa
((S,a),a)T→SS
((T,a),a)S→aa
((T,S),a)T→T,ST,S
((S),a)T→SS
((T),a)S→S(T)(T)
(S,a)T→SS
(T,a)S→aa
(T,S)T→T,ST,S
(T)S→(T)(T)
S(4分)
5、答:
优化:
对程序进行各种等价变换,使得从变换后的程序出
发,能产生更有效的目标代码。
(2分)
三种级别:
局部优化、循环优化、全局优化。
(2分)
6、答:
目标代码通常采用三种形式:
机器语言,汇编语言,待装配
机器语言模块。
(2分)
应着重考虑的问题:
(1)如何使生成的目标代码较短;
(2)如何充分利用寄存器,以减少访问内存次数;
(3)如何充分利用指仅系统的的特点。
(2分)
五、计算题:
1、解:
文法G(N):
N→AB|B
A→AC|D
B→1|3|5|7|9
D→B|2|4|6|8
C→0|D(5分)
2、解:
(1)
S→(L)|aS'
S'→S|ε
L→SL'
L'→SL'|ε
评分细则:
消除左递归2分,提公共因子2分。
(2)
FIRST)S)={(,a}FOLLOW(S)={#,,,)}
FIRST(S')={,a,ε}FOLLOW(S')={#,,,)}
FIRST(L)={(,a}FOLLOW(L)={)}
FIRST(L')={,,ε}FOLLOW(L'〕={)}
(3)
a,()#
S
S'
L
L'
S→aS'S→(L)
S'→SS'→εS'→SS'→εS'→ε
L→SL'L→SL'
L'→εL'→ε
(3分)
3、解:
(1)(j>,a,0,5)
(2)(j,-,-,3)
(3)(j<,b,0,5)
(4)(j,-,-,15)
(5)(+,×,1,T1)
(6)(:
=,T1,-,×)
(7)(j≥,a,0,9)
(8)(j,-,-,12)
(9)(-,a,1,T2)
(10)(:
=,T2,-,a)
(11)(j,-,-,1)
(12)(+,b,1,T3)
(13)(:
=,T3,-,b)
(14)(j,-,-,1)
(15)
评分细则:
控制结构4分,其它3分。
4、解:
(1)最右推导:
E→T→F→(E)→(E+T)→(E+F)→(E+i)
→(T+i)→(T*F+i)
语法树:
(2分)
(2)短语:
(T*F+i),T*F+i,T*F,i(2分)
素短语:
T*F,i(1分)
5、解:
(1)E0→E
(1)
E→E0E
(2)
EA→E
(1)
E→EAE
(2)
E→i(3分)
(2)E→E
(1)
{BACKPATCH(E
(1)·FC,NXQ);
E0·TC:
=E
(1)·TC}
E→E0E
(2)
{E·FC:
=E
(2)·FC;
E·TC:
=MERG(E0·TC,E
(2)·TC)}
EA→E
(1)
{BACKPATCH(E
(1)·TC,NXQ);
E0·FC:
=E
(1)·FC}
E→EAE
(2)
{E·TC:
=E
(2)·TC;
E·FC:
=MERG(EA·FC,E
(2)·FC}
E→i
{E·TC:
=NXQ;E·FC:
=NXQ+1;
GEN(jn2,entry(i),-0);
GEN(j,-,-,0)(3分)
6、解:
(1)DAG:
略(3分)
(2)优化后的四元式
T3:
=S-R
T4:
=S+R
A:
=5*T4
B:
=T3+T4(3分)
东南大学1993编译原理试题
一:
(15分)判断下列命题的真假,并简述理由:
1.文法G的一个句子对应于多个推导,则G是二义的.
2.LL
(1)分析必须对原有文法提取左因子和消除左递归.
3.算符优先分析法采用"移近-归约"技术,其归约过程是规范的.
4.文法S→aA;A→Ab;A→b是LR(0)文法(S为文法的开始符号).
5.一个BASIC解释程序和编译程序的不同在于,解释程序由语法制导翻译成目标代码并立即执行之,而编译程序需产生中间代码及优化.
二:
(15分)设计一个最小状态有穷自动机,识别由下列子串组成的任意字符串.
GO,GOTO,TOO,ON
例如:
GOTOONGOTOOGOON是合法字符串.
三:
(15分)构造一个LL
(1)文法G,识别语言L:
L={ω|ω为{0,1}上不包括两个相邻的1的非空串}
并证明你的结论.
四:
(20分)设有一台单累加器计算机,并汇编语言含有通常的汇编指令LOAD,STORE,ADD和MUL.
1.写一个递归下降分析程序,将如下文法所定义的赋值语句翻译成汇编语言:
A→i:
=E
E→E+E|E*E|(E)|i
2.利用加,乘法满足交换率这一性质,改进你的分析程序,以期产生比较高效的目标代码.
五:
(15分)C为大家熟知的程序语言.
1.C的参数传递采用传值的方式,而且允许函数定义和调用时的参数个数不一致(如printf).请指出其函数调用语句:
f(arg1,arg2,...,argn)
翻译成的中间代码序列,并简述其含义.
2.C语言中的变量具有不同的作用范围,试述C应采用的存储分配策略.
六:
(20分)设有一个子程序的四元式序列为:
(1) I:
=1
(2) if I>20 GOTO (16)
(3) T1:
=2*J
(4) T2:
=20*I
(5) T3:
=T1+T2
(6) T4:
=addr(A)-22
(7) T5:
=2*I
(8) T6:
=T5*20
(9) T7:
=2*J
(10) T8:
=T6+T7
(11) T9:
=addr(A)-22
(12) T10:
=T9[T8]
(13) T4[T3]:
=T10+J
(14) I:
=I+1
(15) goto
(2)
(16) ret
1.分划基本块.
2.对代码施行各种可能的优化,并写出优化过程中采用了何种优化策略.
东南大学1995编译原理试题
一:
按算法构造文法G1:
S→#M#
M→(L|a
L→M,a)
的算符优先矩阵.(即填写下列矩阵)
│ a │ , │ ( │ ) │ # │
──┼──┼──┼──┼──┼──┼
a │ │ │ │ │ │
──┼──┼──┼──┼──┼──┼
, │ │ │ │ │ │
──┼──┼──┼──┼──┼──┼
( │ │ │ │ │ │
──┼──┼──┼──┼──┼──┼
) │ │ │ │ │ │
──┼──┼──┼──┼──┼──┼
# │ │ │ │ │ │
──┼──┼──┼──┼──┼──┼
二:
将下列cfg文法修改成正规文法.
S→AB
A→M|N|P
B→aB|a
M→bM|b
N→cN|c
P→αP|ε
三:
已知文法G2:
(1) S'→S
(2) S→AAA
(3) S→1A
(4) S→0
1.列出LR(0)项目集族;
2.构造SLR分析表;
3.试给处语句01100#的LR分析过程.
四:
1.构造由下列三型文法G3所对应的FA.
2.将构造的FA确定化和最小化.
3.写出该DFA所识别的语言.
G3:
S→aA|bS|dC
A→dE
C→aD|bC|b
D→bE|b
E→aD|bE|b
五:
设有源语句A[I+1,J+2]:
=A[B[K+2],5]
1.列出计算两个数组的下标地址(按行存放)
A[I+1,J+2]的地址D1=?
B[K+2]的地址D2=?
2.按语法制导翻译该语句成四元式序列.(设数组首地址分别为a,b;数组按行存放,每个元素占一字编址.数组说明:
A:
array[1..10,-5..5],B:
array[-5..5])
六:
求文法G4:
A→BCc|gDB
B→bcDE|ε
C→Dab|ca
D→dD|ε
E→gAf|c
的各非终结符的随符集.
七:
1.简述由基本块寻找循环结点的算法.
2.对于如下一段程序,若参数传递分别采用:
(a)传名 (b)传结果 (c)传地址
试问程序执行结果,Y值是什么?
proc Q(B,C)
begin
B:
=B+2;
B:
=B*C
end;
begin
Y:
=2;
Q(Y,2*Y);
print(Y)
end;
3.文法G5:
E→P↑E|P
P→P*Q|Q
Q→Q+R|R
R→(E)|a
a→整常数
试给出下列表达式计值结果(语法制导).
3+2*5↑2*2+3
2+(2↑2↑3)*2+3
东南大学1996编译原理试题
试题编号:
553
试题名称:
编译原理
一:
1.试写一正规文法,使其定义的语言是不以0打头的偶整数集合.其中数字可以用简名表示,比如α1→0|2|4|6|8,并把α1看作是终结符.
2.试写一上下文无关文法,它能产生下列语言:
L={ω|ω∈{a,b}*,且ω中a的个数是b的两倍,例如aab等}
二:
请写出由下列文法所确定的语言.
1.G1:
S→10S01
S→aA
A→bA
A→a
2.G2:
S→aSS
S→a
三:
已知NFA的状态转换图如下,试对它确定化并化简,并写出该FA接受的语言.
∩b a
→S──────→A
d│ │c
↓a b ↓
b<C──→D──→E>b
│ b│←──│
b│ ↓ a │b
└─→T←──┘
四:
已知文法G4:
S'→S
S→AS
S→b
A→SA
A→a
1.试求closure({(S'→·S,#)})和GO(closure({(S'→·S,#)}),S)
2.文法是LR
(1)吗?
为什么?
五:
试将下面语句按语法制导翻译成四元式序列.
while(a ifa=1thenc: =c+1 elsewhilea<=ddoa: =a+2; 六: 1.试对如下四元式序列划分成基本块,并化出程序流图; 2.写出源语句. (1)I: =1 (2)ifI>Mgoto(19) (3)J: =1 (4)ifJ>Ngoto(17) (5)T1: =I*N (6)T2: =T1+J (7)T3: =addr(A)-C (8)T4: =I*2 (9)T5: =J+2 (10)T6: =T4*N (11)T7: =T6+T5 (12)T8: =addr(A)-C (13)T9: =T8[T7] (14)T3[T2]: =T9 (15)J: =J+1 (16)goto(4) (17)I: =I+1 (18)goto (2) (19)... 七: 1.求文法G7的各非终结符的终结首符集First和随符集Follow. 2.判定该文法是LL (1)吗? G7: A→BCc|gDB B→bCDE|ε C→DaB|ca D→dD|ε E→gAf|c 东南大学1998编译原理试题 一: 已知文法G1: S→aB|ε B→bC|bD C→cB|c D→d 1.试构造一个最小DFA,画出状态转换图. 2.由该DFA给出它所识别的语言(用正规式表示). 二: 已知正规式α=ab*c*d, 1.试构造一个DFAM,其接受的语言为此α(画出图); 2.由该DFAM写出对应的正规文法(古线性). 三: 文法G3: S→A[B] A→[B]|Aa B→a 1.求出各非终结符N的Firstvt(N)和Lastvt(N),构造包括语句括号'#'在内的算符优先表; 2.给出语句#[a][a]#的算符优先分析过程,即填写如下格式的表: 步骤 │栈内│输入串│动作 ────┼────┼────┼───── 0 │#│[a][a]#│ ... │ │ │ 四: 已知文法G4: T→T*F|F F→(T)|i 1.试给出语句(i*i)#的自上而下分析过程(填下表); 2.画出对应的语法树,指出每一步归纳的句柄. 步骤 │栈内│输入│动作 ────┼────┼────┼───── 0 │#T│(i*i)#│ ... │ │ │ 五: 已知文法G5: 0.E'→E 1.E→E+T 2.E→T 3.T→i 列出LR(0)项目集规范族,求出各非终结符N的Follow集合,构造SLR分析表. 六: 翻译如下语句成四元式序列(由语法制导生成). whilea>banda ifa=5thenb: =b+1else repeat a: =a+1 untila>=d; 七: 按语法制导翻译下段程序成四元式序列(不要优化),设数组A: array[1..10,1..10]ofint;每个下标变量占1字编址,数组按行存放,Z为函数名. begin A[i,j]: =A[i,j]+2; B: =Z(A[i,j])*5 end 八: 将如下一段四元式序列进行块内优化和循环优化(强度减弱及删除基本归纳变量),写出优化后的四元式序列.(要求先划分基本块) (1)i: =1 (2)ifi>100goto(10) (3)T1: =20*i (4)M: =J+T1 (5)T2: =20*i (6)N: =K+T2 (7)O: =M+N (8)i: =i+1 (9)goto (2) (10)... 九: 已知如下一段程序,试给出运行时整个数据区结构.假定num初值为2,每个数据区的活动记录包含内容如下图所示,数据区从k单元开始编址. ┌─────┐programfactoral; │函数返回值│varnum,fact: int; ├─────┤functionf(n: int): int │变量单元│ifn>0thenf: =n*f(n-1) ├─────┤elsef: =1; │display表│begin ├─────┤read(num); │形参单元│fact: =f(num) ├─────┤end │返回地址│ ├─────┤ │ 基SP │ └─────┘ 1999年 1.(10分)构造一个DFA,它接受0,1上0和1的个数都是偶数的字符串。 2.(5分)现有句型bl和产生式Ab,分别指出LL (1)方法和LR (1)方法在扫描到此句型的什么位置决定用此产生式? 3.(15分)在PASCAL语言中,简单类型的变量的声明例举如下: m,n: integer p,q,r: real 为这样的声明写一个LR (1)文法(为简单起见,变量标识符都用id表示),并根据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的类型填入符号表。 4.(5分)下面的PASCAL程序在VAX机器上运行时,报告存储访问错,为什么? programstrange(output); varp: integer; begin p=nil; if(p<>nil)and(p=10) thenwriteln(10) elsewriteln(‘nothing’) end. 5.(10分)PASCAL语言和C语言都是栈式分配的语言。 它们在语言构造上的哪些区别,使得C语言允许一函数的返回值类型是函数类型(实际是函数指针类型),而PASCAL语言不允许。 6.(5分)代码优化中的强度削弱是什么意思,举一例加以说明 2001年编译原理试题 1.(10分)处于/*和*/之间的串构成注解,注解中间没有*/。 画出接受这种注解的DFA的状态转换图。 2.(10分)为语言 L={ambn|0m2n}(即a的个数不超过b的个数的两倍) 写一个LR (1)文法,不准超过6个产生式。 (若超过6个产生式,不给分。 若所写文法不是LR (1)文法,最多给5分。 ) 3.(10分)构造下面文法的LL (1)分析表。 DTL Tint|real LidR R,idR| 4.(15分)就下面文法 S(L)|aLLS|S 给出一个语法制导定义,它输出配对括号的个数。 给出一个翻译方案,它输出每个a的嵌套深度。 如句子(a,(a,a)),第一小题的输出是2,第二小题的输出是122。 5.(10分)Pascal语言for语句的含义见教材第222页习题7.13。 请为该语句设计一种合理的中间代码结构。 你可以按第215页图7.17的方式或者第219页图7.19的方式写出你的设计,不需要写产生中间代码的语法制导定义。 6.(5分)一个C语言程序如下: func(i1,i2,i3) lon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)