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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(附录一第二篇第5章语义分析中语义子程序的设计C型程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

附录一第二篇第5章语义分析中语义子程序的设计C型程序.docx

1、附录一第二篇第5章语义分析中语义子程序的设计C型程序附录一-第二篇第5章语义分析中语义子程序的设计(C型程序)附录一 第二篇第5章语义分析中语义子程序的设计(C型程序)实习题5.2 基于自顶向下方式翻译方案的属性值计算关于所给翻译方案的各个语义子程序(C型)可设计如下: void _1( ) /* R.i:=T.val */ NR=分析栈tops.结点序号; U=注释分析树NR.文法符号序号;NT=注释分析树NR.左兄结点序号;NTval=search(NT,val); /*实现参看实习题5.1,下同*/ Tval=属性信息表NTval.属性值; PTval=Dpointer(NTval,NU

2、LL);/*实现参看实习题5.1,下同*/ A=A+1; 属性信息表A=A,U,i,I,Tval,PTval,NR;/*实现参看实习题5.1,下同*/注释分析树NR.属性信息链=Apointer(A,NULL);/*由下面两行实现,下同 */*pA=Apointer(A,NULL); /指向属性结点注释分析树NR.属性信息链=pA; */void _2( ) /* E.val:=R.s */ NR=CurR; /*CurR是全局变量*/NRs=search(NR,s); Rsval=属性信息表NRs.属性值;PRs=Dpointer(NRs, NULL);NE=注释分析树NR.父结点序号;U=

3、注释分析树NE.文法符号序号;A=A+1;属性信息表A=A,U,val,I,Rsval,PRs,NE;注释分析树NE.属性信息链=Apointer(A,NULL);void _3( ) /* R1.i:=R.i+T.val */ NR1=分析栈tops.结点序号; U=注释分析树NR1.文法符号序号;NR=注释分析树NR1.父结点; NRi=search(NR,i);NT=注释分析树NR.左兄结点序号;NTval=search(NT,val);PTval=Dpointer(NTval, NULL); PRi=Dpointer(NRi, PTval); R1ival=属性信息表NRi.属性值+属

4、性信息表NTval.属性值;A=A+1;属性信息表A=A,U,i,I,R1ival,PRi,NR1;注释分析树NR1.属性信息链=Apointer(A,NULL); void _4( ) /* R.s:=R1.s */ NR1=CurR; NR1s=search(NR1, s);R1sval=属性信息表NR1s.属性值;PR1sval=Dpointer(NR1s, NULL);NR=注释分析树NR1.父结点序号;CurR=NR;U=注释分析树NR.文法符号序号;A=A+1;属性信息表A=A,U,s, I,R1sval, PR1sval, NR;/*把属性信息表序号A链入注释分析树中结点NR的属

5、性信息链*/pA=Apointer(A,NULL);/*指向属性结点*/注释分析树NR.属性信息链=AppendAlink(pA, 注释分析树NR.属性信息链); void _5( ) /* R1.i:=R.i-T.val */ NR1=分析栈tops.结点序号; U=注释分析树NR1.文法符号序号;NR=注释分析树NR1.父结点; NRi=search(NR, i);NT=注释分析树NR.左兄结点序号;NTval=search(NT,val);R1ival=属性信息表NRi.属性值属性信息表NTval.属性值;PTval=Dpointer(NTval, NULL); PRi=Dpointer

6、(NRi, PTval); A=A+1;属性信息表A=A,U,i, I,R1ival, PRi, NR1;注释分析树NR1.属性信息链=Apointer(A,NULL); void _6( ) /* R:= R.s:=R.i */ NR=注释分析树N.父结点序号; CurR=NR;U=注释分析树NR.文法符号序号;NRi=search(NR, i); Rsval=属性信息表NRi.属性值;PRi=Dpointer(NRi,NULL);A=A+1;属性信息表A=A,U,s, I,Rsval, PRi, NR;注释分析树NR.属性信息链=Apointer(A,NULL);void _7( ) /*

7、T:=(E T.val:=E.val )*/ NE=注释分析树N.左兄结点序号;NEval=search(NE,val);Eval=属性信息表NEval.属性值;PEval=Dpointer( NEval, NULL);NT=注释分析树NE.父结点序号;U=注释分析树NT.文法符号序号; A=A+1;属性信息表A=A,U,val, I,Eval, PEval, NT;注释分析树NT.属性信息链=Apointer(A,NULL);void _8( ) /* T:=n T.val:=n.lexval */ nval=STOI(Inputk); /*STOI进行数字字符串到整值的转换*/ U=n在V

8、T中的序号;A=A+1; 属性信息表A= A,U,lexval, I,nval, NULL, N ;NT=注释分析树N.父结点; U=注释分析树NT.文法符号序号;Pnval=Dpointer(A, NULL);A=A+1; 属性信息表A= A,U,val,I,nval,Pnval,NT ;注释分析树NT.属性信息链=Apointer(A,NULL);其中函数AppendAlink可定义如下:属性结点类型 *AppendAlink(属性结点类型 *back, 属性结点类型 *front) /*把属性信息链back链入front的最后结点之后*/p=front; q=NULL;while(p!=

9、NULL) q=p; p=p-下一属性结点;if(q)q-下一属性结点=back;else front=back;return front;实习题5.4 赋值语句目标代码生成赋值语句目标代码生成的C型伪代码程序如下:void 基于LR(1)分析技术生成赋值语句目标代码( ) /*输入符号串在读入缓冲区Input中*/置初值;/*从输入符号串建立语法分析树末端结点符号串,并填属性信息表*/m=0; N=0;for(j=1; j=输入符号串长度; j+) m=m+1; N=N+1; 注释分析树N=N,Inputm在VT中的序号, 0,0,0, NULL;/* 实现参看实习题5.1,其中Inputm

10、在VT中的序号如下求得:for(k=1; k0) tops=tops+1; 分析栈tops=act, k;/*由构造法,k即结点序号*/Rcontinue=0; /*false*/continue; /*转向Rwhile循环开始处*/ if(act=0) 输出“出错,当前输入符号为:”;输出VTR;Scontinue=0; Rcontinue=0; /*false*/continue; /*转向Rwhile循环开始处 */* act0 归约*/act=-act; /* 建立分支名字结点,并建立父子兄弟结点关系*/U=翻译方案act.左部符号序号;m=翻译方案act.右部长度; /* 若可能规则

11、右部长度等于零,执行下列if语句 */if(m=0) N=N+1; 注释分析树N= N,0,0,0,0, NULL;tops=tops+1; 分析栈tops=0, N;m=1;右子结点序号=分析栈tops.结点序号;N=N+1; /* 分支名字结点*/注释分析树N=N,U,0,0,右子结点序号,NULL;bro=0;for(j=1; j下一目标指令=NULL; */strcpy(属性信息表NEplace.属性值, t); 属性信息表NEcode.属性值=Ecode;Ni=分析栈tops-2.结点序号;Niplace=search(Ni,name); Acode=copycode(Ecode,A

12、code);C1=Ipointer( MOV|属性信息表NEplace.属性值 |属性信息表Niplace.属性值, NULL);/* C1=(目标指令类型 *)malloc(sizeof(目标指令类型);strcpy(C.OP,MOV); strcpy(C.源,属性信息表NEplace.属性值); strcpy(C.目标,属性信息表Niplace.属性值);C1-虚拟机指令=C; C1-下一目标指令=NULL; */Acode=AppendCode(C1,Acode);PEcode=Dpointer(NEcode,NULL); PEplace=Dpointer(NEplace,PEcode)

13、; Piplace=Dpointer(Niplace,PEplace);A=A+1;属性信息表A=A,U,code, M,Acode, Piplace, N;注释分析树N.属性信息链=Apointer(A,NULL);/*实现参看实习题5.2 */void _2( ) /* E:=E1+E2 */ Ntemp=Ntemp+1; A=A+1; 属性信息表A=A,U,place,S, r|ITOS(Ntemp),NULL,N;NEl=分析栈tops-2.结点序号; NE1code=search(NEl, code);NE2=分析栈tops.结点序号; NE2code=search(NE2, cod

14、e);E1code=属性信息表NE1code.属性值; E2code=属性信息表NE2code.属性值;Ecode=copycode(E1code,Ecode); Ecode=mergecode(E2code,Ecode);NE1place=search(NEl, place); NE2place=search(NE2, place);C2=Ipointer(ADD|属性信息表NE2place.属性值|属性信息表A.属性值, NULL);C1=Ipointer(MOV|属性信息表NE1place.属性值|属性信息表A.属性值, C2);Ecode=AppendCode(C1, Ecode);P

15、E2place=Dpointer(NE2place,NULL);PE1place=Dpointer(NE1place,PE2place);PE2code=Dpointer(NE2code, PE1place ); PE1code=Dpointer(NE1code,PE2code);PA1=Apointer(A,NULL);/*指向属性结点*/A=A+1; 属性信息表A=A,U,code, M,Ecode, PE1code,N;注释分析树N.属性信息链=Apointer(A,PA1); void _3( ) /* E:=E1*E2 */ Ntemp=Ntemp+1; A=A+1; 属性信息表A=

16、A,U,place,S, r|ITOS(Ntemp),NULL,N; NEl=分析栈tops-2.结点序号; NE1code=search(NEl, code); NE2=分析栈tops.结点序号; NE2code=search(NE2, code); E1code=属性信息表NE1code.属性值; E2code=属性信息表NE2code.属性值;Ecode=copycode(E1code,Ecode); Ecode=mergecode(E2code,Ecode);NE1place=search(NEl, place); NE2place=search(NE2, place);C2=Ipoi

17、nter(MPY|属性信息表NE2place.属性值|属性信息表A.属性值, NULL);C1=Ipointer(MOV|属性信息表NE1place.属性值|属性信息表A.属性值, C2);Ecode=AppendCode(C1,Ecode); PE2place=Dpointer(NE2place,NULL); PE1place=Dpointer(NE1place,PE2place);PE2code =Dpointer(NE2code,PE1place);PE1code=Dpointer(NE1code,PE2code);PA1=Apointer(A,NULL); A=A+1; 属性信息表A=

18、A,U,code,M,Ecode, PE1code, N;注释分析树N.属性信息链=Apointer(A,PA1);void _4( ) /* E:=-E1 */ Ntemp=Ntemp+1; A=A+1;属性信息表A=A,U,place,S, r|ITOS(Ntemp),NULL,N;NE1=分析栈tops.结点序号; NE1code=search(NE1, code);E1code=属性信息表NE1code.属性值;Ecode=copycode(E1code, Ecode); NE1place=search(NE1,place);C2=Ipointer(NEG|属性信息表A.属性值, NU

19、LL);C1=Ipointer(MOV|属性信息表NE1place.属性值|属性信息表A.属性值,C2);Ecode=AppendCode(C1,Ecode);PE1place=Dpointer(NE1place,NULL); PE1code=Dpointer(NE1code,PE1place);PA1=Apointer(A, NULL); A=A+1; 属性信息表A=A,U,code,M, Ecode, PE1code, N;注释分析树N.属性信息链=Apointer(A,PA1);void _5( ) /* E:=(E1) */ NE1=分析栈tops-1.结点序号; NE1place=s

20、earch(NE1, place);PE1place=Dpointer(NE1place,NULL);A=A+1;属性信息表A=A,U,place, S, 属性信息表NE1place.属性值,PE1place, N;PA1=Apointer(A, NULL);NE1code=search(NE1, code); PE1code=Dpointer(NE1code,NULL); A=A+1;属性信息表A=A,U,code, M, 属性信息表NE1code.属性值,PE1code, N;注释分析树N.属性信息链=Apointer(A,PA1);void _6( ) /* E:= i */ Ni=分析

21、栈tops.结点序号; Niplace=search(Ni, name);Piplace=Dpointer(Niplace, NULL); A=A+1; 属性信息表A=A,U,place,S, 属性信息表Niplace.属性值,Piplace, N;PA1=Apointer(A, NULL);A=A+1;属性信息表A=A,U,code, M, NULL,NULL, N;注释分析树N.属性信息链=Apointer(A,PA1);其中,函数ITOS可定义如下:char * ITOS (int N) d=N; k=0; while(d!=0) sk+=d%10+0; d=d/10; for(j=k-

22、1; jk/2; j-) t=sj; sj=sk-1-j; sk-1-j=t; sk=0;return s;实习题5.5 条件语句目标代码生成关于条件语句翻译方案的部分语义子程序_j(j=1,2,11)(C型)可设计如下:void _1( ) /* S:=if(B)S1 else S2 */ Nlabel=Nlabel+1; A=A+1; /* S.next:=newlabel */属性信息表A= A,U,next,S, L|ITOS(Nlabel), NULL, N; PSnext=Dpointer(A, NULL);/*指向依赖属性结点*/PA1=Apointer(A,NULL); /*指

23、向属性结点*/Nlabel=Nlabel+1; NB=分析栈tops-4.结点序号;A=A+1; /* .true:=newlable */属性信息表=A,注释分析树NB.文法符号序号,true,S, L|ITOS(Nlabel), NULL, NB;PA=Apointer(A,NULL); 注释分析树NB.属性信息链=AppendAlink(PA,注释分析树NB.属性信息链);Nlabel=Nlabel+1; A=A+1; /* B.false:=newlabel */属性信息表A=A,注释分析树NB.文法符号序号,false, S, L|ITOS(Nlabel), NULL, NB;PA=Apointer(A,NULL); 注释分析树NB.属性信息链=AppendAlink(PA,注释分析树NB.属性信息链);NS1=分析栈tops2.结点序号; A=A+1; /* S1.next:=S.next*/属性信息表= A,注释分析树NS1.文法符号序号,next, S, 属性信息表A3.属性值,PSnext,NS1;PA=Apointer(A,NULL); 注释

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

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