一、填空题(每题2分,共20分)1、语法分析是依据语言的规则进行的,中间代码产生是依据语言的规则进行的。2、程序语言的单词符号一般可以分为等等。3、语法分析器的输入是,其输出是。4、所谓自上而下分析法是指。5、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是。6、对于文法G,仅含终结符号的句型称为。7、逆波兰式ab+c+d*e-所表达式为。8、一个名字的属性包括和。9、对于数据空间的存贮分配,FORTRAN采用策略,PASCAL采用策略。10、所谓优化是指。二、名词解释(每题2分,共10分)1、词法分析器2、语法3、最右推导4、语法制导翻译5、基本块三、简述题(每题4分,共24分)1、考虑下面程序...........Vari:integer;a:array[1..2]ofinteger;procedureQ(b);Varb:integer;begini:=1;b:=b+2;i:=2;b:=b+3End;begina[1]:=5;a[2]:=6;i:=1;Q(a[i]);print(a[1],a[2])END.试问:若参数传递的方式分别采用传地址和传值时,程序执行后输出a[1],a[2]的值是什么?2、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。3、已知文法G(S):S→a|(T)T→T,S|S的优先关系表如下:关系a(),a--;;(=)--,请计算出该优先关系表所对应的优先函数表。4、写出表达式(a+b)/(a-b)-a(a+b*c)的三元式序列及四元序列。5、符号表的作用是什么?符号表的查找的整理技术有哪几种?6、所谓DISPLAY表?其作用是什么?四、计算题(共41分)1、写一个文法,使其语言是偶数集,且每个偶数不以0开头。(5分)2、已知文法G(S):S→a|∧|(T)T→T,S|S⑴给出句子(a,(a,a))的最左推导并画出语法树;⑵给出句型((T,S),a)的短语、直接短语、句柄。(8分)3、把语句ifx0∧y0thenz:=x+yelsebeginx:=x+2;y:=y+3END;翻译成四元式序列。(6分)4、设某语言的for语句的形式为fori:=E(1)TOE(2)doS其语义解释为i:=E(1);LIMIT:=E(2);again:ifi=LIMITthenBEGINS;i:=i+1;gotoagainEND;⑴写出适合语法制导翻译的产生式;⑵写出每个产生式对应的语义动作。(6分)5、设文法G(S):S→S+aF|aF|+aFF→*aF|*a⑴消除左递归和回溯;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表(10分)6、对以下基本块T1:=2T2:=A-BT3:=A+BT4:=T2*T3T5:=3*T1T6:=A-BL:=A+BT7:=T6*LT8:=T5*4M:=T8+T7L:=M⑴画出DAG图;⑵假设只有L在基本块出口之后还被引用,请写出优化后的四元式序列。(6分)参考答案一、填空题1、语法、语义2、基本字、标识符、常量、算符、界符3、单词符号串、语法单位4、从开始符号出发,向下推导,推出句子5、二义的6、句子7、(a+b+c)*d-e8、类型、作用域9、静态存储分配、动态存储分配10、对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码二、名词解释1.词法分析器——指执行词法分析的程序。2.语法——一组规则,用它可以形成和产生一个合式的程序3.最右推导——指对于一个推导序列中的每一步直接推导,被替换的总是当前符号串中的最右非终结符号。4.语法制导翻译——在语法分析过程中,根据每个产生式所对应的语义子程序进行翻译的办法叫做语法制导翻译。5.基本块——指程序中一个顺序执行的语句序列,其中只有一个入口,一个出口,入口即第一个语句。出口即最后一个语句。三、简述题1、答:传地址:a=10,b=6;(2分)传值:a=5,b=6。(2分)3、答:优先函数表如下(f函数2分,g函数2分)函数a(),f4244g5523????????????????????????????4、答:三元式2分⑴.(+,a,b)⑵.(-,a,b)⑶.(/,⑴,⑵)⑷.(*,b,c)⑸.(+,a,⑷)⑹.(-,⑶,⑸)四元式2分⑴.(+,a,b,T1)⑵.(-,a,b,T2)⑶.(/,T1,T2,T3)⑷.(*,b,c,T4)⑸.(+,a,T4,T5)⑹.(-,T3,T5,T6)5、答:作用:登记源程序中出现的各种名字及其信息,以及编译各阶段的进展状况。(2分)主要技术:线性表,对折查找与二叉树,杂凑技术。(2分)6、答:display表是层次显示表。由于过程嵌套允许内层过程引用外层过程定义的数据,因此,当一个过程运行时必须跟踪它的所有外层过程的最新活动记录起始地址,而display表就是用于登记每个外层过程的最新活动记录起始地址。四、计算题1、答:文法G(S):S→AB|B|A0A→AD|CB→2|4|6|8C→1|3|5|7|9|BD→0|C2、答:最左推导:(2分)S=(T)=(T,S)=(S,S)=(a,S)=(a,(T))=(a,(T,S))=(a,(S,S))=(a,(a,S))=(a,(a,a))语法树:(2分,此处略)3、答:⑴(j,x,0,3)⑵(j,-,-,8)⑶(j,y,0,5)⑷(j,-,-,8)⑸(+,x,y,T1)⑹(:=,T1,-,Z)⑺(j,-,-,12)⑻(+,x,2,T2)⑼(:=,t2,-,X)⑽(+,Y,3,t3)⑾(:=,T3,-,y)⑿(控制结构3分,其它3分)4、答:⑴(2分)F→fori:=E(1)toE(2)doS→FS(1)⑵(每个语义动作2分)F→fori:=E(1)toE(2)do{GEN(:=,E(1).place,-,entry(i));F.place:=entry(i);LIMIT:=Newtemp;GEN(:=,E(2).place,-,LIMIT);:=NXQ;F.QUAD:=q;GEN(j≤,entry(i),LIMIT,q+2)F.chain:=NXQ;G)j,-,-,0)}S→FS(1){BACKPATCH(S(1).chain,NXQ);GEN(+,F.place,1,F.place);GEN(j,-,-,F.QUAD);S.chain:=F.chain}5、答:⑴(消除左递归2分,提公共左因子2分)S→aFS'|+aFS'S'→+aFS'|εF→*aF'F'→F|ε⑵(3分)FIRST(S)={a,+}FOLLOW(S)={#}FIRST(S')={+,ε}FOLLOW(S')={#}FIRST(F)={*}FOLLOW(F)={+,#}FIRST(F')={*,ε)FOLLOW(F')={+,#}⑶(3分)-a+*#SS→aFS'S→+aFS'--S'-S'→+aFS'-S'→εF--F→*aF'-F'-F'→εF'→FF'→ε6、答:⑴DAG(3分,此处略)⑵四元式序列:(3分)T2:=A-BT3:=A+BT4:=T2*T3L:=T4+24