ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:232.84KB ,
资源ID:9002243      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9002243.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理平时作业答案0415160740.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理平时作业答案0415160740.docx

1、编译原理平时作业答案0415160740平时作业1对于下列语言分别写出它们的正规表达式。(1)英文字母组成的所有符号串,要求符号串中顺序包含五个元音。 答:令Letter表示除这五个元音外的其它字母。(letter) A(letter) E(letter) l(letter) O(letter) U(letter)(2)英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列* * *答:A B .Z工=0,1上的含偶数个1的所有串。答:(0|10 *1)*工=0,1上的含奇数个1的所有串。答:(0|10 *1)*1具有偶数个0和奇数个1的有0和1组成的符号串的全体答:设S是符合要求的串,

2、|S|=2k+1(k 0)。 则 SSiO|S2l, |Si|=2k(k0 ), |S2|=2k(k 0)。 且S是0,1上的串,含有奇数个 0和奇数个1。S2是0,1上的串,含有偶数个 0和偶数个1。考虑有一个自动机 M接受S1,那么自动机 M如下:C1I10Q0I11和L(M1)等价的正规表达式,即 S1为:(0 11)|(01|10)(00|11) *(01|10) *(01|10)(00|11) *类似的考虑有一个自动机 M接受S2,那么自动机 M如下:和L(M2)等价的正规表达式,即 S2为:(00|11)|(01|10)(00|11) *(01|10) *因此,S为: 答:不包含子

3、串011的由0和1组成的符号串的全体。1*|1 *0(0|10) *(1| ) 答:由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。 假设w的自动机如下:(00|11)|(01|10)(00|11)(00|11)|(01|10)(00|11)(01|10) (01|10)(00|11) 0|(01|10) 1对应的正规表达式:(1(01 *0)1|0)(1) 答:所有以00结束的符号串的集合。 所有具有3个0的符号串的集合。2给出接受下列在字母表0,1上的语言的DFAqo, q 2 ,3)qo, qi, q2,(1) DFA M=(0, 1,其中3定义如下:3( qo, 0)

4、 =q13( q1, 0) =q23( q0, 1) =q03( q1, 1) =q03( q2, 0) =q23( q2, 1) =q0正则表达式:1 *01*01*01DFA M=(0 , 1,q。,q1, q2, qs , q0, q 3,3)其中3定义如下:3( q0, 0) =q13( q1, 0) =q23( q2, 0) =qs3( q0, 1) =q03( q1, 1) =q13( q2, 1) =q23( qs, 1) =qs3下面是用正规式表示的变量声明:(int | float ) id (, id )* ;请改用上下文无关文法表示,也就是写一个上下文无关文法,它和该正规

5、式等价。答:D TL;T int | floatL L, id | id4试分析下面给出的if-the n-else 语句的文法,它的提出原本是为了矫正 dan gli ng-else ( 悬而未决的-else)文法的二义性:stmt f if expr then stmt|matched-stmtmatched- stmt f if expr the n matched -stmt else stmt|other试说明此文法仍然是二义性的。答:考虑句子 if e then if e then other else if e then other else other 它具有如下所示的两种分析

6、树 stmt expr then e if stmt if matched-stmt expr then matched-stmt e other if esle stmt matched-stmt expr the n matched-stmt e other esle stmt matched-stmt other stmt matched-stmt if expr the n matched-stmt e if esle stmt esle stmt matched-stmt expr the n e stmt other expr the n matched-stmt e other

7、if matched-stmt other则上面给出的if-then-else 文法仍是二义性的。5证明下面文法是SLR文法,并构造其SLR分析表Ef E+T|TTf TF|FFf F*|a|b答:该文法的拓广文法 G为(0)E f E(1) EfE+TEf T(3) TfTFTf F(5) FfF*Ff a(7) Ffb其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:10= E f E, E f E+T, E f T, T f TF, T f F, F f F*, Ff a, F f b11= E f E- , E f E +TI2 = E f T , T f T F, F

8、 f F*, F f a, F f b13 = T f F , F f F * I4 = F f a I5 = F f b I6 = E f E+ T, T f TF, T f F, F f F*, F f a, F f b I7 = T f TF , F f F * I8 = F f F* 求 FOLLOW集:FOLLOW(E)=+, $ I9 = E f E+T- , T f T F, F f F*, F f a, F f bFOLLOW(T)=+ , $ , a, bFOLLOW(F)=+ , $ , a, b, *构造的SLR分析表如下:狀态actionaot+ab$ETF034351

9、231S6a ccr 2r2S4 1S5r r273罔SB4r444r66r6rG6r?r7r7 nr7P r76S4S5937r3SBr3r3r38r5r5r5r5P r59r1S4S5rl7显然,此分析表无多重定义入口,所以此文法是 SLR文法。6为下面的文法构造LALR分析表S Ei E+T|TT (E)|a答:其拓广文法G:(0) S S (1) S E(2) E E+T (3) E T T (E) T aI 0 = S S, $, S |1 = S S , $ I I4 = T ( E), $/+, EI 5 = T a , $/+|7 = T (E ), $/+, E I9 = T

10、 ( E), )/+, E110 = T a ,)/+I13 = E E+- T, )/+, T构造其LR(1)项目集规范族和goto函数(识别活前缀的DFA)如下:T (E), $/+, T a, $/+3 = E T , $/+(E), )/+, T a, )/+ a, $/+ E, $, E E+T, $/+, E T, $/+,2 = S E- , $, E E- +T, $/+ I E+T, )/+, E T, )/+, T I 6= E E+- T, $/+, T (E), $/+, TE- +T, )/+ I 8= E T - , )/+ E+T, )/+, E T, )/+,

11、T (E), )/+, T a, )/+11 = E E+T- , $/+ I 12 = T (E) , $/+ (E), )/+, T a, )/+ I 14 = T (E - ), )/+, E E - +T, )/+合并同心的LR(1)项目集,得到LALR的项目集和转移函数如下:I 0 = S t S, $, S f E, $, E f E+T, $/+, E f T, $/+, T 宀(E), $/+, T a, $/+1 =S tS- , $ I 2=S te- , $, E te- +T, $/+I 3,8 = E TT , $/+/)4,9=T t( E), $/+/), Et

12、E+T, )/+, E t t, )/+,T T. (E), )/+, TT.a, )/+5,10=T t a , $/+/)I 6,13 = E t E+- T, $/+/), T t-(E), $/+/), T t a, $/+/)7,14=T t(E ), $/+/), EtE- +T, )/+ I 11,15 = E tE+T- , $/+/)12,16=T t (E) , $/+/)LALR分析表如下:STATEactiongotoA4()$sET055,10S4.9121acc2S6J3r13,3r3r3r343S5.107,145J0r5r5r5S5.1054,91L157J4S

13、6.13S12.1611,15r2r2r212.16r44rd7 (1)通过构造识别活前缀的 DFA和构造分析表,来证明文法 E E + id | id是SLR(1)文法 答:先给出接受该文法活前缀的 DFA如下:再构造SLR分析表如下:状态动作转移id + $E0s211s3 acc2r2 r 23s44r1 r 1表中没有多重定义的条目,因此该文法是SLR(1)的。(2)下面左右两个文法都和(1)的文法等价E E + M id | idE M E + id | idMM请指出其中有几个文法不是LR(1)文法,并给出它们不是LR(1)文法的理由 答:只有文法E M E + id | id不是

14、LR(1)文法。因为对于句子id+id+id来说,分析器在面临第一个 id时需要做的空归约次数和句子中 +id的个数一样多,而此时句子中 +id的个数是未知的。8 根据自上而下的语法分析方法,构造下面文法的 LL( 1)分析表D TLT int | realL id RR , id R |答:先计算FIRST和FOLLOWFIRST(D) = FIRST(T) = i nt,realFIRST(L) = idFIRST(R) = ,门FOLLOW(D) = FOLLOW(L) = $FOLLOW(T) = idFOLLOW(R) = $LL(1)分析表如下:intrealidJ$DD - TL

15、D - TLTT - intT - realLL - id RRR - ,id RR - 9下面的文法产生的表达式是对整型和实型常数应用算符 +形成的。当两个整数相加时,结果仍为整 数,否则就是实数。i E+T|T T num num num(a)给出一个语法制导定义以确定每个子表达式的类型。(b)扩充(a)中的语法制导定义把表达式翻译成前缀形式,并且决定类型。使用一元算符in ttoreal 把整型值转换成相等的实型值,以使得前缀形式中的 +的两个操作对象是同类型的。答:(a):产生式语义规则E E1+TIF (E1.type=in teger) and (T.type=in teger)

16、THENE.type:=in tegerELSEE.type:=realE TE.type:=T.typeT num.numT.type:=realT numT.type:=in teger(b):产生式语义规则E E1+TIF (E1.type=in teger) and (T.type=in teger) THEN BEGINE.type:=in tegerPrint( + ,E1.val,T.val)ENDELSE BEGINE.type:=realIF E1.type=i nteger THENBegi nE1.type:=realE1.val:=i nttoreal(E1.val)E

17、ndIF T.type:=i nteger THENBegi nT.type:=realT.val:=in ttoreal(T.val)EndPrint( + ,E1.val,T.val)ENDE TE.type:=T.typeE.val:=T.valT num.numT.type:=realT.val:= num.nu mlexvalT numT.type:=in tegerT.val:= nu mlexval10假设说明是由下列文法产生的:X id LL ,id L|:TT integer | real(a)建立一个翻译模式,把每一个标识符的类型加入到符号表中(b)从(a)中的翻译模式构造

18、一个预翻译程序。答:产生式翻译模式D idLD.Type:=L.Typeaddtype( id .entry, D.type)L ,idL1L.Type:=L1.Typeaddtype( id .entry, L.type)L :TL.type:=T.typeT in tegerT.type:=i ntegerT realT.type:=real(b):Procedure D;beginIf lookahead=id the nBegi nMatch(id);D.type=L;addtype(id.e ntry,D.type) endelseerrorendFunction L: DataTy

19、pe;BeginIf lookahead= , thenBeginMatch(,);If lookahead=id the nbeginmatch(id);L.Type=L; addtype(id.e ntry,L.type); return(L.type)endElseerrorEndElse if lookahead= : thenBeginMatch(:);L.Type=T; return(L.Type)endelseerrorEndFunction T: DataType; BeginIf lookahead=in teger the n Begi nMatch(i nteger);

20、retur n(i nteger) endelse If lookahead=real the nBeg inMatch(real); return(real) endelseerrorend11为下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式 E的符号(即值大于零还是小于零)记录在属性 E.sign中(属性值分别用POS或 NEG表示)。你可以假定所有的整数都不 为零,这样就不用担心零的符号。E E *E | + E | E | un sig ned_i nteger答: _E E1 *Eif E1. sign= E2. sign then E sign := POS els

21、e E. sign := NEG E + E E. sign := E1. sign E E1 if E1. sign = POS then E. sign := NEG else E. sign := POSE unsigned_integer E. sign := POS12为下面文法写一个语法制导的定义,用S的综合属性val给出下面文法中S产生的二进制数的值。例如,输入101.101时,S. val := 5.625(不得修改文法。)S L . R | LL L B | BR B R | BB 0 | 1答:SL . RS. val:=L.val + R.valSLS. val:=L.v

22、alLL1 BL.val :=L 1. val2 + B. valLBL. val:=B.valRB R1R.val :=(R1. val + B. val )/2RBR.val :=B.val /2B0B.val :=0B1B.val :=113试问下面的程序将有怎样的输出?分别假定:(a)传值调用(call-by-value );(b) 弓丨用调用(call-by-referenee );(c)复制恢复(copy-restore );(d)传名调用(call-by-name )。program main(input,output );procedure p (x,y,z );beg iny

23、:= y + 1;z:= z + x ;end;begi na:= 2;b:= 3;p(a + b,a,a);print aend.答:1).传地址:所谓传地址是指把实在参数的地址传递给相应的形式参数。在过程段中每个形式参数都有一对应的单元,称为形式单元。形式单元将用来存放相应的实在参数的地址。当调用一个过程时,调用段必须领先把实在参数的地址传递到一个为被调用段可以拿得到的地方。当程序控制转入被调用段之后,被调用段首先把实参地址捎进自己相应的形式单元中,过程体对形式参数的任何引用1或赋值都被处理成对形式单元的间接访问。当调用段工作完毕返 回时,形式单元(它们都是指示器)所指的实在参数单元就持有

24、所指望的值。2).传结果:和“传地址”相似(但不等价)的另一种参数传递力法是所谓“传结果”。这种方法的实质是,每个形式参数对应有两个申元,第 1个单元存放实参的地址,第2个单元存放实参的值。在过程体中对形参的任何引用或赋值都看成是对它的第 2个单元的直接访问。但在过程工作完毕返回前必须把第 2个单元的内容行放到第1个单元所指的那个实参单元之中。3).传值:所谓传值,是一种简单的参数传递方法。调用段把实在参数的值计算出来并存放在一个被调用段可以拿得到的地方。被调用段开始丁作时,首先把这些值抄入形式中元中,然后就好像使用局部名一样使用这些形式单元。如果实在参数不为指示器,那末,在被 调用段中无法改

25、变实参的值。4).传名:所谓传名,是一种特殊的形一一实参数结合方式。解释“传名”参数的意义:过程调用的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都替换成相应的实在参数(文字替换)。它与采用“传地址”或“传值”的方式所产生的结果 均不相同。(a)2 ;(b)8 ;(c)7 ;(d)9。14对以下的Pascal程序画出过程c第二次被激活时的运行栈,控制链和访问链。说明在c中如何访 问变量X。program env ;procedure a ;var x:i nteger ; procedure b ; procedure c ;begin x:=2 ; b end;

26、 procedure c beg in c end; procedure b begin b end; procedure abeg in a end. ma in答:envI aaBmi ivm BMarn maa icontrol linkaccess linkcontrol linkaccess linkx-bcontrol linkaccess linkcontrol link access linkcontrol linkaccess linkcontrol linkaccess link说明:c中沿着存取链向前走两步,到过程 a的活动记录中就可以访问到变量 x。15下面给出一个C语言程序及其在SPARC/SUNT作站上经某编译器编译后的运行结果。从运行结 果看,函数func中4个局部变量i1, j1, f1, e1 的地址间隔和它们类型的大小是一致的,而 4个形式参数i, j, f, e 的地址间隔和它们的类型的大小不一致,试分析不

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1