发布时间 : 星期六 文章PL0源程序-编译原理实验代码更新完毕开始阅读b05b3ccffbd6195f312b3169a45177232e60e4d1
附件1 小组成员:
程序清单
#include<> #include<> #include<>
void error(int n); void getsym(); \。\\n\
break;
case 10:printf(\语句之间漏了\\\。\\n\ break;
case 11:printf(\标识符未说明。\\n\ break;
case 12:printf(\赋值语句中,赋值号左部标识符属性应是变量。\\n\ break;
case 13:printf(\赋值语句左部标识符后应是赋值号\\\。\\n\ break;
case 14:printf(\后应为标识符。\\n\ break;
case 15:printf(\后标识符属性应为过程。\\n\ break;
case 16:printf(\条件语句中丢了\\\。\\n\ break;
case 17:printf(\丢了\\\或\\\。\\n\ break;
case 18:printf(\型循环语句中丢了\\\。\\n\ break;
case 19:printf(\语句后的符号不正确。\\n\ break;
case 20:printf(\应为关系运算符。\\n\ break;
case 21:printf(\表达式内标识符属性不能是过程。\\n\ break;
case 22:printf(\表达式中漏掉右括号\\\)\\\。\\n\ break;
case 23:printf(\因子后的非法符号。\\n\ break;
case 24:printf(\表达式的开始符不能是此符号。\\n\ break;
case 25:printf(\不能识别的符号。\\n\ break;
case 26:printf(\程序的层次越界。\\n\ break;
case 27:printf(\程序应该以program保留字开始。\\n\ break;
case 28:printf(\程序没有程序主体。\\n\ break;
case 31:printf(\数越界。\\n\ break;
case 32:printf(\语句括号中的标识符不是变量。\\n\ break;
case 33:printf(\单词后应为左括号。\\n\ break;
case 34:printf(\语句括号中的标识符应是申明过的变量。\\n\ break;
case 35:printf(\语句没有右括号。\\n\ } }
void getsym(){ int i,n=1,l=0; int j,m; do{
while(ch==' '||ch==10||ch==9){ if(ch==10) n++; ch=fgetc(fp1); }
if(ch>='a'&&ch<='z'){ 9开头 k=0; num=0;
sym=number; do{
a[k]=ch;
num=10*num+(ch-'0'); k+=1;
ch=fgetc(fp1);
}while(ch>='0'&&ch<='9');||ch=='#'||ch==';'||ch=='=') {ame=*sign; table[(*ptx)].kind=k; switch(k){
case constant:
table[(*ptx)].val=num; break; case variable:
table[(*ptx)].level=lev; table[(*ptx)].adr=(*pdx);
(*pdx)++; break; case procedure:
table[(*ptx)].level=lev; break; }
mmm=*ptx;
ame[j]=*(idt+j); for(i=tx;i>0;i--){
for(m=0;m if(table[i].name[m]!=*(idt+m)) break; else continue; } if(m==k+1 && table[i].name[m]=='\\0'){ return i; break; } else continue; } if(i==0) return 0; } /*常量声明处理*/ int constdeclaration(int *ptx,int lev,int *pdx){ if(sym==ident){ *sign=*a; getsym(); if(sym==eql||sym==becomes){ if(sym==becomes) error(1); getsym(); if(sym==number) { enter(constant,ptx,lev,pdx); } else error(2); } else error(3); } else error(4); getsym(); return 0; } /*变量声明处理*/ int vardeclaration(int *ptx,int lev,int *pdx){ if(sym==ident){ *sign=*a; enter(variable,ptx,lev,pdx); getsym(); } else error(4); return 0; } ind!=variable){ error(12); i=0; } else{ getsym(); if(sym==becomes) getsym(); else error(13); expression(ptx,lev); printf(\赋值语句\\n\ fprintf(fp2,\赋值语句\\n\ } } } else if(sym==readsym){ getsym(); if(sym!=lparen) error(33); else{ do{ getsym(); if(sym==ident) i=position(id,*ptx); else i=0; if(i==0)