编译原理语法1.docVIP

  • 4
  • 0
  • 约 5页
  • 2017-01-12 发布于江苏
  • 举报
编译原理语法1

#includestdio.h #includestring.h char prog[80],token[8]; char ch; int kk; int syn,p,m,n,sum; char*number[6]={begin,if,then,while,do,end}; int scaner() {for(n=0;n8;n++) token[n]=\0; m=0; n=0; ch=prog[p++]; while(ch==) ch=prog[p++]; if(isalpha(ch)) { while(isalpha(ch)||isdiditt(ch)) { token[m++]=ch;ch=prog[p++]; } token[m++]=\0; syn=10; for(n=0;n6;n++) if(strcmp(token,numtab[n])==0) syn=n+1; p--; } else if(isdigit(ch)) { sum=0; while(isdigit(ch)) { sum=sum*10+(ch-0); ch=prog[p++]; } syn=11; p--; { else switch(ch) { case:token[m++]=ch;ch=prog[p++]; if(ch==) {token[m++]=ch;syn=22; } else if(ch===) {token[m++]=ch; syn=21; } else {p--;syn=20; } break; case:token[m++]=ch; ch=prog[p++]; if(ch===) {token[m++]=ch;syn=24; } else {p--;syn=23; } break; case+:token[m++]=ch;syn=13;break; case-:token[m++]=ch;syn=14;break; case*:token[m++]=ch;syn=15;break; case/:token[m++]=ch;syn=16;break; case:token[m++]=ch;ch=prog[p++]; if(ch===){token[m++]=ch;syn=18;} else{p--;syn=17;}break; case=:token[m++]=ch;syn=25;break; case;:token[m++]=ch;syn=26;break; case(:token[m++]=ch;syn=27;break; case):token[m++]=ch;syn=28;break; case#:syn=0;token[m++]=#;break; default:syn=-1;} return 0; } Irparser() { if{syn==1) { scaner(); yucu(); if(syn==6) { scaner(); if(syn==0(kk==0)); printf(\nSuccess); } else { if(kk!=1) printf(\nend lost); kk=1; } } else { printf(\nbegin error!); kk=1; } return; } yucn() { statement(); while(syn==26) { scaner(); statement(); } return } statement(); {if(syn==10) { scaner(); if(syn==18) { scaner(); expression(); } else { printf(\nAssign symbol error!); kk=1; } } else { printf(\nStatement error!); kk=1; } return; expression() { term(); while((syn==13)||(syn==14)) { scaner(); term(); } } trem(); { factor(); while((syn==15)||(syn==16)) { scaner(); factor(); } retuen; } factor(); { if((syn

文档评论(0)

1亿VIP精品文档

相关文档