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];