标准实验报告(PL0编译程序)(4)

2019-03-15 12:46

}

memcpy(nxtlev,fsys,sizeof(bool)*symnum); nxtlev[semicolon]=true;

if(-1==block(lev+1,tx,nxtlev)) {return -1; }

if(sym==semicolon) {getsymdo;

memcpy(nxtlev,statbegsys,sizeof(bool) * symnum); nxtlev[ident]=true; nxtlev[procsym]=true; testdo(nxtlev,fsys,6); } else

{error(5); } }

memcpy(nxtlev,statbegsys,sizeof(bool) * symnum); nxtlev[ident]=true; nxtlev[period]=true;

testdo(nxtlev,declbegsys,7); }while(inset(sym,declbegsys)); code[table[txo].adr].a=cx; table[txo].adr=cx; table[txo].size=dx; cxo=cx;

gendo(inte,0,dx); if(tableswitch)

{printf(\if(txo+1>tx)

{printf(\}

for(i=txo+1;i<=tx;i++) {switch(table[i].kind) {case constant:

printf(\printf(\

fprintf(fas,\

16

fprintf(fas,\break;

case variable:

printf(\

printf(\fprintf(fas,\

fprintf(fas,\break;

case procedur:

printf(\

printf(\fprintf(fas,\

fprintf(fas,\break; } }

printf(\}

memcpy(nxtlev,fsys,sizeof(bool) * symnum); nxtlev[semicolon]=true; nxtlev[endsym]=true;

statementdo(nxtlev,&tx,lev); gendo(opr,0,0);

memset(nxtlev,0,sizeof(bool) * symnum); testdo(fsys,nxtlev,8); listcode(cxo); return 0; }

void enter(enum object k , int * ptx , int lev , int * pdx) {

(*ptx)++;

strcpy(table[(*ptx)].name,id); table[(*ptx)].kind=k; switch(k)

{case constant: if(num>amax)

17

{error(31); num=0; }

table[(*ptx)].val=num; break;

case variable:

table[(*ptx)].level=lev; table[(*ptx)].adr=(*pdx); (*pdx)++; break;

case procedur:

table[(*ptx)].level=lev; break; } }

int position(char*idt,int tx) { int i;

strcpy(table[0].name,idt); i=tx;

while(strcmp(table[i].name,idt)!=0) { i--; }

return i; }

int constdecalration(int *ptx,int lev,int *pdx) {

if(sym==ident) {

getsymdo;

if(sym==eql||sym==becomes) {

if(sym==becomes) error(1); getsymdo;

18

if(sym==number){

enter(constant,ptx,lev,pdx); getsymdo; } else {

error(2); } } else {

error(3); } } else {

error(4); }

return 0; }

int constdeclaration(int * ptx,int lev,int * pdx) { if (sym==ident) { getsymdo; if (sym==eql||sym==becomes) { if (sym==becomes) { error(1); } getsymdo; if (sym ==number) { enter(constant,ptx,lev,pdx); getsymdo;

19

} else { error(2); } } else { error(3); } } else { error(4); } return 0; }

int vardeclaration(int* ptx,int lev,int* pdx) {

if (sym==ident) {

enter(variable,ptx,lev,pdx); getsymdo; } else {

error(4); }

return 0; }

void listcode(int cx0) {

int i;

if (listswitch) {

20


标准实验报告(PL0编译程序)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:句型句式练习

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: