15广工编译原理课程设计及实验报告(6)

2019-08-31 09:35

6.2 增加自增自减处理函数 int selfopr(int lev,int addr,int opration) { gendo(lod,lev,addr); gendo(lit,0,1); if (opration==pplus) { } else{ } gendo(sto,lev,addr); gendo(opr,0,3); gendo(opr,0,2); return 0; } 6.3 修改statement语句,增加i++ i--句式识别 int statement() { ... if(sym==ident) { .... else if (sym==pplus) // ident 后面跟 ++ 处理 ... } 6.4 修改statement语句,增加、++ -- 前缀句式识别 int statement() { ...

else if (sym==mminus||sym==pplus) //如果是 ++ 或 --

{

tempsym= sym; getsymdo; if(sym==ident) {

{ } else if (sym==mminus) // -- 处理 { selfopr(lev-table[i].level,table[i].adr,mminus); getsymdo; } selfopr(lev-table[i].level,table[i].adr,pplus); getsymdo;

} else { }

i=position(id,*ptx); if(i==0) { } else { }

if(table[i].kind!=variable) { } else { }

selfopr(lev-table[i].level,table[i].adr,tempsym); getsymdo; error(12); i=0; error(11);

error(12);

}

6.4 修改因子 ++ -- 前缀识别 int factor(bool*fsys,int *ptx,int lev) {

int sopr = -1;

int i;

bool nxtlev[symnum];

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

if (sym==mminus||sym==pplus) {

sopr = sym; getsymdo;

if(sym==ident) /*因子为常量或者变量*/ {

i=position(id,*ptx); /*查找名字*/ if(i==0) {

error(11); /*标识符未声明*/ } else {

switch(table[i].kind) {

case constant:/*名字为常量*/ error(28);

break;

case variable:

selfopr(lev-table[i].level,table[i].adr,sopr);//++ --处理 gendo(lod,lev-table[i].level,table[i].adr); /*找到变量

地址并将其值入栈*/

}

} else

}

break;

case procedur:

error(21); break;

case character:

error(31); break; }

getsymdo;

{error(29); }

6.5 增加因子 ++ -- 后缀识别 6.5.1 增加新的数据结构,记录要自增或自减的变量 struct backpath {int o; //++ 或 -- int lev; // 层次 int addr; //地址 }Info[50];


15广工编译原理课程设计及实验报告(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:自然地理学教案-伍光和版 - 图文

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

马上注册会员

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