资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,编译原理实践-语义分析与代码生成,编译原理实践-语义分析与代码生成,1,回顾,回顾,2,语义分析与代码生成,table数组和enter过程的扩充,命令代码生成过程gen,表达式、项、因子及关系式的翻译,语句的翻译,生成PL/0目标代码程序,语义分析与代码生成table数组和enter过程的扩充,3,1.table数组和enter过程的扩充,lod l,a将l,a形成的栈地址变量值置入栈顶,sto l,a 将栈顶值保存到l,a形成的栈地址变量,llevel级别之差,变量所处的程序段,静态级别,与,变量被说明时的,静态级别,之差,aoffset,1.table数组和enter过程的扩充lod l,a将,4,table数组和enter过程的扩充,cal l,a调用子程序,llevel级别之差,call语句所处的程序段,静态级别,与,调用过程被说明时的,静态级别,之差,a被调用代码程序段的起始地址,必须将variable和procedure的level保存在合适的地方,table数组和enter过程的扩充cal l,a调用子程,5,table数组和enter过程的扩充,改变符号表,增加相应的字段(P144图11-1),object=(constant,variable,prozedure);,table:array 0.txmax of,record name:alfa;,case kind:,object of constant:(val:integer);,variable,prozedure:,(level,adr,size:integer);,end;,常量:val,变量:静态级别,位移地址,Procedure:程序地址,静态级别,预留存储单元,table数组和enter过程的扩充改变符号表,增加相应的字,6,table数组和enter过程的扩充,procedure enter(k:objekt);,begin(*enter object into table*),tx:=tx+1;,with tabletx do,begin name:=id;kind:=k;,case k of,constant:begin if numamax then,begin error(31);num:=0 end;,val:=num,end;,variable:begin level:=lev;adr:=dx;dx:=dx+1;,end;,prozedure:level:=lev,end,end,end(*enter*);,table数组和enter过程的扩充procedure en,7,2.命令代码生成过程gen,命令代码生成过程gen(P145图11-3),每调用一次过程gen,在程序存储器里产生一条代码指令,2.命令代码生成过程gen命令代码生成过程gen(P145图,8,3.表达式、项、因子及关系式的翻译,表达式的翻译,中缀表达式与后缀表达式,后缀表达式:操作符总是跟随在它操作数的后边,后缀表达式翻译规则,T(“+”term)=T(term),T(“-”term)=T(term)“-”,T(term1”+”term2)=T(term1)T(term2)“+”,T(term1”-”term2)=T(term1)T(term2)“-”,T(term1”*”term2)=T(term1)T(term2)“*”,T(term1”/”term2)=T(term1)T(term2)“/”,T(“(”expression”)”)=T(expression),3.表达式、项、因子及关系式的翻译表达式的翻译,9,表达式、项、因子及关系式的翻译,expression过程的扩充(P147图11-4),term过程的扩充(P147图11-5),表达式、项、因子及关系式的翻译expression过程的扩充,10,表达式、项、因子及关系式的翻译,factor过程的扩充(P148图11-6),condition过程的扩充(P148图11-7),表达式、项、因子及关系式的翻译factor过程的扩充(P14,11,Example,(x+y)/(z-w),后缀表达式xy+zw-/,Lod x,Lod y,Opr 0,2,Lod z,Lod w,Opr 0,3,Opr 0,5,Example后缀表达式xy+zw-/Lod x,12,Another example,T(x-6*(z+w)(x+y)/(12-w),Another example,13,4.语句的翻译,赋值语句的翻译处理,T(Ident”:=”expression),T(expression),Sto lev-level,adr,4.语句的翻译赋值语句的翻译处理T(expression),14,if语句的翻译处理,T(“if”condition“then”statement),T(condition),Jpc,L1,T(statement),L1:,if语句的翻译处理T(condition),15,while语句的翻译处理,T(“while”condition“do”statement),L1:T(condition),Jpc,L2,T(statement),jmp L1,L2:,while语句的翻译处理L1:T(condition),16,call语句的翻译处理,T(“call”ident),cal,lev-level,adr,call语句的翻译处理cal,lev-level,ad,17,编译原理实践ppt课件,18,5.生成PL/0目标代码程序,执行program6,在SI-NS图上执行program6,直接从PL/0程序翻译写出目标代码程序,5.生成PL/0目标代码程序执行program6,19,
展开阅读全文