全文预览

编译原理语义表达式及赋值语句的翻译

上传者:你的雨天 |  格式:pptx  |  页数:34 |  大小:320KB

文档介绍
址;x=b翻译为(=,b,_,x)4.4表达式及赋值语句的翻译1.设计6个产生式的语义子程序(1) A→i=E{p=lookup(i.name);? if(p==NULL)error( );? elseemit(=,E.place,_,p);}(b)定义语义函数lookup(i.name),其功能是审查终结符i.name是否出现在符号表中,是则返回i.name在符号表的入口指针,否则返回NULL。(c)定义语义函数emit(op,arg1,arg2,result),emit的功能是产生一个四元式并填入四元式表中。4.4表达式及赋值语句的翻译(2) E→E(1)+E(2){E.place=newtemp( );? emit(+,E(1).place,E(2).place,E.place);}(d)定义语义函数newtemp( ),即每次调用newtemp( )时都将回送一个代表新临时变量的整数码;临时变量名按产生的顺序可设为T1、T2……(3) E→E(1)*E(2){E.place=newtemp( );? emit(*,E(1).place,E(2).place,E.place);}(4) E→−E(1){E.place=newtemp( ); emit(uminus,E(1).place,_,E.place);}4.4表达式及赋值语句的翻译(5) E→(E(1)){E.place=E(1).place;}(6) E→i{p=lookup(i.name);? if(p!=NULL)E.place=p;? elseerror( );}例4.2试分析赋值语句X=-B*(C+D)的语法制导翻译过程。? [解答]赋值语句X=-B*(C+D)的语法制导翻译过程如表4.2所示(加工分析过程参考表4.1)。其实,利用带注释的语法树进行规约的同时,就可以完成相应的语义分析(一起看黑板)。

收藏

分享

举报
下载此文档