6.5.2 增加语句完成后的自增处理函数 //在statemtent之后调用 int backpath() {
int i = 0;
for(;i selfopr(Info[i].lev,Info[i].addr,Info[i].o); } infoindex = 0; return 0; } 6.5.3 修改statement函数 else if(sym==beginsym) /*准备按照复合语句处理*/ { getsymdo; memcpy(nxtlev,fsys,sizeof(bool)*symnum); nxtlev[semicolon]=true; nxtlev[endsym]=true;/*后跟符号为分号或end*/ /*循环调用语句处理函数,直到下一个符号不是语句开始符号或收到end*/ statementdo(nxtlev,ptx,lev); backpath(); while(inset(sym,statbegsys)||sym==semicolon) { } if(sym==semicolon) { } else { } statementdo(nxtlev,ptx,lev); backpath(); error(10);/*缺少分号*/ getsymdo; 6.5.4 因子处理 修改factor函数 int factor() { if(sym==ident) { ... getsymdo; if (sym==mminus||sym==pplus) { Info[infoindex].o = sym; Info[infoindex].lev = lev-table[i].level; Info[infoindex].addr =table[i].adr; infoindex++; getsymdo; } ... } 增加因子前缀集 facbegsys[pplus]=true; facbegsys[mminus]=true; (7) 增加字符类型 7.1 增加枚举变量 enum symbol{ ... charsym、charvalue enum object{ constant, variable, procedur, character }; 7.2增加 关键字识别 strcpy(&(word[i++][0]),\wsym[i++]=charsym; 7.3增加到声明符集 declbegsys[charsym]=true; ...} 7.4增加字符识别 修改getsym() ... else if (ch=='\\'') { } getchdo; Tchar = ch; getchdo; if (ch!='\\'') { } else { } sym = charvalue; getchdo; error(30); 7.5 增加字符声明函数 int chardeclaration(int * ptx,int lev,int * pdx) { if(sym==ident) { } else { error(4); enter(character,ptx,lev,pdx);//填写名字表 getsymdo; } return 0; } 7.6 修改block函数,增加关键代码 if(sym==charsym) { getsymdo; do{ chardeclaration(&tx,lev,&dx); while(sym==comma) { getsymdo;