} } chardeclaration(&tx,lev,&dx); if(sym==semicolon) { } else { } error(5); getsymdo; }while(sym==ident); 7.7修改enter函数 void enter (enum object k,int *ptx,int lev, int *pdx) {
(*ptx)++;
strcpy(table[(*ptx)].name,id); /*全局变量id中已存有当前名字的名字*/ table[(*ptx)].kind=k; switch(k) {
case constant: /*常量名字*/
if (num>amax) {
error(31);
}
}
}
num=0;
table[(*ptx)].val=num; break;
case variable: /*变量名字*/
table[(*ptx)].level=lev; table[(*ptx)].adr=(*pdx); (*pdx)++; break;
case character:
table[(*ptx)].level=lev; table[(*ptx)].adr=(*pdx); (*pdx)++; break;
case procedur:
table[(*ptx)].level=lev; break;
7.8 修改打印table表部分代码 switch(table[i].kind) { case constant: printf(\printf(\fprintf(fas,\fprintf(fas,\ break; case variable: printf(\ printf(\ fprintf(fas,\ fprintf(fas,\ break; case procedur: printf(\ printf(\ size=%d\\n\ fprintf(fas,\ fprintf(fas,\\\n\ break; case character: printf(\ printf(\ fprintf(fas,\ fprintf(fas,\ break; } 7.8修改factor int factor() { .... switch(table[i].kind) { case constant:/*名字为常量*/ error(28); break; case variable: case character: selfopr(lev-table[i].level,table[i].adr,sopr); gendo(lod,lev-table[i].level,table[i].adr); /*找到变量地址并将其值入栈*/ break; case procedur: error(21); break; } 7.9增加字符赋值处理 int statement(bool* fsys,int * ptx,int lev) { ... else if (table[i].kind==character) { getsymdo; if (sym==becomes) { getsymdo; if (sym==charvalue) { gendo(lit,0,Tchar);