《编译原理》实验指导书2016(8)

2019-03-03 10:44

《编译原理》实验指导书

}

/* 因子处理 */

int factor(bool* fsys,int* ptx,int lev) /* 参数意义见block和enter函数 */ {

int i;

bool nxtlev[symnum];

testdo(facbegsys,fsys,24); /* 检测因子的开始符号 */ while(inset(sym,facbegsys)) /* 循环直到不是因子开始符号 */ {

if(sym==ident) { }

i=postion(id,*ptx); else { }

getsymdo;

switch(table[i].kind) { }

case constant:

break;

/* 名字为变量 */

/* 找到变量地址并

gendo(lod,lev-table[i].level,table[i].adr); break;

/* 名字为过程 */ /* 不能为过程 */

error(21); break;

/* 名字为常量 */

gendo(lit,0,table[i].val); /* 直接把常量的值入栈 */

/* 查找名字 */

if(i==0)error(11); /* 名字未声明 */

/* 因子为常量或变量 */

} return 0;

mulop=sym; getsymdo;

factordo(nxtlev,ptx,lev); if(mulop==times) { } else { }

gendo(opr,0,5);

/* 生成除法指令 */

gendo(opr,0,4);

/* 生成乘法指令 */

case variable:

将其值入栈 */

case procedur:

《编译原理》课程组 35 of 37

《编译原理》实验指导书

else { if(sym==number) /* 因子为数 */

{ if(num>amax) { error(31); num=0;

}

gendo(lit,0,num); getsymdo;

} else { if(sym==lparen) /* 因子为表达式 */

{ getsymdo;

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

expressiondo(nxtlev,ptx,lev); if(sym==rparen) { getsymdo;

}

else error(22);

/* 缺少右括号 */

}

test(fsys,facbegsys,23);

/* 因子后有非法符号 */

}

}

} return 0;

}

《编译原理》课程组 36 of 37


《编译原理》实验指导书2016(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教科版五年级科学下册全册教案

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

马上注册会员

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