




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理期末试题(一)二、选择题 (请在前括号内选择最确切的一项作为答案划一个勾,多划按错论 )(每个 4分,共 40 分)5构造编译程序应掌握1词法分析器的输出结果是A( )源程序B ( ) 目标语言A( ) 单词的种别编码BC ( ) 编译方法D ( ) 以上三项都是词在符号表中的位置6四元式之间的联系是通过实现的。C( ) 单词的种别编码和自身值D词自身值A ( ) 指示器B( ) 临时变量2 正规式 M 1 和 M 2 等价是指A ( ) M1 和 M2 的状态数相等B( )M1 和 M2 的有向边条数相等C ( ) M1 和 M2 所识别的语言集相等D( )M1 和 M2 状态数和有
2、向边条数相等3. 文法G : StxSx|y所识别的语言是A ( ) xyxB ( ) (xyx)*C. ( ) xnyxn(n 0D. ( ) x*yx*4.如果文法G是无二义的,则它的任何句子。_A( ) 最左推导和最右推导对应的语法树必定相同B( ) 最左推导和最右推导对应的语法树可能不同C( ) 最左推导和最右推导必定相同D( ) 可能存在两个不同的最左推导,但它们对应的语法树相同C( ) 符号表D( ) 程序变量7.表达式(A B) A (C V D)的逆波兰表示为A. ( ) AVBA CDVVAC ( ) AB V CD VA8. 优化可生成B( ) A VBCDD的目标代码。A
3、 ( ) 运行时间较短用存储空间较小( ) A VBA CDVB( ) 占C ( ) 运行时间短但占用内存空间大D ( ) 运行时间短且占用存储空间小9 下列优化方法不是针对循环优化进行的。A. ( ) 强度削弱B ( ) 删除归纳变C ( ) 删除多余运算D ( ) 代码外提第3页共 6 页10编译程序使用区别标识符的作用域。四、简答题( 20分)A. ( ) 说明标识符的过程或函数名2. 考虑文法 GS:B( ) 说明标识符的过程或函数的静态层次C( ) 说明标识符的过程或函数的动态层次S 7 (T) I a+S | aD. ( ) 标识符的行号T 7 T,S I S三、填空题 (每空 1
4、 分,共 10 分)消除文法的左递归及提取公共左因子。1计算机执行用高级语言编写的程序主要有两种途径: _解释_和_编译 _。2.扫描器是 _词法分析器 _,它接受输入的 _源解:消除文法 GS 的左递归:S7(T) I a+S I aT7 st,ST |提取公共左因子:程序 _,对源程序进行 _词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。S7(T) I aS S7 +S I T7STT7 ,STI 3自上而下分析法采用移进归约、错误处理、接受_等四种操作。3. 试为表达式 w+(a+b)*(c+d/(e-10)+8) 写出相应的逆波兰表示。4一个 LR 分析器包括
5、两部分:一个总控程序和解: w a b + c d e 10 - / + 8 + * +张分析表 _。4. 按照三种基本控制结构文法将下面的语句翻译5.后缀式abc-/所代表的表达式是a/(b-c)_。成四元式序列:6局部优化是在 _基本块 _范围内进行的一种优while (AC A B 1) C=C+1;else while (AA=A+2;。第9页共6页解:该语句的四元式序列如下(其中E1、E2和E3分别对应A C A B D、A1和AD ,并且关系运算符优先级高):100 (j,A,C,102)101 (j,亠113)102 (jaAd|aAb| eab#给出分析过程。判断该文法是否是
6、SLR(1)文法,若是构造相应分析表,并对输入串解:增加一个非终结符 S/后,产生原文法的增广文法有:S-AA- aAd|aAb| e下面构造它的LR(0)项目集规范族为:sbaAh=A-aAdAfaAbJIT,LtA-a.*Ad AT a述 A-aAd A今加AT11:hi ST般I.: 血T皆阳ATThrI:L: ATaA 记 ATaA 呛b!止今丛记I !1=!ATaA 出I : ATaAb*I.=从上表可看出,状态10和12存在移进-归约冲突,该文法不是LR(0)文法。对于10来说有: FOLLOW(A)Q a=b,d,# n a= 所以在I0状态下面临输入符号为 a时移进,为b,d,
7、#时归约,为其他时 报错。对于I2来说有也有与I0完全相同的结论。这就是说,以上的移进-归约冲突是可以解决的,因此该文法是 SLR(1)文法。其SLR(1)分析表为:ACTI0Habd0SiTiIs11acc2工1口133334口巴5X1IIri11对输入串ab#合出分析过程为:步骤符号栈输入串ACTLOMGOTO10#ab#202b#rj33023iaAb#S40234#aAb1501acc编译原理期末试题(二)二、填空题:2. 编译过程可分为(词法分析),(语法分析),(语义分析与中间代码生成),(优化)和(目标代码生成)五个阶段。3. 如果一个文法存在某个句子对应两棵不同的语法树,则称这
8、个文法是(4. 从功能上说,程序语言的语句大体可分为(执行性 )语句和5. 语法分析器的输入是( 单词符号),其输出是(语法单位6. 扫描器的任务是从( 源程序中)中识别出一个个(单词符号7. 符号表中的信息栏中登记了每个名字的有关的性质,如二义性的)。(说明性)语句两大类。)。)。(类型、种属、所占单元大小、地址)等等。 )8. 一个过程相应的DISPLAY表的内容为(现行活动记录地址和所有外层最新活动记录的地址10. 常用的两种动态存贮分配办法是(栈式)动态分配和(堆式)动态分配。11. 一个名字的属性包括(类型)和(作用域12. 常用的参数传递方式有(传地址),(传值),13. 根据优化
9、所涉及的程序范围,可将优化分成为14. 语法分析的方法大致可分为两类,一类是(分析法。15. 预测分析程序是使用一张(分析表) 。(传名)(局部优化) 自上而下,(循环优化),(全局优化)分析法,另一类是三个级别。(自下而上)和一个(符号栈)进行联合控制的。)态。17. 一张转换图只包含有限个状态,其中有一个被认为是(初)态 ;而且实际上至少要有一个(终19.语法分析是依据语言的(语法)规则进行。中间代码产生是依据语言的(语义)规则进行的。21. 一个文法G,若它的预测分析表 M不含多重定义,则该文法是(LL(1)文法)文法。22. 对于数据空间的存贮分配,FORTRAN采用(静态策略,PAS
10、CAL采用(动态)策略。24.最右推导亦称为(规范推导),由此得到的句型称为(规范)句型。26. 对于文法G,仅含终结符号的句型称为(句子)。27. 所谓自上而下分析法是指(从开始符号出发,向下推导,推出句子)29.局限于基本块范围的优化称( 31.2型文法又称为(上下文无关)文法;3型文法又称为(正则局部优化)文法。32. 每条指令的执行代价定义为(指令访问主存次数加1)33. 算符优先分析法每次都是对(最左素短语)进行归约。三、名词解释题:1. 局部优化 局限于基本块范围的优化称。2. 二义性文法 如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法。3. DISPLAY
11、表-过程的嵌套层次显示表,记录该过程的各外层过程的最新活动记录的起始地址。5. 最左推导-任何一步a =3都是对a中的最右非终结符替换。6. 语法-一组规则,用它可形成和产生一组合式的程序。7. 文法 描述语言的语法结构的形式规则。8. 基本块-指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。9. 语法制导翻译-在语法分析过程中,根据每个产生式所对应的语义子程序进行翻译的办法叫做语法 制导翻译。10. 短语-令G是一个文法,S划文法的开始符号,假定a35是文法G的一个句型,如果有a A5且则称3是句型a35相对非终结符 A的短语。
12、11. 待用信息-如果在一个基本块中,四元式 i对A定值,四元式j要引用A值,而从i到j有A的其它定值,则称j是四元式i的变量A的待用信息。12. 规范句型-由规范推导所得到的句型。13. 扫描器-执行词法分析的程序。14. 超前搜索-在词法分析过程中,有时为了确定词性,需超前扫描若干个字符。15. 句柄 一个句型的最左直接短语。16. 语法制导翻译-在语法分析过程中,根据每个产生式所对应的语义程序进行翻译的方法法制导翻译。17. 规范句型-由规范推导所得到的句型。18. 素短语-素短语是指这样一个短语,至少含有一个终结符,并且,除它自身外不再含任何更小的素短语。19. 语法-是组规则,用它可
13、形成和产生一个合式的程序。_20. 待用信息-如果在一个基本块中,四元式 i对A定值,四元式j要引用A值,而从i到j有A的其它定值,则称j是四元式i的变量A的待用信息。21. 语义-定义程序的意义的一组规则。四、简答题:1. 写一个文法G,使其语言为 不以0开头的偶数集。2. 已知文法G(S)及相应翻译方案“ 1” “ 2”“3”“ 4”St aAb printSt aprintAt as printAt cprint=之间没叫做语之间没输入acab,输出是什么?3. 已知文法G(S)St bAaAt (B | aBt Aa)写出句子b(aa)b的规范归约过程。4. 考虑下面的程序:p roc
14、edurep(x, y, z) ;beginy:=x+y;z:=z*z;endbeginA:=2;B:=A*2;P(A, A, B);Print A, Ben d.A, B的值是什么?试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出5. 文法G(S)St dABAt aA| aBt Bb| 描述的语言是什么?6. 证明文法G(S)St SaS| 是二义性的。7. 已知文法G(S)St baAt BS| dBt aA| bS | c的预测分析表如下abcd#sSt baSt baSt baAAt BSAt BSAt BSATdBBt aABt bSBtc给出句子adccd的分析过程。
15、8. 写一个文法 G,使其语言为 L(G)=a lbmclanbn| 1=0, m=1, n=29. 已知文法G(S):St a| (T)Tt T,S|S的优先关系表如下:关系a()Ja-.(.=.J.请计算出该优先关系表所对应的优先函数表。10.11.12.13.14.15.何谓优化?按所涉及的程序范围可分为哪几级优化?目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?一字母表2 =a, b,试写出 2上所有以a为首的字组成的正规集相对应的正规式。 基本的优化方法有哪几种?写一个文法G,使其语言为L(G)=ab ncn| n 0考虑下面的程序:第13页共6页a 的值是什么 ?a 的值
16、是什么 ?procedure p(x, y, z);beginy:=y+z;z:=y*z+xend;begina:=2;b:=3;p(a+b, b, a);print aend.试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出16. 写出表达式 ab*(c-d)/e的逆波兰式和三元序列。17. 证明文法 G(A)A t aA I (A)|是二义性的。18. 令2 =a,b,则正规式a b|b a表示的正规集是什么?19. 何谓DIS PLAY表?其作用是什么?20. 考虑下面的程序:procedure p(x, y, z) ; begin y:=y+2; z:=z+x;end be
17、gin a:=5; b:=2; p(a+b, a-b, a); print aend. 试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出21. 写一个文法 G, 使其语言为 L(G)=a nbncm| n0 为奇数, m0 为偶数 22. 写出表达式 a:=(b+c)*e+(b+c)/f 的逆波兰式和三元序列。23. 一个文法 G 别是 LL(1) 文法的充要条件是什么?24. 已知文法 GSSt S*aF | aF | *aF Ft +aF | +a 消除文法左递归和提公共左因子。25. 符号表的作用是什么?符号表查找和整理技术有哪几种? 答案: 1. 所求文法是 GS:StAB
18、 |B A0 AtAD |C Bt2 |4 |6 |8 Ct1 |3 |5 |7 |9 |B Dt0 |C2. 输出是 42313. 句子 b(aa)b 的规范归约过程:步骤符号栈输入串动作0#b(aa)b#预备1#b(aa)b#移进2#b(aa)b#移进3#b(aa)b#移进4#b(Aa)b#归约5#b(Ma)b#移进6#b(Ma)b#移进7#b(Bb#归约8#bAb#归约9#bAb#移进10#S#接受4. 传地址 A=6, B=16传值 A=2, B=45. L(G)=da nbm | n0, m 06. 证明:因为文法GS存在句子aa有两个不同的最左推导,所以文法GS是是二义性的。S=S
19、aS=SaSaS=aSaS=aaS=aaS=SaS=aS=aSaS=aaS=aa7. 句子adccd的分析过程:步骤符号栈输入串产生式0#Sadccd#1#ABadccd#S7 BA2#AAaadccd#B7 aA3#AAdccd#4#Addccd#A7d5#Accd#6#SBccd#A7 bs7#Scccd#B7c8#Scd#9#ABcd#B7c10#Acd#11#Ad#12#dd#A7d13#8. 所求文法是GS:S 7 ABA 7 aAc | DD7bD|bB7 aBb I aabb 9.11. 目标代码通常采用三种形式:机器语言,汇编语言,待装配机器语言模块。应着重考虑的问题:(1)
20、如何使生成的目标代码较短;(2) 如何充分利用寄存器,以减少访问内存次数;(3) 如何充分利用指令系统的特点。12. 正规式 a ( a | b )*。13. 删除多余运算,代码外提,强度削弱,变换循环控制条件,合并已知量,复写传播和删除无用赋值。14. 文法 GS:St aB | aB t be |bBc15. 传值 a=2 传地址a=15arg1 arg2 d(1)eopcba16. 逆波兰式:abcd-*e/+三元序列:(1)(2)(3)(4)17. 证明:因为文法GS存在句子()有两个不同的最左推导,所以文法GS是是二义性的。A=AA=(A)A=()A=()A=AA=A=(A)=()*
21、 *18. (a b|b a)=a,b,ab,ba,aab,bba19. Display 表:嵌套层次显示表由于过程嵌套允许内层过程引用外层过程定义的数据,因此,当一个过程运行时必须跟踪它的所有外 层过程的最新活动记录起始地址,dis play 表就是用于登记每个外层过程的最新活动记录起始地址。20. 传地址 a=12 传值 a=521. 所求文法是GS:St ACAt aaAbb | abCT ceC | cc22. 逆波兰式 abc+e*bc+f/+:=第17页共6页三元序列oparg1(1) +bc(2) *(1)e(3) +bc/(3)f(5) +(2)(6):=aarg223. 一个
22、文法G别是LL(1)(1) FIRST(文法的充要条件是:a ) n FIRST )=(2) 如果 3= , FIRST( a ) n FOLLOW(A)*24. 消除左递归St aFS | *aFS St *aFS |Ft+aF | +a 提公共左因子,文法G (S)St aFS | *aFS St *aFS |Ft+aFFt F | 25. 作用:登记源程序中出现的各种名字及其信息,以及了解各阶段的进展状况。 主要技术:线性表,对折查找,五、计算题:1.设文法G(S):St a | a | (T)Tt t,S | S消除左递归;杂奏技术。构造相应的 first和 构造预测分析表(1)消除左
23、递,文法变为GSt a | a | (T)Tt st | STt ,st | 此文法无左公共左因子。构造相应的 first和FOLLOW集合: FIRST(S)=a, a, (, FOLLOW(S)=#, , )FIRST(T)=a,人,(, FOLLOW(T)=FIRST(T )=, , FOLLOW(F)=)(3)构造预测分析表:FOLLOW集合;S:aa()J#SSTaSt人St (T)tTt stTt stTt stTTtTt ,ST 2. 语句 if E then S(1) 改写文法,使之适合语法制导翻译;(2) 写出改写后产生式的语义动作。3. 设文法G( S):St(T) | a
24、Tt T+S | S(1 )计算 FIRSTVT 和 LASTVT(2)构造优先关系表。4. 设某语言的for语句的形式为for i:= E1)to E do S其语义解释为i:=白LIMIT:aga in: if i=E=limit thenBeginS;i: = i + 1goto again End;( 1 )写出适合语法制导翻译的产生式;( 2)写出每个产生式对应的语义动作。5. 把语句 while a0 then a:=a+1 else a:=a*3-1;翻译成四元式序列。6. 设有基本块D:=A-CE:=A*CF:=D*ES:=2T:=A-CQ:=A*CG:=2*SJ:=T*QK:
25、=G*5L:=K+JM:=L假设基本块出口时只有M还被引用,请写出优化后的四元序列。7. 已知文法 G(S)St a | A | (T)Tt T,S | S(1) 给出句子 (a,(a,a)的最左推导;(2) 给出句型 (T,S),a)的短语 , 直接短语,句柄。8. 对于 C 语言 do S while E 语句(1) 改写文法,使之适合语法制导翻译;(2) 写出改写后产生式的语义动作。9. 已知文法 G(S)S t aAcBe A t Ab| b Btd(1) 给出句子 abbcde 的最左推导及画出语法树;(2) 给出句型aAbcde的短语、素短语。10. 设文法 G(S):St(T)
26、| aS | aTtT,S | S消除左递归和提公共左因子; 构造相应的 FIRST和FOLLOW!合;构造预测分析表。11. 把语句if X0 V Y0 do X:=A*3else Y:=B+3;翻译成四元式序列。12. 已知文法 G(S)E7E+T | TT 7T*F| FF7(E)| i(1) 给出句型 (i+i)*i+i 的最左推导及画出语法树;(2) 给出句型 (E+T)*i+F 的短语,素短语和最左素短语。13. 设文法 G(S):S7 T|S VTT7 u |T 人 UU7i |-U( 1)计算 FIRSTVT 和 LASTVT;( 2)构造优先关系表。第19页共 6 页答案:(
27、6)(:=,T1, _, a)2. (1)(7)(j, _, _, (1)Ct if E then(8)(*, a, 13 , T2)St CS(1)(9)(-,T2,1 , T3)(2)(10)(:=,T3, _, a)Ct ifE thenBACK(E.TC, NXQ);(11)(j,亠,(1)C.chai n:=E.FCSt cS1S.chai n:=MERG(C.Cha in,S.Chain)3. (1) FIRSTVT(S)=a, ( FIRSTVT(T)=+, aLASTVT(S)=a, ) LASTVT(T)=+, a, )a,(a+()a+(.F tfor i:=E (1) t
28、o E doSt FS(1)Ft for i:=E(1) to E doGEN(:=, E1.place, _, entry(i); F.p lace:=e ntry(i);LIMIT:=Newte mp;GEN(:=, E .place, _, LIMIT);Q:=NXQ;F.QUAD:=q;GEN(j , entry(i), LIMIT, q+2) F.chai n:=NXQ;GEN(j, _, _, 0)St FS(1)BACKPATCH(S .chain, NXQ); GEN(+, F. place, 1, F.p lace); GEN(j,亠,F.QUAD);S.chai n:=F.
29、chai n5.(1) (j, c,0 , (5)(j, _, _, (8)(+, a, 1 , T1)6. 优化后的四元序列D:=A-CE:=A*CF:=D*EM:=F+207. 最左推导S=(T)=(T,S)=(S,S)=(a,S)=(a,(T) )=(a,(T,S)=(a,(S,S)=(a,(a,S)=( a,(a,a)短语(T,S),a)(T,S),a(T,S)T,Sa直接短语T,Sa句柄T,S8. (1)St do M1 S1 while M 2 E(2)MtM.quad=nestquad;S t do MSiback patch(s i.n extlist, Mback patch
30、(E.truelist, Mwhile M E2.quad);i.quad);S.n extlist=E.falelist;9. (1) S=aAcBe=AAbcBe=abbcBe=abbcde(2)短语:aAbcde, Ab, d 素短语:Ab, d10. (1) St (L) I aS St s I &Lt SLLt ,SL (2)FIRST(S )=a,(,FIRST(L)=a,I &FIRST(S)=a,(第23页共6页FIRST(L )=, 门FOLLOW(S)=,FOLLOW(S )=, ), #FOLLOW(L)=FOLLOW )= )(3),#)FIRSTVT(U)=i, -L
31、ASTVT(S)=V ,A , i, - LASTVT(T)=A , i, -LASTVT(U)=i, -()a5#SS(L)SfaSSSSS fSfSS fSfLLfSLLfSLL f ,SLLL fiVAS.V.A.-., X, 0, (5)(j, _, _, (3) (j0, X, 0, (7) (j, _, _, (7) (*, A, 3, T (:=,T (j, _, _, (j, _, _, (+, B, 3, (:=,T1)1, _, N)(5) (13)T2)2, _, Y)=(F+T)*F+T=(i+T)*F+T=(i+F)*F+T=(i+i)*F+T=(i+i)*i+T=(
32、i+i)*i+F=(i+i)*i+i(2)(E+T)*i,13.(1)短语i, F,(E+T)*i+F 素短语i, E+T 最左素短语E+TFIRSTVT(S)=V , FIRSTVT(T)= A ,E+T,(E+T),A , i,i, -(2)(3)(4)(5)(6)(8)(9)(10)(11)(12)12.(1)E=E+T=T+T=T*F+T=F*F+T=(E)*F+T=(E+T)*F+T=(T+T)*F+Taddr=-1073743068 请解释为什么输出结果有区别。2,则结果是area=12.566360,第16页共 6 页编译原理期末试题main()float s, pi, r;1。
33、1 、描述由正规式 b*(abb*)*(a| ) 定义的语言, 并画出接受该语言的最简DFA 。2、证明文法 E E + id | id是SLR(1)文法。3、下面是表达式和赋值语句的文法,其中and 的类型是 bool boolbool ,+的类型是 int int int,=的类型是 int int bool, := 要求 id 和 E 的类型都是 int 或者 都是 bool 。为该文法写一个语法制导定义或 翻译方案,它完成类型检查。S id := EE E and E | E + E | E = E |id4、对于下面 C 语言文件 s.cf1(int x)long x;x = 1;f
34、2(int x)long x; x = 1;某编译器编译时报错如下:s.c: In function f1 :s.c:3: warning: declaration of shadows a parameter 请回答,对函数 f2 为什么没有类似的警告 错误。5、下面 C 语言程序经非优化编译后,若运 行时输入 2,则结果是area=12.566360, addr=-1073743076 经优化编译后,若运行时输入pi=3.14159;scanf(%f, &r);printf(area=%f, addr=%dn, s=pi*r*r, &r);6、描述由正规式 b a(bb a) b 定义的语
35、言, 并画出接受该语言的最简DFA 。7、下面的文法产生代表正二进制数的0 和 1的串集:BB 0 | B 1 | 1下面的翻译方案计算这种正二进制数 的十进制值:B1 0 B. val := B 1.val 2 B1 1 B. val := B1.val 2+11 B. val := 1 请消除该基础文法的左递归, 再重写一 个翻译方案, 它仍然计算这种正二进制数的 十进制值。8、在 C 语言中,如果变量 i 和 j 都是 long 类型,请写出表达式 &i 和表达式 &i &j 的类 型表达式。为帮助你回答问题,下面给出一 个程序作为提示,它运行时输出main() long i, j; p
36、rintf( “%dn ”,&i &j);9、一个 C 语言的函数如下:func(i) long i; long j;j = i -1; func(j); 下面左右两边的汇编代码是两个不同版本 GCC 编译器为该函数产生的代码。左边的 代码在调用 func 之前将参数压栈,调用结 束后将参数退栈。 右边代码对参数传递的处 理方式没有实质区别。 请叙述右边代码对参数传递的处理方式并推测它带来的优点。func:最简DFA如下:2、先给出接受该文法活前缀的DFA如下:func:pus pushlmov movlsubl sublE岳dE%ebp idl %esp, %ebp %es p, %eb p
37、$4,i%es p$8, %es PE + id 冲I2和ImomovldeflE8(%eb P), %edx8(%ebp2, %eax%edx|0和I3都只有移进项目,肯定不会引起 4都无移进项目并仅含一个归约Ii 中,E 2个项目的展望符 Ii也肯定不会引起冲E突。+由此可以断定该文法是EsLRti)的。|4项目,也肯定不会引起冲突;在 的后继符号只有$,同第 号“ + ”不一样,因此I3decl%eaxmovl %edx, -4(%eb p) movl%eax, -4(%eb p)-4(%eb p), %eax -4(%eb p), %eaxI %eax %eax, (%es p)fun
38、cfunc$4, %es pmovl movlpushl movlcall calladdileaveleaveretret编译原理试卷八答案1、由正规式b*(abb*)*(a|)定义的语言是字母表a, b上不含子串aa的所有start3、语法制导定义如下。S id := E S.type := if(id .type = bool and E.type = bool) or (id .type = int and E.type = int)then typ e_ok else typ e_error E Ei and E2 E.type := ifEi.type = bool and E2.
39、type = bool then bool else typ e_error E Ei + E2 E.t ype := if Ei.t ype =int and E2.type = int then int else typ e_error E Ei = E2=int and E2.type E.t ype := if Ei.t ype =int then bool elsetyp e_error E idlook up (id.e ntry) E.t ype4、对于函数f1,局部变量x声明的作用域 是整个函数体,导致在函数体中不可能访问 形式参数x。由于这是一个合法的 C语言函 此编译器给出
40、警告错误。第31页共6页a,b的串对于函数f2,由于局部变量x的作用域 只是函数体的一部分,不会出现上述问题, 因而编译器不报错。5、 使用非优化编译时,变量 S, pi, r在局部 数据区都分配4个字节的空间。使用优化编 译时,由于复写传播,pi*r*r 变成3.14159*r*r,pi=3.14159成为无用赋值而删 去,函数中不再有 pi的引用,因此不必为 pi分配空间。类似地,s=3.14159*r*r也是一 个无用赋值(表达式要计算,但赋值是无用 的),也不必为S分配空间。这样,和非优 化情况相比,局部数据区少了 8个字节,因 此r的地址向高地址方向移动了8个字节。6、正规式b a(
41、bb a) b体现的特点是,每个 a的左边都有若干b,除非a是第一个字母。 该正规式定义的语言是:至少含一个 不含子串aa的所有a和 集。最简DFA如下:将所有参数退栈(常数n根据调用前做了多 少次PushI来决定)。右边的编译器版本:除了为局部变量分 配空间外,同时还为本函数中出现的函数调 用的参数分配空间, 并且参数所用空间靠近 栈顶。调用函数前,用 movl指令将参数移 入栈顶,调用结束后无需参数退栈指令。优点是每次函数调用结束后不需要执 行addl $n, %esp指令,另外增加优化的可能 性。7、的类型表达式是pointer(long), 的类型表达式是long。按照C 指向同一个类
42、型的两个指针可消除左递归后的文法:B 1 BB 0 B | 1 B相应的翻译方案如下:B1 B .i := 1 BB. val :=B .valB0 B 1.i := B .i2 B 1B.val :=B1 .val|1 B 1.i := B .i2 +1 B 1B.val :=B1 .val|B .val := B .i表达式& 表达式& &j 语言的规定, 以相加减,它们值的差是它们之间的元素个 数。9、左边的编译器版本:一般只为局部变量 分配空间。调用函数前,用若干次Pushi指令将参数压栈,返回后用addl $n, %esp 次编译原理期末试题(三)1、从优化的范围的角度,优化可以分哪
43、两类?对循环的优化可以有哪三种?答:从优化的范围的角度,优化可以分为局部优化和全局优化两类;对循环的优化有三种:循环不变表达式外提、归纳变量删除与计算强度削减。2、写出表达式a=b*c+b*d对应的逆波兰式、四元式序列和三元式序列。答:逆波兰式:abc*bd*+:=b(Ma)bb(Ma)b(1) (*,b,c,t 1)(1) (*b,c )(*,b,d,t 2)(2) (*b,d )(+,t1,t 2, t3)(3) (+(1),(2)(4)(:=,t3,/,a)(:=(3),a)四元式序列:三元式序列:0P ARG1 ARG23、对于文法(SbMbM(L |aLMa)答:1)2)短语: 直接短语:Ma), (Ma),Ma)句柄:Ma)S bMb b(Lb设有字母表a,b上的正规式R=(ab|a)*。(2)将(1)所得的非确定有限自动机确定化ab-01131221(3)对(2)得到的DFA化简,合并状态0和2为状态2:-+ba+(4)令状态G: ATaB|a| ;1和2分别对应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国茶文化专题教学设计
- 广告投放合同范本(初稿)
- 2025-2030教育科技产品行业市场应用场景及创新趋势与融资策略分析报告
- 2025-2030教育大数据分析服务应用场景拓展与商业化路径研究
- 2025-2030教育信息化云服务平台采购模式变革与区域发展差异分析
- 2025-2030放射性药物供应链稳定性与应急保障机制研究报告
- 2025-2030换电重卡运营经济性测算与基础设施投资回报分析
- 2025-2030换电模式与充电模式经济性比较及融合发展策略报告
- 2025-2030抗菌药物耐药性监测体系构建与临床应用管理建议报告
- 2025-2030抗菌肽生物农药替代传统化学农药的市场渗透率分析报告
- 中国移动长春市2025秋招笔试性格测评专练及答案
- 2.1.4大气的水平运动课件高中地理鲁教版必修一
- 2025年雅思写作真题解析试卷及答案
- 动火作业现场安全防护设施布置与维护更新方案
- 2025国家统一法律职业资格考试考试真题及答案
- 2025年高考化学试卷(湖南卷)(解析卷)
- 河湖划界评审汇报
- 小学英语词汇语法知识点归纳总结
- 核心素养导向课堂教学反思
- 骨科PDCA持续质量改进
- 车辆应急安全培训课件
评论
0/150
提交评论