编译原理与技术01

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

编译原理与技术模拟试题一

一、填空题(20分)

1.1编译程序的工作过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等

阶段,一般在语义分析阶段对表达式中运算对象的类型进行检查。

1.2 递归下降法和预测分析法是自上而下的语法分析方法。

1.3常用日的存储分配策略有静态存储分配和动态存储分配,其中,动态存储分配策略包括栈分配和堆分配。

1.4移进、归约是自下而上或LR 分析中的典型操作。

1.5对于数组M[1..6, 1..8],如果每个元素占k个存储单元,且起始地址为a,则以行为主序存放时元素M[4,4]的地址是__ a+27*k __,以列为主序存放时元素M[4,4]的地址是__ a+21k __。

二、单选题(20分)

2.1词法分析器不能 D 。

A. 识别出数值常量

B. 过滤源程序中的注释

C. 扫描源程序并识别记号

D. 发现括号不匹配

2.2给定文法A→bA|ca, C 是该文法的句子。

A. bba

B. cab

C. bca

D. cba

2.3一个句型中的最左 B 称为该句型的句柄。

A. 短语

B. 直接短语

C. 非终结符号

D. 终结符号

2.4已知文法G[S]:S→A1A→A1|S0|0。与G等价的正规式是 C 。

A. 0(0|1)*

B. 1*|0*1

C. 0(1|10)*1

D. 1(10|01)*0

2.5源程序是句子的集合, B 可以较好地反映句子的结构。

A. 线性表

B. 树

C. 完全图

D. 堆栈

2.6与逆波兰式ab+c*d+对应的中缀表达式是 B 。

A. a+b+c*d

B. (a+b)* c+d

C. (a+b)* (c+d)

D. a+b*c+d

2.7识别上下文无关语言的自动机是 A 。

A. 下推自动机

B. NFA

C. DFA

D. 图灵机

2.8 B 是与规范归约(最左归约)互逆的一个过程。

A. 最左推导

B. 最右推导

C. 词法分析

D. 语义分析

2.9文法G产生的 A 的全体是该文法描述的语言,

A. 句子

B. 短语

C. 终结符

D. 非终结符

2.10在表达式x:=y+1中, A 作为左值出现(其中,“:=”表示赋值)。

A. x

B. y

C. 1

D. y+1

三、简答题(30分)

3.1 (5分)请分别写出传值调用、引用调用方式下,下面代码的输出结果。

program main(input,output)

procedure f(a,b)

begin

a :=

b - a;

b := a * b + 1;

end;

begin

x := 5; y := 10;

f(y,x);

print(x,y);

end.

3.1

传值调用方式:5 10 引用调用方式:-24 -5

3.2 (10分)请计算下面文法G(E)中各非终结符的FIRST 和FOLLOW 集合。请说明该文法为什么不是LL(1)文法。

G(E):E →E

* T | T T →T - F | F F →(E) | id 3.2

FIRST(F) = FIRST(T) = FIRST(E) = { (,id }

FOLLOW(E) = {#,*,)} FOLLOW(T) = {-, *, #,) } FOLLOW(F) = {-, *, #,) }

3.3(10分)下图所示的分析树用到了某个上下文无关文法的所有产生式。 (a) 给出该文法的所有非终结符号集合N 和终结符号集合T 。 (b) 给出该文法的产生式集合。

S

ε

A a

B b S c A c b B d c

3.3

N = {S, A, B} T = {a, b, c, d}

S → aAcB | Bd A → AaB | c B → bScA | b | ε

3.4(5分)某程序执行到某一时刻时控制栈中的内容如下所示(其中M 是主程序,P 、Q 、R 、S 均是过程),给出所有在生存期的活动的调用关系(提示:若A 调用B ,则记为A →B)。

3.4

M → P → R → Q → S → S

四、综合题(40分)

4.1(15分)设有正规式r=1(0|1)*

1,试给出: (a )(5

分)识别该正规集的NFA ;

(b )(10分)识别该正规集的DFA (要有计算过程);

4.1 (a)NFA 如下图所示

(b) s0 = {A}

ε_闭包(s0) = s0 初态

ε_闭包(smove(s0,1)) = {B} 记为s1

ε_闭包(smove(s1,0)) = {B} = s1

ε_闭包(smove(s1,1)) = {B,C} 记为s2,终态

ε_闭包(smove(s2,0)) = {B} = s1

ε_闭包(smove(s2,1)) = {B,C } = s2

DFA如下图所示

4.2(15分)设有上下文无关无法G及其语法制导翻译如下(注:G中终结符id仅由单个英文字母组成,如a, b等):

E→E1*T {E.place=newtemp; emit(*, E1.place, T.place, E.place;}

| T {E.place=T.place;}

T→T1-F {T.place=newtemp; emit(-, T1.place, F.place, T.place;}

| F {T.place=F.place;}

F→(E) {F.place=E.place;}

| id {F.place=;}

(a)(4分)画出句子a-b*c的分析树;

(b)(3分)写出当a=1、b=2、c=3时的计算结果;(*表示算术乘、-表示算术减)

(c)(8分)将文法G简化为:E→E*T|T,T→T-F|F,F→id,给出其识别活前缀的DFA,该DFA的项目集中有冲突吗?若有,是哪种类型的冲突。

4.2(a)

E

E*T

T-F

T

F a b

F

c

(b) -3

(c)拓广文法,增加产生式:S→E,识别活前缀的DFA如下图所示

存在移进-归约冲突

相关文档
最新文档