编译原理

编译原理
编译原理

东南大学历年编译原理考研试卷

试题编号:553

试题名称:编译原理

一:(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的参数传递采用传值的方式,而且允许函数定义和调用时的参数个数不一致(如print

f).请指出其函数调用语句:

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.对代码施行各种可能的优化,并写出优化过程中采用了何种优化策略.

试题编号:553

试题名称:编译原理

一:由文法G1构造LR(1)部分分析表:

1.列出4个项目集I0,I1,I2,I3;(如下图)

2.填写LR(1)分析表的状态0,1,2的action和goto表的内容.(如下图) G1: (0) S→T

(1) T→T(T)

(2) T→ε

┌──────┐┌──┐┌──┐┌──┐

│I0:S→·T,# │ T │I1: │ ( │I2: │ T │I3: │

│ │ -→│ │-→ │ │-→ │ │

└──────┘└──┘└──┘└──┘

┌──┬────────┬───┐

││action │ goto │

│状态├──┬──┬──┼───┤

││ (│ ) │ #│T │

├──┼──┼──┼──┼───┤

│ 0│││││

├──┼──┼──┼──┼───┤

│ 1│││││

├──┼──┼──┼──┼───┤

│ 2│││││

├──┼──┴──┴──┼───┤

││││

│... │ ...│ ...│

││││

└──┴────────┴───┘

二:已知文法G2,请用类pascal语言写出它的递归下降分析程序. G2: A→[B

B→X]|BA

X→Xa|Xb|a|b

三:已知文法G3,要求:

1.写出各非终极符的首终极符集合和尾终极符集合;

2.填写opt表:

│+ │* │@ │ ↑ │i │# │

──┼──┼──┼──┼──┼──┼──┤

+ │││││││

──┼──┼──┼──┼──┼──┼──┤

* │││││││

──┼──┼──┼──┼──┼──┼──┤

@ │││││││

──┼──┼──┼──┼──┼──┼──┤

↑ │││││││

──┼──┼──┼──┼──┼──┼──┤

i │││││││

──┼──┼──┼──┼──┼──┼──┤

# │││││││

──┼──┼──┼──┼──┼──┼──┤

│││││││

G3: E→E+T|T|@T

T→T*F|F

F→p↑F|P

p→i

四:请写出产生下列语言的文法.

1. L1={a^ib^j|i>j>=1}

2. L2={ω1|ω1∈{0,1}*&ω1中包含0,1个数相等的任意串}

3. L3={ω2|ω2∈{a,b}*&ω2中a之后必定跟b}

4. L4={ω3+ω3|ω3∈{0,1}*}

五:简要回答问题.

1.对编译程序而言,模块,遍,子程序这三个概念的主要区别?

2.静态存储分配与动态存储分配的主要区别?

3.何谓自适应线性表?

六:翻译如下布尔表达式成四元式序列,结果留待填的真假链的四元式序号. A∧B-C

试题编号:553

试题名称:编译原理

一:按算法构造文法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

试题编号: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(closur e({(S'→·S,#)}),S)

2.文法是LR(1)吗?为什么?

五:试将下面语句按语法制导翻译成四元式序列.

while (a

if a=1 then c:=c+1

else while a<=d do a:=a+2;

六:

1.试对如下四元式序列划分成基本块,并化出程序流图;

2.写出源语句.

(1) I:=1

(2) if I>M goto (19)

(3) J:=1

(4) if J>N goto (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

试题编号:553

试题名称:编译原理

一:文法G1:

E→ET+|T

T→TF*|F

F→FP↑|P

P→E|i

1.试证明符号串TET+*i↑是G1的一个句型(要求画出语法树).

2.写出该句型的所有短语,简单短句和句柄.

二:

1.给出下图FA的正规式.

a b

──→ ──→ ②

→◎①a↑↓ε

←── ←── ③

ε b

2.已知正规文法G2:

S→aS|A

A→bB

B→aB|ε

试构造一确定有限自动机DFA(要求化简),使得它接受的语言正是该文法产生的语言,要求画出状态图.

三:

1.试写出一个上下文无关文法G3,它能产生配对的圆括号串(例如,(),(()),()(())等,甚

至包含0对括号).

2.使用文法G3给出输入串(())()#的自上而下分析过程.

四:已知文法G4:

S→aAb|Sc|ε

A→aAb|ε

1.给出G4文法的LR(0)项目集规范族;

2.构造SLR分析表;

3.G4文法所定义的语言;

4.已知有如下文法及相应的LR分析表,试给出语句01001#的LR分析过程(填写下表). S→AAA

A→1A

A→0

LR分析表:

───┬──┬──┬──┰──┬──

状态│ 1│ 0│ #┃S│ A

───┼──┼──┼──╂──┼──

0 │ S3 │ S4 │ ┃1│ 2

───┼──┼──┼──╂──┼──

1 │││acc ┃│

───┼──┼──┼──╂──┼──

2 │ S

3 │ S

4 │┃│ 5

───┼──┼──┼──╂──┼──

3 │ S3 │ S

4 │┃│ 6

───┼──┼──┼──╂──┼──

4 │ r3 │ r3 │ r3 ┃│

───┼──┼──┼──╂──┼──

5 │ S3 │ S4 │┃│ 7

───┼──┼──┼──╂──┼──

6 │ r2 │ r2 │ r2 ┃│

───┼──┼──┼──╂──┼──

7 │││ r1 ┃│

───┴──┴──┴──┸──┴──

分析过程:

──────┬──────┬──────

状态栈│符号栈│ 输入串

──────┼──────┼──────

││

││

││

││

││

││

││

──────┴──────┴──────

五:

1.翻译下面语句成四元式中间代码序列和后缀式(逆波兰式);

while x+y>a do

if a<10 then a:=a+1 else x:=x-1;

2.翻译布尔表达式

(a>b) or (c=d) and not (e

成转移四元式序列(即四元式中仅包含(zθ,-,-,-)和(j,-,-,-)两类语句,其中θ为关系

运算符.)

六:

1.有如下Fortran说明语句,试借助符号表登记等价环链EQ和相对数OFFSET,即填写下表的

EQ栏和OFFSET栏.设每个整型量占1子编址.

integer a,b,c(10,10),d(10)

equivalence (a,d(8),c(5,5))

equivalence (b,c(5,8))

符号表

┌───┬──────┬───┬───┐

│ name │ ... │ EQ│OFFSET│

├───┼──────┼───┼───┤

1│ a │ ... │ │ │

├───┼──────┼───┼───┤

2│ b │ ... │ │ │

├───┼──────┼───┼───┤

3│ c │ ... │ │ │

├───┼──────┼───┼───┤

4│ d │ ... │ │ │

└───┴──────┴───┴───┘

2.有如下pascal语言的程序轮廓,当运行该程序且第一次递归调用Q过程(即在过程Q中又调用了Q)时,数据区建立情况.假定各数据区首址用SP(i)(i=0,1,……)表示,试给出P,Q数

据区的display表.

┌ main

│┌ P

││┌ Q

│││ Call Q

││└

││ Call Q

│└

│┌ R

││ Call P

│└

│┌ S

││ Call R

│└

│ Call S

七:已知如下流图,试给出回边与循环.

┌─→①←┐

│/ \/

│ ↓↓/

\ ②③

\ \ /↑

\↓↓/

┌→④──┐

│ │ ↓

│ │┌→⑤

│ ↓/ │

└─⑥←─┘

试题编号:553

试题名称:编译原理

一:已知文法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分析表.

六:翻译如下语句成四元式序列(由语法制导生成).

while a>b and a

if a=5 then b:=b+1 else

repeat

a:=a+1

until a>=d;

七:按语法制导翻译下段程序成四元式序列(不要优化),设数组A: array[1..10,1..10]

of int;每个下标变量占1字编址,数组按行存放,Z为函数名.

begin

A[i,j]:=A[i,j]+2;

B:=Z(A[i,j])*5

end

八:将如下一段四元式序列进行块内优化和循环优化(强度减弱及删除基本归纳变量),写

出优化后的四元式序列.(要求先划分基本块)

(1) i:=1

(2) if i>100 goto (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单元开始编址.

┌─────┐ program factoral;

│函数返回值│ var num,fact:int;

├─────┤ function f(n:int):int

│ 变量单元│if n>0 then f:=n*f(n-1)

├─────┤ else f:=1;

│display 表│ begin

├─────┤ read(num);

│ 形参单元│ fact:=f(num)

├─────┤ end

│ 返回地址│

├─────┤

│基SP │

└─────┘

试题编号:553

试题名称:编译原理

一:已知正规文法中的左线性文法

G1:S→Sa|Sb|c

试构造无ε产生式的等价右线性文法,并构造相应的确定有限自动机DFA,画出状态转换图即可.

二:已知正规文法(X为开始符号)

G2: X→0Y|1Z|0

Y→0X|1Y|1

Z→1X

1.该文法产生语言是什么?请用正规式表示.

2.构造最简的确定有限自动机DFA,并画出状态转换图.

三:已知上下文无关文法(E为开始符号)

G3: E→ET+|T

T→TF*|F

F→E|i

1.消除文法左递归,并给出改写后的文法产生式;

2.给出文法改写以后的各非终结符X的First(X)与Follow(X)集合,并由此判定它是否是L L(1)文法(按下表填).

V(N) │ First(X) │ Follow(X)

────┼──────┼───────

X ││

...││

││

四:已知表达式文法(已拓广)

G4: E'→E

E→E+E|i

1.试构造文法G4的LR(0)项目集规范族;

2.若'+'服从右结合率,请给出LR分析表.

五:已知文法(Z为开始符号)

G5: Z→bMb

M→(Ma)|a

1.试构造算符优先分析表(即填下表);

│ a │ b │( │ ) │# │

──┼──┼──┼──┼──┼──┼

a ││││││

──┼──┼──┼──┼──┼──┼

b ││││││

──┼──┼──┼──┼──┼──┼

( ││││││

──┼──┼──┼──┼──┼──┼

) ││││││

──┼──┼──┼──┼──┼──┼

# ││││││

──┼──┼──┼──┼──┼──┼

2.若某相邻的终结符a,b间存在a<=b两种关系,那么在进行算符优先分析做归约动作时,在

寻找栈顶的素短语符号串时要察看它与哪个产生式右部的符号串匹配.

例如栈顶串...aAbα(a,b∈VT,A∈(VA∪ε),a<=b,α∈V*)为已知可归约,而现有产生式

X→aAbα,则取素短语aAbα,若只有产生式Y→Abα,那么就取Abα进行归约.试按此规定

的算法给出语句b((aa)a)b的算符优先分析过程.

六:翻译成中间代码.

1.将如下程序段翻译成后缀式(逆波兰式),填在一维数组POST中,设i初值=1.

t:=15;

b:=20;

while t<>b do

if t>b then t:=t-b

else b:=b-t;

2.翻译布尔表达式成转移四元式序列,并指出待填真假链序号.

(a>b+1) and not (c+2

注:f(x)为布尔函数.

七:有如下一个计算m*2^n的C语言程序,试给出运行时整个栈或数据区的结构.数据区的活动记录结构如图所示.

┌──────┐┌─────┐

│函数f返回值││返回结果值│

├──────┤├─────┤

│ 局部变量区││局部变量区│

├──────┤├─────┤

│ 全程变量区││形参单元区│

├──────┤├─────┤

│主程序mai n │ │ 返回地址│

│ 数据区│├─────┤

└──────┘│ 基SP │

├─────┤

│函数数据区│

└─────┘

int m;

f(n)

int n;

{ int c;

if (n==0) c=m;

else c=f(n-1)*2;

return (c);

}

main()

{ int n=2;

m=5;

printf("%d\n",f(n));

}

八:已知如下程序段

a:=1;

while a<=10 do

begin

if a<>b then

A[a,b]:=A[a,b]+2;

a:=a+1;

end;

1.按语法制导生成四元式中间代码序列;

2.将中间代码序列划分成基本块,画出程序流图,并指出循环结点集;

3.执行循环中代码外提,强度减弱优化和基本块内删除公共子表达式优化,最后画出包含优化后的中间代码的程序流图.

注:数组A: array[1..10,1..10] of int;按行存放,每个下标变量占1字编址,首地址为a ddrA.

编译原理期末考试习题及答案

一、填空题|(每题4分,共20分) 1. 乔母斯基定义的3型文法(线性文法)产生式形式 A→Ba|a,或A→aB|a,A,B∈Vn, a,b∈Vt 。 2.语法分析程序的输入是单词符号,其输出是语法单位。 3 型为 B → .aB 的LR(0)项目被称为移进项目,型为 B → a.B 的LR(0) 项目被称为待约项目, 4.在属性文法中文法符号的两种属性分别为继承属性和综合属性。 5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。 二.已知文法 G(S) (1) E → T | E+T (2) T → F | F*F (3) F →(E)| i (1)写出句型(T*F+i)的最右推到并画出语法树。(4分) (2)写出上述句型的短语,直接短语和句柄。(4分) 答:(1)最右推到(2分) E ==> T ==> F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i) (2) 语法树(2分) (3)(4分) 短语:(T*F+i),T*F+i ,T*F , i 直接短语:T*F , i 句柄:T*F 三. 证明文法G(S) :S → SaS |ε是二义的。(6分) 答:句子aaa对应的两颗语法树为:

因此,文法是二义文法 四.给定正规文法G(S): (1) S → Sa | Ab |b (2) A → Sa 请构造与之等价的DFA。(6分) 答:对应的NFA为:(6分) 状态转换表: a b {F} Φ{S} {S} {S,A} Φ {S,A} {S,A} {S} 五. 构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。(15分)答:(1)对应的NFA(5分) a b {0} {1,3} {0} {1,3} Φ{2,3} {2,3} {1,3} {2,3} (5分) 六. 已知文法G(S) : (1) S → ^ | a | (T) (2) T → T,S | S 试:(1)消除文法的左递归;(4分) (2)构造相应的first 和 follow 集合。(6分) 答:(1)消除文法的左递归后文法 G’(S)为: (1) S → ^ | a | (T)

编译原理试题

中间语言与语法制导翻译 重点与难点 重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。 三地址码,各种语句的目标代码结构、属性文法与翻译模式。 难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。 基本要求 掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,S_属性文法,L_属性文法,说明语句的翻译方案,翻译模式、属性文法的实现掌握中间语言与语义分析的基本概念;熟练掌握语法(结构)树、三地址代码、赋值与控制语句的翻译、说明语句的翻译;掌握组合数据说明的翻译、过程调用翻译。 例题解析 例1 给定文法 E --> T { R.i := T.p } R { E.p := R.s } R --> addop T { R1.i := mknode( addop.val, R.i, T.p ) } R { R.s := R1.s } R --> { R.s := R1.s } T --> ( E ) { T.p := E.p } T --> id { T.p := mkleaf( id, id.entry ) } T --> num { T.p := mkleaf( num, num.val ) } (1) 指出文法中的各非终结符具有哪些综合属性和哪些继承属性 ⑵画出按本翻译模式处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树 【解】 (1)E的综合属性 p,R的继承属性i,综合属性s;T的综合属性p (2) 处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树如下 + (NUM, 20) - ( ID, b) (NUM, 10) 例2 定义一个计算器的属性文法,完成一个输入表达式值的计算和显示, 【解】计算器的文法 L → E

编译原理试题(卷)汇总-编译原理期末试题(卷)(8套含答案解析-大题集)

编译原理考试题及答案汇总 一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4)C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 12.编译程序是一种___C__。 A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 13.文法 G 所描述的语言是_C____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 14.文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是___B__。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法15.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式 16.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_C____。

编译原理期末复习

编译原理期末复习 鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。 注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。 1、简答题(或者名词解释) 下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握。 注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦。(1)简述编译程序的概念及其构成 答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。 2)构成: (2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务)答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。 语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序 (3) 简述编译程序的构造过程(这个大家看看,是对(1)和(2)的综合) 答:1)构造词法分析器:用于输入源程序进行词法分析,输出单词符号; 2)构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序 3)构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码。 4)构造优化器:对中间代码进行优化。 5) 构造目标代码生成器:把中间的代码翻译成目标程序。 6) 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况。 7)构造错误处理程序:对出错进行处理。 (4) 说明编译和解释的区别: 1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2)编译程序运行效率高而解释程序便于人机对话。 (5)文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=(V T,V N,S,P),其中V T:终结符集合(非空) V N:非终结符集合(非空),且V T ?V N=? S:文法的开始符号,S?V N P:产生式集合(有限)。

编译原理考试试卷

一、填空题(每空 2 分,共 30 分) 1、编译程序的整个过程可以从逻辑上划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,另外还有两个重要的工 作是表格管理和出错处理 2、规范规约中的可归约串是句柄,算符优先分析中的可归约串是最左素短语。 3、语法分析方法主要可分为自顶向下和自底向上两大类。 4、 LR ( 0)文法的项目集中不会出现移进 -归约冲突和归约 -归约冲突。 5、数据空间的动存态储分配方式可分为栈式和堆式两种。 6、编译程序是指能将源语言程序翻译成目标语言程序的程序。 7、确定有穷自动机DFA 是NFA的一个特例。 8、表达式 (a+b)*c的逆波兰表示为ab+c*。 二、选择题(每题 2 分,共 20 分) 1、 L R 语法分析栈中存放的状态是识别B的 DFA 状态。 A 、前缀B、可归前缀C、项目 D 、句柄 2、D不可能是目标代码。 A 、汇编指令代码 B 、可重定位指令代码 C、绝对机器指令代码 D 、中间代码 3、一个控制流程图就是具有C的有向图 A 、唯一入口结点B、唯一出口结点C、唯一首结点 D 、唯一尾结点 4、设有文法G[S] : S→ b|bB B → bS ,则该文法所描述的语言是C。 A 、 L ( G)={b i|i≥ 0}B、 L (G) ={b 2i |i≥0} C、 L ( G)={b 2i+1|i≥ 0} D 、 L ( G)={b 2i+1|i ≥1} 5、把汇编语言程序翻译成机器可执行的目标程序的工作是由 B完成的。 A 、编译器 B 、汇编器C、解释器D、预处理器6、在目标代码生成阶段,符号表用于D。 A 、目标代码生成 B 、语义检查C、语法检查D、预处理器地址分配0 7、规范归约是指B。 A 、最左推导的逆过程 B 、最右推导的逆过程C、规范推导D、最左归约逆过程 8、使用A可以定义一个程序的意义。 A 、语义规则B、词法规则C、语法规则D、左结合规则 9、经过编译所得到的目标程序是D。 A 、三元式序列B、四元式序列C、间接三元式 D 、机器语言程序或汇编语言程序 10、在一个基本块内进行的代码优化是B。 A 、全局优化B、局部优化C、循环优化D、代码外提 三、简答题( 3 小题,共 30 分) 1、已知文法G[S]:S→Ac|aB A→ ab B→ bc 证明该文法具有二义性(本题 6 分) 证明:因为该文法的句型abc 存在如下两棵语法树: 所以,该文法具有二义性 一、填空题(每空 1分,共 20分) 1.编译过程一般分为、、中间代码生成、 和目标代码生成五个阶段。 2.语法分析最常用的两类方法是和分析法。 3.确定的有穷自动机是一个,通常表示为。

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

(精选)编译原理期末考试题目及答案

一、填空题(每空2分,共20分) 1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。 2.编译器常用的语法分析方法有自底向上和自顶向下两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。 5.对编译程序而言,输入数据是源程序,输出结果是目标程序。 1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。 3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。 4.一个LL(1)分析程序需要用到一张分析表和符号栈。 5.后缀式abc-/所代表的表达式是a/(b-c)。 二、单项选择题(每小题2分,共20分) 1.词法分析器的输出结果是__C。 A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 2.正规式 M 1 和 M 2 等价是指__C_。 A. M1和M2的状态数相等B. M1和M2的有向边条数相等 C. M1和M2所识别的语言集相等 D. M1和M2状态数和有向边条数相等 3.文法G:S→xSx|y所识别的语言是_C____。 A. xyx B. (xyx)* C.xnyxn(n≥0) D. x*yx* 4.如果文法G是无二义的,则它的任何句子α_A____。 A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。 A.源程序B.目标语言 C.编译方法 D.以上三项都是 6.四元式之间的联系是通过__B___实现的。 A.指示器B.临时变量C.符号表 D.程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为__B___。 A.┐AB∨∧CD∨B.A┐B∨CD∨∧C. AB∨┐CD∨∧ D.A┐B∨∧CD∨8. 优化可生成__D___的目标代码。 A.运行时间较短B.占用存储空间较小 C.运行时间短但占用内存空间大 D.运行时间短且占用存储空间小 9.下列___C___优化方法不是针对循环优化进行的。 A. 强度削弱 B.删除归纳变量C.删除多余运算 D.代码外提 10.编译程序使用_B_区别标识符的作用域。 A. 说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D. 标识符的行号 三、判断题(对的打√,错的打×,每小题1分,共10分) 2.一个有限状态自动机中,有且仅有一个唯一的终态。x

编译原理试题

1997年编译原理试题 1.(10分)某操作系统下合法的文件名为 device:name.extension 其中第一部分(device:)和第三部分(.extension)可缺省,若device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。 2.(20分) a. 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法。 S—> S and S | S or S | not S | p | q | (S) b. 下面文法是否为LL(1)文法?说明理由。 S—> A B | P Q x A—> x y B—> b c P—> d P | εQ—> a Q | ε 3.(10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下面文法抽象这个问题。 D —> attrlist namelist | attrlist (D) namelist —> id, namelist | id attrlist —> A attrlist | A A —> decimal | fixed | float | real D —> attrlist namelist的含义是:在namelist中的任何名字有attrlist 中给出的所有属性。D—> attrlist (D) 的含义是:在括号中的声明提到的所有名字有attrlist 中给出的所有属性,而不管声明嵌套多少层。写一个翻译方案,它将每个名字的属性个数填入符号表。为简单起见,若属性重复出现,则重复计数。4.(10分)把表达式 -(a+b)*(c+d)+(a+b+c) 翻译成四元式。 5.(10分)由于文法二义引起的LR(1)分析动作冲突,可以依据消除二义的规则而得到LR(1)分析表,根据此表可以正确识别输入串是否为相应语言的句子。对于非二义非LR(1)文法引起的LR(1)分析动作的冲突,是否也可以依据什么规则来消除LR(1)分析动作的冲突而得到LR(1)分析表,并且根据此表识别相应语言的句子?若可以,你是否可以给出这样的规则? 6.(5分)UNIX 下的C编译命令cc的选择项g和O的解释如下,其中dbx 的解释是“dbx is an utility for source-level debugging and execution of programs written in C”。试说明为什么用了选择项g后,选择项O便被忽略。 -g Produce additional symbol table information for dbx(1) and dbxtool(1) and pass -lg option to ld(1) (so as to include the g library, that is:

编译原理实验指导书

编译原理实验指导 书

《编译原理》实验指导书 太原科技大学计算机学院 -3-1

序 《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计和算法,因此,一直是一门比较难学的课程。为了使学生更好地理解和掌握编译原理和技术的基本概念、基本原理和实现方法,实践环节非常重要,只有经过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。 为了配合《编译原理》课程的教学,考虑到本课程的内容和特点,本指导书设置了七个综合性实验,分别侧重于词法分析、NFA的确定化、非递归预测分析、算符优先分析器的构造、LR分析、语义分析和中间代码的生成、基于DAG的基本块优化,以支持编译程序的各个阶段,基本涵盖了《编译原理》课程的主要内容。 本指导书可作为《编译原理》课程的实验或课程设计内容,在课程教学的同时,安排学生进行相关的实验。实验平台可选择在MS-DOS或Windows操作系统环境,使用C/C++的任何版本作为开发工具。学生在做完试验后,应认真撰写实验报告,内容应

包括实验名称、实验目的、实验要求、实验内容、测试或运行结果等。

目录 实验一词法分析 ........................................................... 错误!未定义书签。实验二 NFA的确定化.................................................... 错误!未定义书签。实验三非递归预测分析 ............................................... 错误!未定义书签。实验四算符优先分析器的构造................................... 错误!未定义书签。实验五 LR分析 .............................................................. 错误!未定义书签。实验六语义分析和中间代码生成................................ 错误!未定义书签。实验七基于DAG的基本块优化................................... 错误!未定义书签。

期末考试编译原理试卷及答案

一. 填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静 态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。 2. 规范规约是最(3)规约。 3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。另外还有(6)和出错处理。 4.表达式x+y*z/(a+b)的后缀式为 (7) 。 5.文法符号的属性有综合属性和 (8)。 6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址 计算公式为(9)。 7.局部优化是局限于一个(10)范围内的一种优化。 二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分) 1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组 ( )。 A . 字符串 B . 产生式 C . 开始符号 D . 文法 2.程序的基本块是指( )。 A . 一个子程序 B . 一个仅有一个入口和一个出口的语句 C . 一个没有嵌套的程序段 D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。 A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。 A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。 A . 四元式序列 B . 间接三元式序列 C . 二元式序列 D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。 A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一 7. 如果在文法G 中存在一个句子,当其满足下列条件( )之一时,则称该文法是二义文法。 A . 其最左推导和最右推导相同 B . 该句子有两个不同的最左推导 C . 该句子有两个不同的最右推导 D . 该句子有两棵不同的语法树

编译原理考试

编译原理考试

————————————————————————————————作者:————————————————————————————————日期:

一、判断对错:(对√;错 ;每小问2分共24分) <1>算符优先分析法是一种规范归约分析法。( ) <2>若文法Gs中不含形如T→…BD…的产生式,T、B、D∈V N,则称Gs为算符文法。(√) <3>若一个语言是有穷集合,则定义该语言的文法一定是递归的。( ) <4>若两个正规式所表示的正规集相同,则认为二者是等价的。(√) <5>LR分析法是一种规范归约分析法。(√) <6>一个LR(0)项目集I={B →α.bβ, P →aA.},则说I中含有“移进—归约”冲突。(√) <7>SLR(1)文法是无二义性文法。(√) <8>消除左递归后的文法一定是LL(1)文法。( ) <9>对任何编译程序而言,代码优化是必不可少的。( ) <10>编译程序与具体的机器无关。( ) <11>在自动机的概念中,终态与非终态是可区别的。(√) <12>逆波兰式ab+cd+*所代表的中缀表达式是:(a+b)*(c+d)(√) 1. 一个语言有文法是不惟一的。(√) 2. 若一个语言是无穷集合,则定义该语言的文法一定是递归的。(√) 3. 紧跟在条件转移语句后面的语句是基本块的入口语句。(√) 4. 算符优先分析法是一种规范归约分析法。( ) 5. 自下而上语法自导翻译的特点:当栈顶形成句柄时,在归约的同时执行其语义动作。(√) 6. LR(0)文法、SLR(1)文法都是无二义性文法。(√) 7.K、∑分别表示有限状态集和有穷字母表, DFA M的转换函数f是一个从K ?∑到K的单值映射。(√) 8. 对任何编译程序而言,代码优化是必不可少的。( ) 9. 直接短语是某规则的右部,它对应简单子树叶结点从左到右排列形成的符号串。(√) 10. 两个有穷自动机等价是指它们的状态数和有向弧数相等。( ) 11. 一个LR(0)项目集为:I={A→α.bβ, D→β.},则说I中含有“移进--归约”冲突。 (√) 12. 若两个正规式所表示的正规集相同,则认为二者是等价的。(√) 13. 无左递归的文法是LL(1)文法。( ) 14. 逆波兰式abcde/+*+所代表的中缀表达式是:a+b*(c+d/e)(√) 15. 编译程序结构中,中间代码优化及目标代码生成两个阶段与具体的机器有关。( ) 16. LALR分析法中,同心集的合并不会产生“移进--归约”冲突。(√)

编译原理实验报告2

学生学号实验课成绩 武汉理工大学 学生实验报告书 实验课程名称编译原理 开课学院计算机科学与技术学院 指导老师姓名饶文碧 学生姓名 学生专业班级

—学年第学期 实验课程名称:编译原理 实验项目名称单词的词法分析实验成绩 实验者专业班级组别 同组者实验日期 第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。 实验要求: (1)选择常用高级程序设计语言(如 Pascal、C语言、PL/0语言)的源程序作为词法分析对象。 (2)根据教学要求和学生具体情况,从上列语言之一中选取它的一个适当大小的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。其基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,并把其转换成属性字输出。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include #include #include #include char *table[7]={" ","main","int","if","then","else","return"},TOKEN[20],ch; //定义关键字 int lookup(char *TOKEN){ //关键字匹配函数 int m,i; for(i=1;i<6;i++){ if((m=strcmp(TOKEN,table[i]))==0) return(i); } return(0); } void out(int c,char *TOKEN){ //输出函数 printf("(%d,%s)\n",c,TOKEN); } void scanner(FILE *fp){ //扫描函数

编译原理考试试题

一、回答下列问题:(30分) 1.什么是S-属性文法?什么是L-属性文法?它们之间有什么关系? 解答: S-属性文法是只含有综合属性的属性文法。(2分) L-属性文法要求对于每个产生式A X1X2…Xn,其每个语义规则中的每个属性或者是综合属性,或者是Xj的一个继承属性,且该属性仅依赖于: (1)产生式Xj的左边符号X1,X2…Xj-1的属性; (2)A的继承属性。(2分) S-属性文法是L-属性文法的特例。(2分) 2.什么是句柄?什么是素短语? 一个句型的最左直接短语称为该句型的句柄。(3分)素短语是这样的一个短语,它至少包含一个终结符并且不包含更小的素短语。(3分) 3.划分程序的基本块时,确定基本块的入口语句的条件是什么? 解答: (1)程序第一个语句,或 (2)能由条件转移语句或无条件转移语句转移到的语句,或 (3)紧跟在条件转移语句后面的语句。 4.(6分)运行时的DISPLAY表的内容是什么?它的作用是什么? 答:DISPLAY表是嵌套层次显示表。每当进入一个过程后,在建立它的活动记录区的同时建立一张嵌套层次显示表diaplay.假定现在进入的过程层次为i,则它的diaplay表含有i+1个单元,自顶向下每个单元依次存放着现行层、直接外层、…、直至最外层(主程序,0层)等每层过程的最新活动记录的起始地址。通过DISPLAY 表可以访问其外层过程的变量。 5.(6分)对下列四元式序列生成目标代码: A:=B*C D:=E+F G:=A+D H:=G*2 其中,H是基本块出口的活跃变量,R0和R1是可用寄存器 答: LD R0,B MUL R0,C LD R1,E ADD R1,F ADD R0,R1 MUL R0,2 ST R0,H

《编译原理》期末考试复习题

《编译原理》期末考试复习题 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) ×1.计算机高级语言翻译成低级语言只有解释一种方式。() ×2.在编译中进行语法检查的目的是为了发现程序中所有错误。() √3.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。 () ×4.正则文法其产生式为 A->a , A->Bb, A,B∈VN , a 、b∈VT 。 () √5.每个文法都能改写为 LL(1) 文法。 () √6.递归下降法允许任一非终极符是直接左递归的。 () ×7.算符优先关系表不一定存在对应的优先函数。 () ×8.自底而上语法分析方法的主要问题是候选式的选择。 () ×9.LR 法是自顶向下语法分析方法。 () ×10.简单优先文法允许任意两个产生式具有相同右部。 () 三、填空题(每空1分,共10分) 1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有__ ___和 ___ _。 表格管理出错处理_ 2.若源程序是用高级语言编写的,__ __是机器语言程序或汇编程序,则其翻译程序称为 __ __ 。 _目标程序_编译程序 3.编译方式与解释方式的根本区别在于__ __。 是否生成目标代码_ 4.对编译程序而言,输入数据是__ __, 输出结果是__ ___。 _源程序目标程序

5.产生式是用于定义__ __的一种书写规则。 _语法成分 6.语法分析最常用的两类方法是___ __和__ __分析法。 自上而下_自下而上 四、简答题(20分) 1. 什么是句子?什么是语言 ? 答:(1)设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子。 (2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S x,x∈VT*} 。 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) ×1.对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。() ×2.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。() √3.递归下降分析法是自顶向上分析方法。() ×4.产生式是用于定义词法成分的一种书写规则。() √5.LR 法是自顶向下语法分析方法。() √6.在SLR (1 )分析法的名称中,S的含义是简单的。() ×7.综合属性是用于“ 自上而下” 传递信息。() ×8.符号表中的信息栏中登记了每个名字的属性和特征等有关信息,如类型、种属、所占单元大小、地址等等。() ×9.程序语言的语言处理程序是一种应用软件。() ×10.解释程序适用于COBOL 和FORTRAN 语言。() 三、填空题(每空1分,共10分) 1.一个句型中的最左简单短语称为该句型的___句柄__。

编译原理考试试卷

南京工业大学继续教育学院编译原理期末考试试卷 (2012-2013学年) A卷 一、选择题(每题2分,共20分) 得分 1. 一个上下文无关文法G包括四个组成部分:一组终结符,一组非终结符,一个_____,以及一组产生式。 A.字符串 B.运算符号 C.开始符号 D.文法 2.程序的基本块是指_____。 A.一个子程序 B.一个仅有一个入口和一个出口的语句 C.一个没有嵌套的程序段 D.一组顺序执行的程序段,仅有一个入口和一 个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于_____分析方法。 A.自左向右 B.自顶向下 C.自底向上 D.自右向左 4.经过编译所得到的目标程序是_____。 A.四元式序列 B.间接三元式序列 C.二元式序列 D.机器语言程序或汇编语言程序 5.运行阶段的存储组织与管理的目的是_____。 ①提高编译程序的运行速度②节省编译程序的存储空间 ③提高目标程序的运行速度④为运行阶段的存储分配做准备 A. ①② B. ②③ C. ③④ D. ④②6.词法分析器的输出结果是_____。 A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值 7.正规式M 1 和M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等 C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等 8.文法G:S→xSx|y所识别的语言是_____。 A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx* 9.语言是_____。 A.句子的集合B.产生式的集合 C.符号串的集合D.句型的集合 10.编译程序前三个阶段完成的工作是 A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析 C.词法分析、语法分析、语义分析和中间代码生成 D.词法分析、语法分析和代码优化 二、名词解释(每题2分,共20分) 得分 1.最左推导: 2.语法: 3.文法: 4.基本块: 5.语法制导翻译: 6.短语: 7.规范句型:

编译原理实验报告:实验一编写词法分析程序

( 编译原理实验报告 , 实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:( 13软件四 姓名:丁越 学号: 实验地点:) 秋白楼B720

实验成绩: 日期:2016年 3 月 18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标:[ 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 > (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中(编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 ¥ outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图 1-1。 …

编译原理试卷

一、填空题(每题3分,共15分) 1.编译原理是一种翻译程序,它将高级语言编写的源程序翻译成等价的机器语言或汇编 语言的目标程序 2.整个编译过程可以分为五个阶段,分别是:词法分析、语法分析、语义分析及中 间代码生成、代码优化和目标代码的生成。 3.设X是符号串,符号串的幂运算X0= ε 4.乔姆斯基把文法分为四种类型,即0型、1型、2型、3型文法。2型文法也称为 上下文无关文法 5.采用递归下降分析法进行语法分析,要求文法是文法。 二、选择题(每题3分,共15分) 1.若文法G定义的语言是无限集,则文法必然是(D)。 A.上下文无关文法 B.正规文法 C.二义性文法 D.递归文法 2.文法G产生的()的集合是该文法的描述语言。 A.句型 B.终结符集 C.非终结符集 D.句子 3.通常程序设计语言的词法规则可用正规式描述,词法分析器可用(B)来实现。 A.语法树 B.有穷自动机 C.栈 D.数组 4.设有文法G[S]:S→Bb│b,B→bS,该文法所描述的语言是(C) A. b n,n≥0 B.b2n,n≥0 C.b2n+1,n≥0 D.b2n+1,n≥1 5.用1代表字母,d代表数字,则定义标识符单词的正规式是(C) A.1d* B.11* C.1(1│d)* D.11*│d* 三、判断题(每小题2分,共10分) ()给定一个文法,就能从结构上唯一地确定其语言,给定一种语言,就能唯一地确定其文法。 ()用二义性文法定义的语言也是二义性的。 ()正规式、正规文法、有穷自动机都是描述正规集的工具,它们的描述能力是等价的,它们之间是可以相互转换的。 ()采用自下而上分析法进行语法分析需要消除文法的递归性。 ()算符优先文法中,任何两个终结符对(a,b)在·>,<·和=·这三种关系中只有一种关系成立。

编译原理考试试卷

一、填空题(每空2分,共30分) 1、编译程序的整个过程可以从逻辑上划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,另外还有两个重要的工作是表格管理和出错处理 2、规范规约中的可归约串是句柄,算符优先分析中的可归约串是最左素短语。 3、语法分析方法主要可分为自顶向下和自底向上两大类。 4、LR(0)文法的项目集中不会出现移进-归约冲突和归约-归约冲突。 5、数据空间的动存态储分配方式可分为栈式和堆式两种。 6、编译程序是指能将源语言程序翻译成目标语言程序的程序。 7、确定有穷自动机DFA是 NFA 的一个特例。 8、表达式 (a+b)*c 的逆波兰表示为 ab+c* 。 二、选择题(每题2分,共20分) 1、L R语法分析栈中存放的状态是识别 B 的DFA状态。 A、前缀 B、可归前缀 C、项目 D、句柄 2、 D 不可能是目标代码。 A、汇编指令代码 B、可重定位指令代码 C、绝对机器指令代码 D、中间代码 3、一个控制流程图就是具有 C 的有向图 A、唯一入口结点 B、唯一出口结点 C、唯一首结点 D、唯一尾结点 4、设有文法G[S]:S→b|bB B→bS ,则该文法所描述的语言是 C 。 A、L(G)={b i|i≥0} B、L(G)={b2i|i≥0} C、L(G)={b2i+1|i≥0} D、L(G)={b2i+1|i≥1} 5、把汇编语言程序翻译成机器可执行的目标程序的工作是由 B 完成的。 A、编译器 B、汇编器 C、解释器 D、预处理器6、在目标代码生成阶段,符号表用于 D 。 A、目标代码生成 B、语义检查 C、语法检查 D、预处理器地址分配0 7、规范归约是指 B 。 A、最左推导的逆过程 B、最右推导的逆过程 C、规范推导 D、最左归约逆过程 8、使用 A 可以定义一个程序的意义。 A、语义规则 B、词法规则 C、语法规则 D、左结合规则 9、经过编译所得到的目标程序是 D 。 A、三元式序列 B、四元式序列 C、间接三元式 D、机器语言程序或汇编语言程序 10、在一个基本块内进行的代码优化是 B 。 A、全局优化 B、局部优化 C、循环优化 D、代码外提 三、简答题(3小题,共30分) 1、已知文法G[S]:S→Ac|aB A→ab B→bc 证明该文法具有二义性(本题6分) 证明:因为该文法的句型abc存在如下两棵语法树: 所以,该文法具有二义性 一、填空题(每空1分,共20分) 1.编译过程一般分为、、中间代码生成、 和目标代码生成五个阶段。 2.语法分析最常用的两类方法是和分析法。 3.确定的有穷自动机是一个,通常表示为。

相关文档
最新文档