资源描述:
《编译原理课后答案——第十一章--小型编译程序ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十一章小型编译程序11.1高级语言到四元式的编译程序PAS11.2四元式到汇编语言程序的编译程序COMPILER11.1高级语言到四元式的编译程序PAS/****************************************************//*pas.c *//*高级语言到四元式*//***************************************************/#include″tdio.h″#include″string.h″#defineACC-2/****************************************/
2、#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18/*Eand*/#defineEO19/*Eor*/#defineplus34#definetimes36#definebecomes38#defineop_and39#defineop_o
3、r40#defineop_not41#definerop42#definelparent4#definerparent49#defineident56#defineintconst57/******************************************/charch=′ ′;/*当前字符*/intcount=0;staticcharspelling[10]={″″};/*存放识别的字*/staticcharline[81]={″″};/*一行字符缓冲区*/char*pline;/*字符缓冲区指针*/staticcharntab1[100][10];structn
4、tab{inttc;intfc;}ntab2[200];intlabel=0;/*存放临时变量的表的定义*/structrwords{charsp[10];intsy;};/*存放文件的结构*/structrwordsreswords[10]={{″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_not}};structaa{intsy
5、1;intpos;}buf[1000];/*词法分析结果缓冲区*/n;/*当前字符*/n1;/*当前表达式中的字符*/E;/*非终结符*/sstack[100];/*符号栈*/ibuf[100],stack[1000];structaaoth;structfourexp{charop[10];structaaarg1;structaaarg2;intresult;}fexp[200];/*四元式的结构*/intssp=0;/*指向sstack[100]*/structaa*pbuf=buf;/*指向词法分析缓冲区*/intnlength=0;intlnum=0;/*源程序长度*/i
6、nttt1=0;FILE*cfile;FILE*mfile;/*********************************************************/intnewt=0;/*临时变量*/intnxq=100;/*nxq指向下一个形成的四元式的地址*/intlr;intlr1;intsp=0;/*状态栈定义*/intstack1[100];intsp1=0;/*状态栈1的定义*/intnum=0;structll{intnxq1;inttc1;intfc1;}labelmark[10];intlabeltemp[10];intpointmark=-1,po
7、inttemp=-1;intsign=0;/*sign=1,表达式为赋值语句;sign=2,表达式为布尔表达式。*//***********************************************/staticintaction[19][13]=/*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,ACC,-1,-1},/*2*/{-1,-1,-1,-