您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 编译原理实验1源代码
#includestdio.h#includestring.h#defineACC-2/**************************************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18#defineE019#defineplus34#definetimes36#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42#definelparent48#definerparent49#defineident56#defineintconst57/********************************************/charch='\0';intcount=0;staticcharspelling[10]={};staticcharline[81]={};char*pline;staticcharntab1[100][10];structntab{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{intsy1;intpos;}buf[1000],n,n1,E,sstack[100],ibuf[100],stack[1000];structaaoth;structfourexp{charop[10];structaaarg1;structaaarg2;intresult;}fexp[200];intssp=0;structaa*pbuf=buf;intnlength=0;intlnum=0;inttt1=0;FILE*cfile;/********************************************************/intnewt=0;intnxq=100;intlr;intlr1;intsp=0;intstack1[100];intsp1=0;intnum=0;structll{intnxq1;inttc1;intfc1;}labelmark[10];intlabeltemp[10];intpointmark=-1,pointtemp=-1;intsign=0;/********************³ÌÐòÓï¾äµÄLR·ÖÎö±í********************/staticintaction[19][13]={{2,-1,-1,3,4,-1,-1,5,-1,-1,10,1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,ACC,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1},{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,8},{-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1},{-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1},{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1},{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,15,-1},{-1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1},{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16},{-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1},{-1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1},{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1},{-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1}};/********************ËãÊõ±í´ïʽµÄLR·ÖÎö±í********************/staticintaction1[10][7]={{3,-1,-1,2,-1,-1,1},{-1,4,5,-1,-1,ACC,-1},{3,-1,-1,2,-1,-1,6},{-1,104,104,-1,104,104,-1},{3,-1,-1,2,-1,-1,7},{3,-1,-1,2,-1,-1,8},{-1,4,5,-1,9,-1,-1},{-1,101,5,-1,101,101,-1},{-1,102,102,-1,102,102,-1},{-1,103,103,-1,103,103,-1}};/********************²¼¶û±í´ïʽµÄLR·ÖÎö±í*********************/staticintaction2[16][11]={{1,-1,4,-1,5,-1,-1,-1,13,7,8},{-1,2,-1,101,-1,101,101,101,-1,-1,-1},{3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,102,-1,102,102,102,-1,-1,-1},{1,-1,4,-1,5,-1,-1,-1,11,7,8},{1,-1,4,-1,5,-1,-1,-1,6,7,8},{-1,-1,-1,104,-1,9,10,104,-1,-1,-1},{1,-1,4,-1,5,-1,-1,-1,14,7,8},{1,-1,4,-1,5,-1,-1,-1,15,7,8},{105,-1,105,-1,105,-1,-1,-1,-1,-1,-1},{107,-1,107,-1,107,-1,-1,-1,-1,-1,-1},{-1,-1,-1,12,-1,9,10,-1,-1,-1,-1},{-1,-1,-1,103,-1,103,103,103,-1,-1,-1},{-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1},{-1,-1,-1,106,-1,9,10,106,-1,-1,-1},{-1,-1,-1,108,-1,9,10,108,-1,-1,-1}};/********************´ÓÎļþ¶ÁÒ»Ðе½»º³åÇø**********************/readline(){charch1;pline=line;ch1=fgetc(cfile);while((ch1!='\n')&&(ch1!=EOF)){*pline=ch1;pline++;ch1=fgetc(cfile);}*pline='\0';pline=line;}/**********************´Ó»º³åÇø¶ÁÈ¡Ò»¸ö×Ö·û*********************/readch(){if(ch=='\0'){readline();lnum++;}ch=*pline;pline++;}/***********************±êʶ·ûºÍ¹Ø¼ü×ÖµÄʶ±ð********************/find(charspel[]){intss1=0;intii=0;while((ss1==0)&&(iinlength)){if(!strcmp(spel,ntab1[ii]))ss1=1;ii++;}if(ss1==1)returnii-1;elsereturn-1;}identifier(){intiii=0,j,k;intss=0;k=0;do{spelling[k]=ch;k++;readch();}while(((ch='a')&&(ch='z'))||((ch='0')&&(ch='9')));pline--;spelling[k]='\0';while((ss==0)&&(iii10)){if(!strcmp(spelling,reswords[iii].sp))ss=1;iii++;}/*¹Ø¼ü×ÖÆ¥Åä*/if(ss==1){buf[count].sy1=reswords[iii-1].sy;}else{buf[count].sy1=ident;j=find(spelling);if(j==-1){buf[count].pos=tt1;strcpy(ntab1[tt1],spelling);tt1++;nlength++;}elsebuf[count].pos=j;}count++;for(k=0;k10;k++)spelling[k]='';}/**********************Êý×Öʶ±ð*************************/number(){intivalue=0;intdigit;do{digit=ch-'0';ivalue=ivalue*10+digit;readch();}while((ch='0')&&(ch='9'));buf[count].sy1=intconst;buf[count].pos=ivalue;count++;pline--;}/***********************ɨÃèÖ÷³ÌÐò************************/scan(){inti;while(ch!='~'){switch(ch){case'':break;case'a':case'b':case'c':case'd':case'e':case'f':case'g':case'h':case'i':case'j':case'k':case'l':case'm':case'n':case'o':case'p':case'q':case'r':case's':case't':case'u':case'v':case'w':case'x':case'y':case'z':identifier();break;case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':number();break;case'':readch();if(ch=='=')buf[count].pos=0;else{if(ch=='')buf[count].pos=4;else{buf[count].pos=1;pline--;}}buf[count].sy1=rop;count++;break;case'':readch();if(ch=='=')buf[count].pos=2;else{buf[count].pos=3;pline--;}buf
本文标题:编译原理实验1源代码
链接地址:https://www.777doc.com/doc-3854790 .html