PL0源程序-编译原理实验代码 联系客服

发布时间 : 星期六 文章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)