int statement() { .....
else if (sym==forsym)
{
getsymdo; if (sym==ident) {
i=position(id,*ptx); if(i==0) { } else {
error(11);//找不到标识符
if(table[i].kind!=variable) //如果不是变量
{ } else
error(12); i=0;
{
getsymdo;
if(sym==becomes)//如果是赋值 {
getsymdo;
expressiondo(nxtlev,ptx,lev); //将栈顶表达式内容送到变量中 gendo(sto,lev-table[i].level,table[i].adr);
if (sym==tosym||sym==downtosym) {
int jmp1,jmp2,jpc1; tempsym = sym;
jmp1 = codePointer;
gendo(jmp,0,0);//jmp1,跳到判断处
//开始自增
jmp2 = codePointer;
gendo(lod,lev-table[i].level,table[i].adr); if (tempsym==tosym) { } else
gendo(lit,0,downtostep);
gendo(lit,0,tostep);
gendo(opr,0,2);
gendo(sto,lev-table[i].level,table[i].adr);
code[jmp1].a = codePointer; getsymdo;
expressiondo(nxtlev,ptx,lev);
//开始判断
gendo(lod,lev-table[i].level,table[i].adr); if (tempsym==tosym) {
gendo(opr,0,11);
} else { gendo(opr,0,13);
执行后面语句
}
jpc1 = codePointer;
gendo(jpc,0,0);//如果为假,跳到循环后面,否则
if (sym==dosym) { getsymdo;
statementdo(fsys,ptx,lev); gendo(jmp,0,jmp2);//跳到自增指令 code[jpc1].a = codePointer;
} else
error(27); }
}
}
}
}
}
else { }
error(26);//to expected
....... }
(6)增加运算:++ 和 --。
6.1 文法 <语句> ::== ++|-- ident <语句> ::== ident ++|-- <因子>::== [ ++|-- ] ident <因子>::== ident [ ++|-- ]