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

2019-08-31 09:35

完的位置,它正是前面未定的跳转地址*/ getsymdo;

}

if (sym==elsesym) { } else { }

code[cx1].a=codePointer; code[cx1].a=codePointer+1;

int jmpdx = codePointer;//记下jmp指令位置 gendo(jmp,0,0); getsymdo;

statementdo(fsys,ptx,lev); code[jmpdx].a = codePointer;

(4)扩充赋值运算:*= 和 /=

4.1 文法

语句 -> ident *= 表达式 语句 -> ident /= 表达式 4.2 符号识别(上面已经完成) 4.3 修改statement函数

if(sym==ident)

{

i=position(id,*ptx); if(i==0) { } else {

if(table[i].kind!=variable&&table[i].kind!=character) { }

else if (table[i].kind==variable) {

getsymdo;

//如果是 := *= /=

if(sym==becomes||sym==muleqsym||sym==deviesym) {

tempsym = sym; //如果是 /= if (sym==deviesym) { } getsymdo;

//将变量放到顶

gendo(lod,lev-table[i].level,table[i].adr);

error(12); i=0; error(11);

...

}

memcpy(nxtlev,fsys,sizeof(bool)* symnum);

expressiondo(nxtlev,ptx,lev);

if (tempsym==becomes)//如果是赋值 { gendo(sto,lev-table[i].level,table[i].adr);

}

else if (tempsym==muleqsym)//如果是 *= {

//将变量放到顶 gendo(lod,lev-table[i].level,table[i].adr); //乘法运算 gendo(opr,0,4); //将结果送到变量

gendo(sto,lev-table[i].level,table[i].adr); }

else if (tempsym==deviesym)//如果是 /= { //除法法运算 gendo(opr,0,5); //将结果送到变量

gendo(sto,lev-table[i].level,table[i].adr); }

}

(5)扩充语句(Pascal的FOR语句):

①FOR <变量>:=<表达式> TO <表达式> DO <语句> ②FOR <变量>:=<表达式> DOWNTO <表达式> DO <语句> 其中,语句①的循环变量的步长为2, 语句②的循环变量的步长为-2。

5.1 文法 for语句 ::== FOR <变量>:=<表达式> TO <表达式> DO <语句> | FOR <变量>:=<表达式> DOWNTO <表达式> DO <语句>

5.2关键字识别 修改init()

void init() { ... strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\... wsym[i++]=forsym; wsym[i++]=dosym; wsym[i++]=downtosym; wsym[i++]=tosym; ... } 5.3 语法语义解析 修改statement 增加for分支


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

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

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

马上注册会员

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