【www.lexiangwang.net--司法考试】
哈尔滨工程大学本科生考试试卷 ( 2007-2008 年 第二 学期) 课程编号:06020060 课程名称: 编译原理 (B卷) 一、 是非题(下列各题你认为正确的,请在题干的括号内打“√”,错的打“×”。 每题1分,共 5分) l、一个LL(1)文法一定是无二义的。………………………………………… ( ) 2、逆波兰式亦称前缀式。………………………………………………………( ) 3、目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。………( ) 4、正规文法产生的语言都可以用上下文无关文法来描述。…………………( ) 5、一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。 ………………………………………………………………………………( ) 二、填空题(每题2分,共20分) 1、语法分析是依据语言的( )规则进行的,中间代码产生是依据语言的 ( )规进行的。 2、程序语言的单词符号一般可以分为 ( )等等。 3、语法分析器的输入是( ),其输出是( )。 4、所谓自上而下分析法是指( )。 5、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( )。 6、对于文法G,仅含终结符号的句型称为( )。 7、逆波兰式ab+c+d*e-所表达的表达式为( )。 8、一个名字的属性包括( )和( )。 9、对于数据空间的存贮分配, FORTRAN采用( )策略, PASCAL采用( )策略。 10、所谓优化是指( )。 三、名词解释题(每题2分,共10分) l、词法分析器: 2、语法: 3、最右推导: 4、语法制导翻译: 5、基本块: 四、简述题(每题4分,共24分) l、考虑下面的程序: ………… Var i: integer; a:array[1••2] of integer; procedure Q(b); Var b: integer; Begin i:=1;b:=b+2; i =2;b:=b+3 End; Begin a[1]:=5; a[2]:=6; i:= 1; Q(a[i]); print(a[l],a[2]) End. 试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出 a[l], a[2]的值是什么? 2、画出识别pascal中实常数(可带正负号,但不含指数部分)的状态转换图。 3、已知文法G(S): S→a |(A) T→T,S | S 的优先关系如下: 4、写出表达式(a+b)/(a-b)-(a+b*c)的三元序列及四元序列。 5、符号表的作用是什么?符号表的查找和整理技术有哪几种? 6、何谓DISPLAY表?其作用是什么? 五、计算题(41分) 1、写一个文法使其语言为偶数集,且每个偶数不以0开头。(5分) 2、已知文法G(S): S→a |(T) T→T,S|S (1)给出句子(a,(a,a))的最左推导并画出语法树; (2)给出句型((T,s),a )的短语、直接短语、句柄。(8分) 3、把语句 if x>0 y>0 then z:=x+y else Begin x:=x+2 y:=y+3 End; 翻译成四元式序列。(6分) 4、设某语言的for语句的形式为 for i:=E(1) to E(2) do S 其语义解释为 i:=E(1) LIMIT:=E(2) again: if i<=LIMIT then Begin S; i:=i+1 goto again End; (1)写出适合语法制导翻译的产生式; (2)写出每个产生式对应的语义动作。(6分) 5、设文法G(S): S→S+aF | aF |+aF F→*aF | *a (1)消除左递归和回溯; (2)构造相应的First和Follow集合; (3)构造预测分析表。(10分) 6、对以下基本块 T1=2 T2:=A-B T3=A+B T4=T2*T3 T5=3*T1 T6=A-B T:=A+B T7=T6+L T8=T5*4 M:=T8+T7 L:=M (1)画出DAG图; (2)假设只有L在基本块出口之后还被引用,请写出优化后的四元式序列。(6分)