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

2019-08-31 09:35

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 [ ++|-- ]


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

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

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

马上注册会员

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