第十一章--小型编译程序ppt课件

上传人:re****.1 文档编号:579342795 上传时间:2024-08-26 格式:PPT 页数:247 大小:421.50KB
返回 下载 相关 举报
第十一章--小型编译程序ppt课件_第1页
第1页 / 共247页
第十一章--小型编译程序ppt课件_第2页
第2页 / 共247页
第十一章--小型编译程序ppt课件_第3页
第3页 / 共247页
第十一章--小型编译程序ppt课件_第4页
第4页 / 共247页
第十一章--小型编译程序ppt课件_第5页
第5页 / 共247页
点击查看更多>>
资源描述

《第十一章--小型编译程序ppt课件》由会员分享,可在线阅读,更多相关《第十一章--小型编译程序ppt课件(247页珍藏版)》请在金锄头文库上搜索。

1、第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第十一章第十一章 小型编译程序小型编译程序11.1高级语言到四元式的编译程序PAS11.2 四元式到汇编语言程序的编译程序COMPILER第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用11.1 高级语言到四元式的编译程序高级语言到四元式的编译程序PAS/*/*pas.c*/*高级语言到四元式*/*

2、/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#includetdio.h#includestring.h#defineACC-2/*/#definesy_if0#definesy_then1#definesy_else2第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#definesy_while3#definesy_begin4#defi

3、nesy_do5#definesy_end6#definea7#definesemicolon8#definee9第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18/*Eand*/#defineEO19/*Eor*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额

4、为消费者购买商品的价款或接受服务的费用#defineplus34#definetimes36#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42#definelparent4#definerparent49#defineident56#defineintconst57第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/charch=0 ; /*当前字符*/intcount=0;

5、staticcharspelling10= ;/*存放识别的字*/staticcharline81= ;/*一行字符缓冲区*/char*pline ;/*字符缓冲区指针*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用staticcharntab110010;struct ntabinttc;intfc;ntab2200;intlabel=0;/*存放临时变量的表的定义*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的

6、要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用struct rwordscharsp10;intsy;/*存放文件的结构*/structrwordsreswords10= if,sy_if,do,sy_do,else,sy_else,while,sy_while,then,sy_then,第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用begin,sy_begin,end,sy_end,and,op_and,or,op_or,not,op

7、_not;structaaintsy1;intpos;buf1000;/*词法分析结果缓冲区*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用n;/*当前字符*/n1;/*当前表达式中的字符*/E;/*非终结符*/sstack100;/*符号栈*/ibuf100,stack1000;structaaoth;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受

8、服务的费用structfourexpcharop10;structaaarg1;structaaarg2;intresult;fexp200;/*四元式的结构*/intssp=0;/*指向sstack100*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用structaa*pbuf=buf;/*指向词法分析缓冲区*/intnlength=0;intlnum=0;/*源程序长度*/int tt1=0;FILE*cfile;FILE*mfile;第十一章第十一章 小型编译

9、程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/intnewt=0;/*临时变量*/intnxq=100;/*nxq指向下一个形成的四元式的地址*/intlr;intlr1;intsp=0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*状态栈定义*/intstack1100;intsp1=0;/*状态栈1的定义*/intnum=0;structllintnxq

10、1;inttc1;intfc1;labelmark10;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用intlabeltemp10;intpointmark=-1,pointtemp=-1;intsign=0;/*sign1,表达式为赋值语句;sign2,表达式为布尔表达式。*/*/staticintaction1913=/*0*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,1,-1,/*1*/-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

11、ACC,-1,-1,/*2*/-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*3*/-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,/*4*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,8,/*5*/-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1,/*6*/-1,10,-1,-1,-1,-1,-1,-1,-1

12、,-1,-1,-1,-1,/*7*/-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,/*8*/-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,/*9*/-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1,/*10*/ 2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1,/*11*/ 2,-1,-1,3,4,-1,-1,5,-1,-1,-1,15,-1,第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消

13、费者购买商品的价款或接受服务的费用/*12*/ -1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1,/*13*/ 2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16,/*14*/ -1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*15*/ -1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1,/*16*/ -1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1,/*17*/ 2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1,/*18*/

14、-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用staticintaction1107=/*0*/3,-1,-1,2,-1,-1,1,/*1*/-1,4,5,-1,-1,ACC,-1,/*2*/3,-1,-1,2,-1,-1,6,/*3*/104,104,104,104,104,104,-1,/*4*/3,-1,-1,2,-1,-1,7,/*5*/3,-1,-1,2,-1,-1,8,/

15、*6*/-1,4,5,-1,9,-1,-1,/*7*/101,101,5,101,101,101,-1,/*8*/102,102,102,102,102,102,-1,/*9*/103,103,103,103,103,103,-1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用staticintaction21611=/*0*/1,-1,4,-1,5,-1,-1,-1,13,7,8,/*1*/-1,2,-1,101,-1,101,101,101,-1,-1,-1,/*

16、2*/3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*3*/-1,-1,-1,102,-1,102,102,102,-1,-1,-1,/*4*/1,-1,4,-1,5,-1,-1,-1,11,7,8,第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*5*/1,-1,4,-1,5,-1,-1,-1,6,7,8,/*6*/-1,-1,-1,104,-1,9,10,104,-1,-1,-1,/*7*/1,-1,4,-1,5,-1,-1,-1,14,7,8

17、,/*8*/1,-1,4,-1,5,-1,-1,-1,15,7,8,/*9*/105,-1,105,-1,105,-1,-1,105,-1,-1,-1,/*10*/107,-1,107,-1,107,-1,-1,107,-1,-1,-1,第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*11*/-1,-1,-1,12,-1,9,10,-1,-1,-1,-1,/*12*/-1,103,-1,103,-1,103,103,103,-1,-1,-1,/*13*/-1,-1,

18、-1,-1,-1,9,10,ACC,-1,-1,-1,/*14*/-1,-1,-1,106,-1,9,10,106,-1,-1,-1,/*15*/-1,-1,-1,108,-1,9,10,108,-1,-1,-1;/*从 文 件 读 一 行 到 缓 冲 区*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用readline()charch1;pline=line;ch1=getc(cfile);while(ch1!= n)*pline=ch1;pline+;ch1=ge

19、tc(cfile);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用*pline=0;pline=line;/*从缓冲区读一个字符*/readch()if(ch=0)readline();lnum+;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用ch=*pline;pline+;/*标 志 符 和 关 键 字 的 识 别*/find(chars

20、pel)intss1=0;intii=0;while(ss1=0)&(ii=a)&(ch=0)&(ch=9);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用pline-;spellingk= 0;while(ss=0)&(iii10)if(!strcmp(spelling,reswordsiii.sp)ss=1;iii+;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买

21、商品的价款或接受服务的费用/*关键字匹配*/if(ss=1)bufcount.sy1=reswordsiii-1.sy;elsebufcount.sy1=ident;j=find(spelling);if(j=-1)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用bufcount.pos=tt1;strcpy(ntab1tt1,spelling);tt1+;nlength+;elsebufcount.pos=j;count+;for(k=0;k=0)&(ch=9);第十

22、一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用bufcount.sy1=intconst;bufcount.pos=ivalue;count+;pline-;/*扫描主函数*/scan()第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用inti;while(ch!= )switch(ch)case:break;casea:caseb:casec:第

23、十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用cased:casee:casef:caseg:caseh:casei:casej:casek:casel:casem:casen:caseo:第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用casep:caseq:caser:cases:caset:caseu:casev:casew:casex:c

24、asey:casez:第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 identifier();break;case0:case1:case2:case3:case4:case5:case6:case7:case8:case9:number();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用break;case)bufcount.pos=4;

25、elsebufcount.pos=1;pline-;bufcount.sy1=rop;count+;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case:readch();if(ch=)bufcount.pos=2;elsebufcount.pos=3;pline-;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用bufcount

26、.sy1=rop;count+;break;case(:bufcount.sy1=lparent;count+;break;case) :bufcount.sy1=rparent;count+;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case#:bufcount.sy1=jinghao;count+;break;case+:bufcount.sy1=plus;count+;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务

27、有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case*:bufcount.sy1=times;count+;break;case: :readch();if(ch=)bufcount.sy1=becomes;count+;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case=:bufcount.sy1=rop;bufcount.pos=5;count+;break;case; :bufcou

28、nt.sy1=semicolon;count+;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用readch();bufcount.sy1=-1;/*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用readnu()if(pbuf-sy1=0)n.sy1=pbuf-sy1;n.pos=pbuf-pos;pbuf+;第十一章第十一章 小

29、型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*中间变量的生成*/newtemp()newt+;returnnewt;/*生 成 四 元 式*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用gen(char op1 ,struct aa arg11,struct aa arg22,intresult1)strcpy(fexpnxq.op,op1);fexpnx

30、q.arg1.sy1=arg11.sy1;fexpnxq.arg1.pos=arg11.pos;fexpnxq.arg2.sy1=arg22.sy1;fexpnxq.arg2.pos=arg22.pos;fexpnxq.result=result1;nxq+;returnnxq-1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*布尔表达式的匹配*/merg(intp1,intp2)intp;if(p2=0)returnp1;elsep=p2;while(fexpp

31、.result!=0)p=fexpp.result;fexpp.result=p1;returnp2;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用backpatch(intp,intt)inttempq;intq;q=p;while(q!=0)tempq=fexpq.result;fexpq.result=t;q=tempq;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费

32、者购买商品的价款或接受服务的费用/*/change1(intchan)switch(chan)caseident:caseintconst:return0;caseplus:return1;casetimes:return2;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用caselparent:return3;caserparent:return4;casejinghao:return5;casetempsy:return6;第十一章第十一章 小型编译程序小型编译程序

33、 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用change2(intchan)switch(chan)caseident:caseintconst:return0;caserop:return1;caselparent:return2;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用caserparent:return3;caseop_not:return4;caseop_and:re

34、turn5;caseop_or:return6;casejinghao:return7;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用casetempsy:return8;caseEA:return9;caseEO:return10;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*赋值语句的分析*/lrparse1(intnum)lr1=a

35、ction1stack1sp1change1(n1.sy1);if(lr1=-1)printf(n算术表达式或赋值语句出错!n);getch();exit(0);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(lr1=0)sp1+;stack1sp1=lr1;if(n1.sy1!=tempsy)ssp+;num+;sstackssp.sy1=n1.sy1;sstackssp.pos=n1.pos;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有

36、欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用n1.sy1=ibufnum.sy1;n1.pos=ibufnum.pos;lrparse1(num);if(lr1=100)&(lr1E+E*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case102:E.pos=newtemp();gen(*,sstackssp-2,sstackssp,E.pos+100);ssp=ssp-2;sstackssp.sy1=

37、tempsy;sstackssp.pos=E.pos;sp1=sp1-3;break;/*E-E*E*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case103:E.pos=sstackssp-1.pos;ssp=ssp-2;sstackssp.sy1=tempsy;sstackssp.pos=E.pos;sp1=sp1-3;break;/*E-(E)*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其

38、受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case104:E.pos=sstackssp.pos;sp1-;break;/*E-i*/n1.sy1=tempsy;/*规约后为非终结符*/n1.pos=E.pos;lrparse1(num);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(lr1=ACC)&(stack1sp1=1)/*归约A-i:=E*/gen(:= ,sstackssp,oth,ibuf0.pos);ssp=ssp-3;sp

39、1=sp1-3;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*布 尔 表 达 式 的 分 析*/lrparse2(intnum)inttemplabel;lr1=action2stack1sp1change2(n1.sy1);if(lr1=-1)if(sign=2)printf(nwhile语句出错!n);if(sign=3)printf(nif语句出错!n);getch();exit(0);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈

40、行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(lr1=0)sp1+;stack1sp1=lr1;ssp+;sstackssp.sy1=n1.sy1;sstackssp.pos=n1.pos;if(n1.sy1!=tempsy)&(n1.sy1!=EA)&(n1.sy1!=EO)num+;n1.sy1=ibufnum.sy1;n1.pos=ibufnum.pos;lrparse2(num);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购

41、买商品的价款或接受服务的费用if(lr1=100)&(lr1i*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case102:ntab2label.tc=nxq;ntab2label.fc=nxq+1;switch(sstackssp-1.pos)case0:gen(j=,sstackssp-2,sstackssp,0);break;case1:gen(j=,sstackssp-2,sstackssp,0);break;case3:gen(j,sstackssp-2

42、,sstackssp,0);break;case4:gen(j,sstackssp-2,sstackssp,0);break;case5:gen(j=,sstackssp-2,sstackssp,0);break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用gen(j,oth,oth,0);ssp=ssp-3;sp1=sp1-3;label+;n1.sy1=tempsy;break;/*E-iropi*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者

43、服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case103:label=label-1;ssp=ssp-3;sp1=sp1-3;label+;n1.sy1=tempsy;break;/*E-(E)*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case104:label=label-1;templabel=ntab2label.tc;ntab2label.tc=ntab2label.fc;ntab2

44、label.fc=templabel;ssp=ssp-2;sp1=sp1-2;label+;n1.sy1=tempsy;break;/*E-notE*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case105:backpatch(ntab2label-1.tc,nxq);label=label-1;ssp=ssp-2;sp1=sp1-2;label+;n1.sy1=EA;break;/*EA-E(1)and*/第十一章第十一章 小型编译程序小型编译程序 经营者提供

45、商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case106:label=label-2;ntab2label.tc=ntab2label+1.tc;ntab2label.fc=merg(ntab2label.fc,ntab2label+1.fc);ssp=ssp-2;sp1=sp1-2;label+;n1.sy1=tempsy;break;/*E-EAE(2)*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款

46、或接受服务的费用case107:backpatch(ntab2label-1.fc,nxq);label=label-1;ssp=ssp-2;sp1=sp1-2;label+;n1.sy1=EO;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case108:label=label-2;ntab2label.fc=ntab2label+1.fc;ntab2label.tc=merg(ntab2label.tc,ntab2label+1.tc);ssp=ssp

47、-2;sp1=sp1-2;label+;n1.sy1=tempsy;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用lrparse2(num);if(lr1=ACC)return1;/*测试字符是否为表达式中的值(不包括; )*/test(intvalue)switch(value)caseintconst:caseident:caseplus:casetimes:第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者

48、的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用casebecomes:caselparent:caserparent:caserop:caseop_and:caseop_or:caseop_not:return1;default:return0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/lrparse()inti1=0;intnum=0;/*指向表达式缓冲区*/if(test(n.sy1)if(stacksp.sy1=sy_

49、while)sign=2;elseif(stacksp.sy1=sy_if)sign=3;elsesign=1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用doibufi1.sy1=n.sy1;ibufi1.pos=n.pos;readnu();i1+;while(test(n.sy1);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*把

50、表达式放入缓冲区*/ibufi1.sy1=jinghao;pbuf-;/*指针后退1,需要吗?*/sstack0.sy1=jinghao;ssp=0;/*符号栈底的初始化*/if(sign=1)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用sp1=0;stack1sp1=0;/*状态栈1的栈底初始化*/num=2;/*指向:=*/n1.sy1=ibufnum.sy1;n1.pos=ibufnum.pos;lrparse1(num);/*处理赋值语句*/n.sy1=a;

51、/*当前文法符号置为a(赋值语句)*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(sign=2)|(sign=3)pointmark+;labelmarkpointmark.nxq1=nxq;sp1=0;stack1sp1=0;num=0;n1.sy1=ibufnum.sy1;n1.pos=ibufnum.pos;lrparse2(num);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失

52、,增加赔偿的金额为消费者购买商品的价款或接受服务的费用labelmarkpointmark.tc1=ntab2label-1.tc;labelmarkpointmark.fc1=ntab2label-1.fc;/*处理布尔语句*/*在处理完E,要回填真值链*/backpatch(labelmarkpointmark.tc1,nxq);n.sy1=e;/*当前文法符号置为e(赋值语句)*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用lr=actionstacksp.p

53、osn.sy1;printf(stack%d=%dttn=%dttlr=%dn,sp,stacksp.pos,n.sy1,lr);if(lr=0)sp+;stacksp.pos=lr;stacksp.sy1=n.sy1;readnu();lrparse();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(lr=100)switch(lr)case100:break;/*S-S*/case101:printf(S-ifethenSthenSelseS归约n);sp=

54、sp-6;n.sy1=S;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*归约完if后,填then后面的无条件转移语句*/fexplabeltemppointtemp.result=nxq;pointtemp-;if(stacksp.sy1=sy_then)gen(j,oth,oth,0);backpatch(labelmarkpointmark.fc1,nxq);pointtemp+;labeltemppointtemp=nxq-1;第十一章第十一章 小型编译程序

55、小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用pointmark-;if(stacksp.sy1=sy_do)gen(j,oth,oth,labelmarkpointmark.nxq1);backpatch(labelmarkpointmark.fc1,nxq);break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*S-ifethenSthenSelseS*/ca

56、se102:printf(S-whileedoS归约n);sp=sp-4;n.sy1=S;pointmark-;if(stacksp.sy1=sy_do)gen(j,oth,oth,labelmarkpointmark.nxq1);backpatch(labelmarkpointmark.fc1,nxq);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(stacksp.sy1=sy_then)gen(j,oth,oth,0);fexplabelmarkpointm

57、ark.fc1.result=nxq;pointtemp+;labeltemppointtemp=nxq-1;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*S-whileedoS*/case103:printf(S-beginLend归约n);sp=sp-3;n.sy1=S;if(stacksp.sy1=sy_then)gen(j,oth,oth,0);backpatch(labelmarkpointmark.fc1,nxq);pointtemp+;l

58、abeltemppointtemp=nxq-1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(stacksp.sy1=sy_do)gen(j,oth,oth,labelmarkpointmark.nxq1);backpatch(labelmarkpointmark.fc1,nxq);getch();break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的

59、价款或接受服务的费用/*S-beginLend*/case104:printf(S-a归约n);sp=sp-1;n.sy1=S;if(stacksp.sy1=sy_then)gen(j,oth,oth,0);backpatch(labelmarkpointmark.fc1,nxq);pointtemp+;labeltemppointtemp=nxq-1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(stacksp.sy1=sy_do)gen(j,oth,oth,

60、labelmarkpointmark.nxq1);backpatch(labelmarkpointmark.fc1,nxq);break;/*S-a*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case105:printf(归约n);sp=sp-1;n.sy1=L;break;/*L-S*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用c

61、ase106:printf(L-S;L归约n);sp=sp-3;n.sy1=L;break;/*L-S;L*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用getch();pbuf-;lrparse();if(lr=ACC)returnACC;/*disp1*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用disp1()inttemp1=0;

62、printf(n*词法分析结果*n);for(temp1=0;temp1count;temp1+)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用printf(%dt%dn,buftemp1.sy1,buftemp1.pos);if(temp1=20)printf(Pressanykeytocontinue.n);getch();getch();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加

63、赔偿的金额为消费者购买商品的价款或接受服务的费用/*/disp2()inttemp1=100;printf(n*四元式分析结果*n);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用for(temp1=100;temp1100)fprintf(mfile, n);fprintf(mfile, %dt,temp1);fprintf(mfile, (%st, ,fexptemp1.op);if(fexptemp1.arg1.sy1=ident)fprintf(mfile,

64、%st, ,ntab1fexptemp1.arg1.pos);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseif(fexptemp1.arg1.sy1=tempsy)fprintf(mfile, T%dt, ,fexptemp1.arg1.pos);elseif(fexptemp1.arg1.sy1=intconst)fprintf(mfile, %dt, ,fexptemp1.arg1.pos);elsefprintf(mfile, t, );第十一章第十一

65、章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(fexptemp1.arg2.sy1=ident)fprintf(mfile, %st, ,ntab1fexptemp1.arg2.pos);elseif(fexptemp1.arg2.sy1=tempsy)fprintf(mfile, T%dt, ,fexptemp1.arg2.pos);else第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金

66、额为消费者购买商品的价款或接受服务的费用if(fexptemp1.arg2.sy1=intconst)fprintf(mfile, %dt, ,fexptemp1.arg2.pos);elsefprintf(mfile, t, );第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(fexptemp1.op0!= j)if(fexptemp1.result=100)fprintf(mfile, T%dt) ,fexptemp1.result-100);elsefpri

67、ntf(mfile, %st) ,ntab1fexptemp1.result);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elsefprintf(mfile, %dt) ,fexptemp1.result);if(temp1=20)printf(nPressanykeytocontinue.n);getch();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的

68、价款或接受服务的费用getch();disp3()inttttt;printf(nn程序总共%d行,产生了%d个二元式!n,lnum,count);getch();printf(n*变量表*n);for(tttt=0;tttttt1;tttt+)printf(%dt%sn,tttt,ntab1tttt);getch();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*主程序*/main()cfile=fopen(pas.dat, r);mfile=fopen(pas

69、.med, w);/*打开c语言源文件*/readch();/*从源文件读一个字符*/scan();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*词法分析*/disp1();disp3();stacksp.pos=0;stacksp.sy1=-1;/*初始化状态栈栈底*/stack1sp1=0;/*初始化状态栈栈底*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买

70、商品的价款或接受服务的费用oth.sy1=-1;printf(n*状态栈变化过程及规约顺序*n);readnu();/*从二元式读一个字符*/lrparse();getch();/*四元式的分析*/disp2();printf(n程序结束。谢谢使用!n);printf(COPYRIGHTBYZ.Y.P2001.6.7);getch();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用11.2 11.2 四元式到汇编语言程序的编译程序四元式到汇编语言程序的编译程序COMP

71、ILERCOMPILER1. COMPILER的组成编译程序COMPILER由1个工程文件,5个*.h文件,6个*.C文件组成。(1)1个工程文件为compiler.prj第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(2)5个*.h文件为globals.hread.hsymtab.hblock.hcgen.h第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或

72、接受服务的费用(3)6个*.C文件为main.cread.csymtab.cblock.ccode.ccgen.c第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2. 工程文件/*/*compiler.prj*/*四元式到汇编工程文件*/*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用D:tc源程序main.cD:tc源程序read.cD:t

73、c源程序symtab.cD:tc源程序block.cD:tc源程序code.cD:tc源程序cgen.c第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3. *.h文件/*/*文件:globals.h*/*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#ifndef_GLOBALS_H_#define_GLOBALS_H_#include#i

74、nclude#include#include#ifndefFALSE#defineFALSE0#endif第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#ifndefTRUE#defineTRUE1#endif/*四元式的结构类型*/typedefstructMLanguageunsignedintline;charop4;charopv110;charopv210;charresult10;structMLanguage*next;*ml;第十一章第十一章 小型编译

75、程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*符号表每个元素的结构*/typedefstructVariableReccharname10;intregstats;intregnum;structvariableRec*next;*vr;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用externFILE*source;/*中间代码的源文件*/externFILE*

76、code;/*汇编语言的目标文件*/#endif/*/*文件:read.h*/*读取中间语言源文件的接口。*/*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#ifndef_READ_H_#define_READ_H_/*过程read_mlanguage读取源文件以指定格式输入到内存。*/voidread_mlanguage();#endif/*/*文件:symtab.h*/*访问符号表的接口。*/*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服

77、务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#ifndef_SYMTAB_H_#define_SYMTAB_H_/*过程st_insert把程序变量插入符号表。*/voidst_insert(charname,vrTable);/*过程insert根据变量是变量还是临时变量,然后执行st_insert过程把不同的变量插入相应的符号表。*/voidinsert(charname);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品

78、的价款或接受服务的费用/*建立符号表的函数,变量和临时变量保存在不同的符号表中。*/voidbuildsymtab();/*在符号表中查找变量,返回所需变量在符号表中的地址。*/vrst_lookup(charname,vrTable);/*判断是变量还是临时变量,然后在不同的符号表中查找*/vrlookup(charname);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*建立数据段的主程序,临时变量不存入数据段。*/voidcreate_dataseg();#

79、endif/*/*文件:block.h*/*建立基本块的接口。*/*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#ifndef_BLOCK_H_#define_BLOCK_H_/*过程create_basicblock为中间语言建立基本块,并按行号从小到大的顺序排列。*/voidcreate_basicblock();#endif/*/*文件:cgen.h*/*执行中间语言的分析,调用相应的子程序*/*来完成汇编代码的产生的接口。*/*/第十一章第十一章 小型编译

80、程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#ifndef_CGEN_H_#define_CGEN_H_/*过程codegen产生汇编目标语言的初始化程序段,*/*并调用相应的函数产生程序的数据段和代码段,*/*字符串变量codefile为目标文件的文件名,*/*用于在编译过程中作为注释在屏幕上打印出文件名。*/voidcodegen(char*codefile);#endif第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的

81、损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4. *.c文件/*/*文件:main.c*/*中间语言编译的主程序。*/*/#includeglobals.h#includeread.h#includesymtab.h#includeblock.h#includecgen.h第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*allocateglobalvariables*/FILE*source;FILE*code;intError=FALSE;main(

82、)charfilename20,*codefilename,ch;/*中间代码源文件名*/printf(是否从键盘输入四元式(y/n)?: );ch=getch();if(ch!=y)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用printf(n请输入源文件的文件名:);scanf(%s,filename);if(strchr(filename,. )=NULL)strcat(filename, .med);source=fopen(filename, r);if(s

83、ource=NULL)fprintf(stderr, n文件%s没有找到!n,filename);exit(1);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(!Error)intfnlen=strcspn(filename, . );codefilename=(char*)calloc(fnlen+5,sizeof(char);strncpy(codefilename,filename,fnlen);strcat(codefilename, .asm);cod

84、e=fopen(codefilename, w);if(code=NULL)printf(不能打开%s文件!n,codefilename);exit(1);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用read_file(filename);buildsymtab();create_basicblock();codegen(codefilename);fclose(source);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照

85、消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseprintf(n请输入要生成的汇编语言的文件名: );scanf(%s,filename);if(strchr(filename,. )=NULL)strcat(filename, .asm);code=fopen(filename, w);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(code=NULL)printf(n不能打开%s文件!n,filename);exi

86、t(1);read_keyboard();buildsymtab();create_basicblock();codegen(filename);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用fclose(code);printf(n);printf(n*编译过程结束,请查阅%s文件!*n,codefilename);printf(n谢谢使用!);getch();return0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消

87、费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/*文件:read.c*/*从源文件中读取四元式,或从键盘输入四元式。*/*/#includeglobals.hmlml_line;/*中间语言变量名*/charspelling10= ;/*存放识别的字*/*从文件读取一个字到内存单元。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用voidgetword()inti=0;charch;ch=getc(source);while

88、(ch!= t)spellingi=ch;i+;ch=getc(source);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用spellingi=0;/*从文件读取四元式,输入到内存。*/voidread_file(char*sourcefile)intline;/*四元式行号从100开始*/mlk,l;charch;printf(n正在读取四元式源文件%s!. ,sourcefile);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,

89、应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用ml_line=(ml)malloc(sizeof(structMLanguage);fscanf(source, %d,&line);ml_line-line=line;fseek(source,2,1);getword();strcpy(ml_line-op,spelling);fseek(source,1,1);getword();strcpy(ml_line-opv1,spelling);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔

90、偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用fseek(source,1,1);getword();strcpy(ml_line-opv2,spelling);fseek(source,1,1);getword();strcpy(ml_line-result,spelling);ml_line-next=NULL;ch=getc(source);while(ch!= n)&(!feof(source)ch=getc(source);k=ml_line;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失

91、,增加赔偿的金额为消费者购买商品的价款或接受服务的费用while(!feof(source)line+;l=(ml)malloc(sizeof(structMLanguage);l-line=line;ch=getc(source);while(ch!=()ch=getc(source);getword();strcpy(l-op,spelling);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用fseek(source,1,1);getword();strcpy(l

92、-opv1,spelling);fseek(source,1,1);getword();strcpy(l-opv2,spelling);fseek(source,1,1);getword();第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用strcpy(l-result,spelling);l-next=k-next;k-next=l;k=l;ch=getc(source);while(ch!=n)&(!feof(source)ch=getc(source);第十一章第

93、十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用voidread_keyboard()intline=100;/*行号从100开始。*/mlk,l;charch;ml_line=(ml)malloc(sizeof(structMLanguage);ml_line-line=line;printf(n第%d行:,ml_line-line);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者

94、购买商品的价款或接受服务的费用ch=getchar();printf(n输入操作符:);gets(ml_line-op);printf(n输入第一变量:);gets(ml_line-opv1);printf(n输入第二变量:);gets(ml_line-opv2);printf(n输入结果变量:);gets(ml_line-result);ml_line-next=NULL;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用k=ml_line;printf(n输入结束否(

95、y/n)?);ch=getchar();while(ch!=y)line+;l=(ml)malloc(sizeof(structMLanguage);l-line=line;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用printf(n第%d行:,l-line);ch=getchar();printf(n输入操作符:);gets(l-op);printf(n输入第一变量:);gets(l-opv1);printf(n输入第二变量:);gets(l-opv2);prin

96、tf(n输入结果变量:);gets(l-result);l-next=k-next;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用k-next=l;k=l;printf(n输入结束否(y/n)?);ch=getchar();/*/*文件:symtab.c*/*为四元式代码变量产生符号表和建立汇编语言的数据段;*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款

97、或接受服务的费用/*生成代码时选择寄存器的依据存储在符号表中;*/*符号表以链式的哈希表实现。*/*/#includeglobals.h/*SHIFT是作为哈希函数乘数的权值。*/#defineSHIFT4vrHashTable26;/*符号表的哈希表结构*/vrHashTable_126;/*临时变量的符号表*/externmlml_line;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*产生键值的哈希函数。*/staticinthash(charkey)int

98、temp=0;inti=0;while(keyi!=0)temp=(tempname)!=0)l=l-next;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(l=NULL)/*变量还没有登记到符号表中。*/l=(vr)malloc(sizeof(structVariableRec);strcpy(l-name,name);l-regstats=0;l-regnum=0;/*以上三行是变量在符号表中的进行初始化。*/l-next=Tableh;Tableh=l;/

99、*把变量登记到符号表相应位置。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elsereturn ;/*如果已经在符号表中存在,则返回。*/*st_insert*/*过程insert根据变量是变量还是临时变量,然后执行st_insert过程把不同的变量插入相应的符号表。*/voidinsert(charname)if(name0=a)&(name0=A)&(name0=Z)st_insert(name,HashTable_1);elsereturn ;/*若为其他

100、,则不插入符号表中。*/*建立符号表的函数,变量和临时变量保存在不同的符号表中。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用voidbuildsymtab()mll;inti;l=ml_line;printf(n正在进行一遍扫描,以提取变量,建立符号表!. );for(i=0;iopv1);insert(l-opv2);insert(l-result);l=l-next;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费

101、者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*在符号表中查找变量,返回所需变量在符号表中的地址。*/vrst_lookup(charname,vrTable)inth=hash(name);vrl=Tableh;while(l!=NULL)&(strcmp(name,l-name)!=0)l=l-next;returnl;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*判断是变量还是临时变量,然后选择不同的参数查找符号表。*/

102、vrlookup(charname)vrl;if(name0=a)&(name0=A)&(name0=Z)l=st_lookup(name,HashTable_1);elsel=NULL;returnl;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*建立数据段的主程序,临时变量不存入数据段。*/voidcreate_dataseg()inti;vrl;printf(n正在生成汇编语言的数据段!. );for(i=0;iname);/*定义字变量*/fprintf(

103、code, n);l=l-next;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/*文件:block.c*/*为中间语言建立基本块。*/*/#includeglobals.hintBlock100;/*保存基本块的行号*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用externmlml_line;inti,j=0,k,n=0;char

104、*m;mll;/*划分基本块的函数,产生基本块入口的四元式行地址,并按照行地址从小到大排列。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用voidcreate_basicblock()l=ml_line;printf(n正在进行二遍扫描,以生成基本块的入口地址!. );for(i=0;iop0=j)m=l-result;while(*m!=0)j=j*10+(*m-48);m+;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按

105、照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Blockj%100=1;j=0;i+;Block(l-next-line)%100=1;l=l-next;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/*文件:code.c*/*这里存放生成各类型代码的函数,*/* 被cgen.c文件中的create_codeseg函数调用。 */*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消

106、费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用#includeglobals.h/*emitcomment函数在目标语言文件中添加注释。*/voidemitcomment(char*c)fprintf(code,%s,c);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*产生寄存器寄存器的汇编指令。*/void emitRR( char * op,char * r1,char * r2,char *comment)fprintf

107、(code,%s%s,%s,op,r1,r2);emitcomment(comment);fprintf(code,n);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*产生寄存器存储器的汇编指令。*/void emitRM( char * op,char * r,char * m,char *comment)fprintf(code,%s%s,%s,op,r,m);emitcomment(comment);fprintf(code,n);第十一章第十一章 小型编译

108、程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*产生立即数寄存器的汇编指令。*/void emitRC( char * op,char * r,char * con,char *comment)fprintf(code,%s%s,%sD,op,r,con);emitcomment(comment);fprintf(code,n);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受

109、服务的费用/*产生乘法,除法的汇编指令。*/voidemitTO(char*op,char*s,char*comment)fprintf(code,%s%s,op,s);emitcomment(comment);fprintf(code,n);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*产生跳转和条件跳转的汇编指令。*/voidemitJ(char*op,char*s,char*comment)fprintf(code,%s%s,op,s);emitcommen

110、t(comment);fprintf(code,n);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*/*文件:cgen.c*/* 执行中间语言的分析,调用相应的子程序, */*来完成汇编代码的产生。*/*/#includeglobals.h#includesymtab.h#includecode.h第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务

111、的费用/*保存CPU四个通用寄存器AX、BX、CX、DX的使用状态。*/typedefstructRegistercharreg3;intstats;intalter;charvarname10;reg;regregstats4;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用externmlml_line;/*四元式中间语言代码的指针*/externvrHashTable26;/*保存变量的符号表*/externvrHashTable_126;/*保存临时变量的符号表

112、*/externintBlock100;/*保存基本块的行号*/vrv1,v2,re,temp;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*函数assign在生成汇编语言代码时为变量分配寄存器,返回所分配寄存器的名字。*/intassign(vrvariable)inti;for(i=0;iregstats=1;variable-regnum=i;regstatsi.stats=1;strcpy(regstatsi.varname,variable-name);

113、returni;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(variable-regstats=0)/*二次分配*/for(i=0;i= A ) & (regstatsi.varname0name)!=0)&(strcmp(regstatsi.varname,v2-name)!=0)&(strcmp(regstatsi.varname,re-name)!=0)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增

114、加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用temp=st_lookup(regstatsi.varname,HashTable_1);temp-regstats=0;variable-regstats=1;variable-regnum=i;regstatsi.stats=1;strcpy(regstatsi.varname,variable-name);returni;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(variable

115、-regstats=0) /*三次分配*/ for(i=0;iname)!=0)&(strcmp(regstatsi.varname,v2-name)!=0)&(strcmp(regstatsi.varname,re-name)!=0)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用temp=st_lookup(regstatsi.varname,HashTable);if(regstatsi.alter=1)emitRM(mov,temp-name,regstatsi

116、.reg, ;保存不用的变量,以空出寄存器供变量使用);temp-regstats=0;variable-regstats=1;variable-regnum=i;regstatsi.stats=1;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用strcpy(regstatsi.varname,variable-name);returni; /*函数assign_1在生成汇编语言代码时为常数分配寄存器,返回所分配寄存器的名字*/第十一章第十一章 小型编译程序小型编译程

117、序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*只在生成乘法、除法和条件跳转指令时可能需要。*/intassign_1()vrcon=(vr)malloc(sizeof(structVariableRec);inti;for(i=1;iregstats=1;returni;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(con-regstats=0)/*二次分配*/for(i

118、=1;i=A ) & (regstatsi.varname0name)!=0)&(strcmp(regstatsi.varname,v2-name)!=0)&(strcmp(regstatsi.varname,re-name)!=0)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用temp=st_lookup(regstatsi.varname,HashTable_1);temp-regstats=0;con-regstats=1;regstatsi.stats=0;r

119、eturni;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(con-regstats=0)/*三次分配*/for(i=1;iname)!=0)&(strcmp(regstatsi.varname,v2-name)!=0)&(strcmp(regstatsi.varname,re-name)!=0)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务

120、的费用temp=st_lookup(regstatsi.varname,HashTable);if(regstatsi.alter=1)emitRM(mov,temp-name,regstatsi.reg, ;保存不用的变量,以空出寄存器供变量使用);temp-regstats=0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用con-regstats=1;regstatsi.stats=0;returni;free(con);第十一章第十一章 小型编译程序小型编译程

121、序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*产生代码段的主程序,通过对变量寄存器的分配,调用不同的函数来产生汇编语言/*代码*/voidemit_code(mlmedline)intj,reg;switch(medline-op0)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 case+:v1=lookup(medline-opv1);v2=lookup(medline-o

122、pv2);re=lookup(medline-result);/*以上三行是三个操作数在符号表中的定位*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(re-regstats=1)reg=re-regnum;elsereg=assign(re);if(v1!=NULL)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(v1-regst

123、ats=1)emitRR(mov,regstatsreg.reg,regstatsv1-regnum.reg, ;把在寄存器中的被加数赋给结果寄存器);elseemitRM(mov,regstatsreg.reg,v1-name, ;把在存储器中的被加数赋给结果寄存器);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseeemitRC(mov,regstatsreg.reg,medline-opv1, ;把被加数立即数赋给结果寄存器);/*为结果寄存器赋被加数的值

124、*/if(v2!=NULL)if(v2-regstats=1)emitRR(add,regstatsreg.reg,regstatsv2-regnum.reg,;把被加数和在寄存器中的加数相加);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRM(add,regstatsreg.reg,v2-name,;把被加数和在存储器中的加数相加);elseemitRC(add,regstatsreg.reg,medline-opv2, ;把被加数和加数立即数相加

125、);/*完成对加法的四元式编译。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用regstatsreg.alter=1;break;case-:v1=lookup(medline-opv1);v2=lookup(medline-opv2);re=lookup(medline-result);/*以上三行是三个操作数在符号表中的定位*/if(re-regstats=1)reg=re-regnum;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈

126、行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elsereg=assign(re);if(v1!=NULL)if(v1-regstats=1)emitRR(mov,regstatsreg.reg,regstatsv1-regnum.reg, ;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用把在寄存器中的被减数赋给结果寄存器);elseemitRM(mov,regstatsreg.reg,v1-name, ; 把在

127、存储器中的被减数赋给结果寄存器);elseemitRC(movregstatsreg.reg,medline-opv1, ;把被减数立即数赋给结果寄存器);/*为结果寄存器赋被减数的值*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(v2!=NULL)if(v2-regstats=1)emitRR(sub,regstatsreg.reg,regstatsv2-regnum.reg, ;把被减数和在寄存器中的减数相减);elseemitRM(sub,regstat

128、sreg.reg,v2-name, ;把被减数和在存储器中的减数相减);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRC(sub,regstatsreg.reg,medline-opv2, ;把被减数和减数立即数相减);/*完成对减法的四元式编译。*/regstatsreg.alter=1;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商

129、品的价款或接受服务的费用case*:v1=lookup(medline-opv1);v2=lookup(medline-opv2);re=lookup(medline-result);/*以上三行是三个操作数在符号表中的定位*/if(regstats0.stats=1)&(regstats0.varname0= a)&(regstats0.varname0regstats=0;if(regstats3.stats=1)&(regstats3.varname0= a)&第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔

130、偿的金额为消费者购买商品的价款或接受服务的费用(regstats3.varname0regstats=0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(regstats0.stats=0)if(v1!=NULL)if(v1-regstats=1)emitRR(mov,regstats0.reg,regstatsv1-regnum.reg, ;把在寄存器中的被乘数赋给AX寄存器。);elseemitRM(mov,regstats0.reg,v1-name, ;把在

131、存储器中的被乘数赋给AX寄存器。);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRC(mov,regstats0.reg,medline-opv1, ;把被乘数立即数赋给AX寄存器。);if(v2!=NULL)if(v2-regstats=1)emitTO(mul,regstatsv2-regnum.reg, ;把被乘数和在寄存器中的乘数相乘);else第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要

132、求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用emitTO(mul,regstatsreg.reg, ;把被乘数和乘数立即数相乘);elseif(strcmp(regstats0.varname,v1-name)=0)if(v2!=NULL)if(v2-regstats=1)emitTO(mul,regstatsv2-regnum.reg, ;把被乘数和在寄存器中的乘数相乘);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemit

133、TO(mul,v2-name, ;把被乘数和在存储器中的乘数相乘);elsereg=assign_1(medline-opv2);emitRC(mov,regstatsreg.reg,medline-opv2, ;把乘数立即数读入寄存器);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用emitTO(mul,regstatsreg.reg, ;把被乘数和乘数立即数相乘);/*第二变量和第一变量相乘*/elseif(strcmp(regstats0.varname,v2-

134、name)=0)if(v1!=NULL)if(v1-regstats=1)第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用emitTO(mul,regstatsv1-regnum.reg, ;把被乘数和在寄存器中的乘数相乘);elseemitTO(mul,v1-name, ;把被乘数和在存储器中的乘数相乘);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受

135、服务的费用elsereg=assign_1(medline-opv1);emitRC(mov,regstatsreg.reg,medline-opv1, ;把乘数立即数读入DX寄存器);emitTO(mul,regstatsreg.reg, ;把被乘数和乘数立即数相乘);/*第二变量和第一变量相乘*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseif(v1!=NULL)if(v1-regstats=1)emitRR(mov,regstats0.reg,regs

136、tatsv1-regnum.reg, ; 把在寄存器中的被乘数赋给AX寄存器。);elseemitRM(mov,regstats0.reg,v1-name, ;把在存储器中的被乘数赋给AX寄存器。);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRC(mov,regstats0.reg,medline-opv1, ;把被乘数立即数赋给AX寄存器。);if(v2!=NULL)if(v2-regstats=1)emitTO(mul,regstatsv2-r

137、egnum.reg, ;把被乘数和在寄存器中的乘数相乘);elseemitTO(mul,v2-name, ;把被乘数和在存储器中的乘数相乘);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elsereg=assign_1(medline-opv2);emitRC(mov,regstatsreg.reg,medline-opv2, ;把乘数立即数读入寄存器);emitTO(mul,regstatsreg.reg, ;把被乘数和乘数立即数相乘);/*完成对乘法的四元式编译

138、。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用strcpy(regstats0.varname,re-name);/*结果变量使用AX寄存器*/re-regstats=1;re-regnum=0;/*把AX寄存器改为结果变量使用*/regstats0.stats=1;regstats0.alter=1;regstats3.stats=0;break;case/:v1=lookup(medline-opv1);v2=lookup(medline-opv2);re=

139、lookup(medline-result);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*以上三行是三个操作数在符号表中的定位*/if(regstats0.stats=1)&(regstats0.varname0= a)&(regstats0.varname0regstats=0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(re

140、gstats3.stats=1)&(regstats3.varname0= a)&(regstats3.varname0regstats=0;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用emitRC(mov,regstats3.reg, 0, ;执行除法指令前DX寄存器清零);if(regstats0.stats=0)if(v1!=NULL)if(v1-regstats=1)emitRR(mov,regstats0.reg,regstatsv1-regnum.reg

141、, ;把在寄存器中的被除数赋给AX寄存器。);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRM(mov,regstats0.reg,v1-name, ;把在存储器中的被除数赋给AX寄存器。);elseemitRC(mov,regstats0.reg,medline-opv1, ;把被除数立即数赋给AX寄存器。);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消

142、费者购买商品的价款或接受服务的费用if(v2!=NULL)if(v2-regstats=1)emitTO(div,regstatsv2-regnum.reg, ;把被除数和在寄存器中的除数相除);elseemitTO(div,v2-name,;把被除数和在存储器中的除数相除);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elsereg=assign_1(medline-opv2);emitRC(mov,regstatsreg.reg,medline-opv2, ;把

143、除数立即数读入寄存器);emitTO(div,regstatsreg.reg, ;把被除数和除数立即数相除);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseif(strcmp(regstats0.varname,v1-name)=0)if(v2!=NULL)if(v2-regstats=1)emitTO(div,regstatsv2-regnum.reg, ;把被除数和在寄存器中的除数相除);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有

144、欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitTO(div,v2-name, ;把被除数和在存储器中的除数相除);elsereg=assign_1(medline-opv2);emitRC(mov,regstatsreg.reg,medline-opv2, ;把除数立即数读入寄存器);emitTO(div,regstatsreg.reg, ;把被除数和除数立即数相除);/*第二变量和第一变量相除*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,

145、增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseif(v1!=NULL)if(v1-regstats=1)emitRR(mov,regstats0.reg,regstatsv1-regnum.reg, ;把在寄存器中的被除数赋给AX寄存器。);elseemitRM(mov,regstats0.reg,v1-name, ;把在存储器中的被除数赋给AX寄存器。);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRC(mov,regstats0.r

146、eg,medline-opv1, ;把被除数立即数赋给AX寄存器。);if(v2!=NULL)if(v2-regstats=1)emitTO(div,regstatsv2-regnum.reg, ;把被除数和在寄存器中的除数相乘);elseemitTO(div,v2-name, ;把被除数和在存储器中的除数相除);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elsereg=assign_1(medline-opv2);emitRC(mov,regstatsreg.r

147、eg,medline-opv2, ;把除数立即数读入寄存器);emitTO(div,regstatsreg.reg, ;把被除数和除数立即数相除);/*完成对除法的四元式编译。*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用strcpy(regstats0.varname,re-name);/*结果变量使用AX寄存器*/re-regstats=1;re-regnum=0;/*把AX寄存器改为结果变量使用*/regstats0.stats=1;regstats0.al

148、ter=1;regstats3.stats=0;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用case: :v1=lookup(medline-opv1);re=lookup(medline-result);/*以上二行是两个操作数在符号表中的定位*/if(re-regstats=1)reg=re-regnum;elsereg=assign(re);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿

149、其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(v1!=NULL)if(v1-regstats=0)emitRM(mov,regstatsreg.reg,v1-name,;执行赋值语句,存储器中的值赋给结果变量);elseemitRR(mov,regstatsreg.reg,regstatsv1-regnum.reg,;执行赋值语句,寄存器中的值赋给结果变量);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRC(movregst

150、atsreg.reg,medline-opv1, ;执行赋值语句,立即数值赋给结果变量);/*为第一变量分配寄存器*/regstatsreg.alter=1;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用casej:switch(medline-op1)case0:emitJ(jmp,medline-result, ;产生直接跳转指令);break;default:v1=lookup(medline-opv1);第十一章第十一章 小型编译程序小型编译程序

151、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用v2=lookup(medline-opv2);if(v1!=NULL)if(v1-regstats=1)reg=v1-regnum;elsereg=assign(v1);emitRM(mov,regstatsreg.reg,v1-name, ;把条件跳转指令的第一操作数读入寄存器);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elser

152、eg=assign_1(medline-opv1);emitRC(mov,regstatsreg.reg,medline-opv1, ;把条件跳转指令的第一操作数立即数读入寄存器);/*为第一变量分配寄存器*/第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用if(v2!=NULL)if(v2-regstats=1)emitRR(cmp,regstatsreg.reg,regstatsv2-regnum.reg, ;把条件跳转指令的第一操作数和第二操作数相减);elsee

153、mitRM(cmp,regstatsreg.reg,v2-name, ;把条件跳转指令的第一操作数和第二操作数相减);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用elseemitRC(cmp,regstatsreg.reg,medline-opv2, ;把条件跳转指令的第一操作数和第二操作数相减);/*以上从default:这一行开始产生条件跳转指令的条件状态*/switch(medline-op1)case=:emitJ(je,medline-result, ;相

154、等则跳转);break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用caseop2)case0:emitJ(jl,medline-result, ;小于则跳转);break;case=:emitJ(jle,medline-result, ;小于或等于则跳转);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用break;break;case:s

155、witch(medline-op2)case0:emitJ(jg,medline-result, ;大于则跳转);break;case=:emitJ(jge,medline-result, ;大于或等于则跳转);break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用break;break;break;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服

156、务的费用voidcreate_codeseg()intj,m;mll;vrk;l=ml_line;strcpy(regstats0.reg,AX);strcpy(regstats1.reg,BX);strcpy(regstats2.reg,CX);strcpy(regstats3.reg,DX);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用m=l-line;printf(n正在生成汇编语言的代码段!. );for(;)if(l=NULL)for(j=0;j= a)&

157、(regstatsj.varname0line+1)%100=1)for(j=0;j= a)&(regstatsj.varname0op0=j)if(regstatsj.alter=1)emitRM(mov,regstatsj.varname,regstatsj.reg, ;在跳出基本块之前保存寄存器中已改变的变量);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用fprintf(code, %d:n,l-line);emit_code(l);/*对单条四元式进行编译,

158、产生一条或多条汇编代码。*/if(Block(l-line+1)%100=1)for(j=0;jregstats=0;if(regstatsj.varname0= a)&(regstatsj.varname0op0!=j)if(regstatsj.alter=1)emitRM(mov,regstatsj.varname,regstatsj.reg, ;在跳出基本块之前保存寄存器中已改变的变量);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用regstatsj.stat

159、s=0;regstatsj.alter=0;m=l-line;l=l-next;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*过程codegen产生汇编目标语言的初始化程序段,*/*并调用相应的函数产生程序的数据段和代码段,*/*字符串变量codefile为目标文件的文件名,*/*用于在编译过程中作为注释在屏幕上打印出文件名。*/voidcodegen(char*codefile)printf(n正在把四元式编译成汇编语言,保存到文件%s!. ,codefile)

160、;第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用fprintf(code,;File:%sn,codefile);fprintf(code,;*n);fprintf(code,datasegment);fprintf(code,;定义数据段n);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*下面的create_dataseg函数是建立数据

161、段的主程序。*/create_dataseg();fprintf(code,dataends);fprintf(code,;数据段定义结束n);fprintf(code,;*n);fprintf(code,codesegment);fprintf(code,;定义代码段n);fprintf(code,mainprocfar);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用fprintf(code,;程序的执行部分n);fprintf(code,assumecs:cod

162、e,ds:datan);fprintf(code,start:n);fprintf(code,;为返回操作系统入栈n);fprintf(code,pushdsn);fprintf(code,subbx,bxn);fprintf(code,pushbxn);fprintf(code,;设置DS段为当前数据段n);fprintf(code,movbx,datan);fprintf(code,movds,bxn);第十一章第十一章 小型编译程序小型编译程序 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用/*下面的create_codeseg函数是建立代码段的主程序。*/create_codeseg();fprintf(code,retn);fprintf(code,mainendpn);fprintf(code,codeends);fprintf(code,;代码段定义结束n);fprintf(code,endstartn);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号