ct1317(更新).ppt

ct1317(更新).ppt

ID:48183359

大小:206.50 KB

页数:33页

时间:2020-01-18

ct1317(更新).ppt_第1页
ct1317(更新).ppt_第2页
ct1317(更新).ppt_第3页
ct1317(更新).ppt_第4页
ct1317(更新).ppt_第5页
资源描述:

《ct1317(更新).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第七章中间代码生成中间语言语法制导方法简单表达式的中间代码生成原子语句的中间代码生成结构语句的中间代码生成声明的中间代码7.1中间语言后缀式----逆波兰式特别是表达式的内部表示图结构中间代码抽象语法树有向不循环图三地址中间代码三元式四元式7.1.1后缀表达式相关中缀变后缀算法初始化一个空堆栈,将结果字符串变量置空。从左到右读入中缀表达式,每次一个字符。如果字符是操作数,将它添加到结果字符串。如果字符是个操作符,弹出操作符,直至遇见开括号、优先级较低的操作符或者同一优先级的右结合符号。把这个操作符压入栈。如果字符是个开括号,把它压入堆栈。如果字符是个闭括号,在遇见开括号前

2、,弹出所有操作符,然后把它们添加到结果字符串。如果到达输入字符串的末尾,弹出所有操作符并添加到结果字符串。后缀计算算法7.1.2抽象语法树AGT和有向不循环图DAG抽象语法树表达式的AGT中间节点:运算符叶节点:操作数推广到程序有向不循环图共享子树7.1.3三地址中间代码三元式:i:(,op1,op2)四元式:(,op1,op2,result)如:a:=b×c+b×d三元式四元式(1)(×,b,c)(1)(×,b,c,t1)(2)(×,b,d)(2)(×,b,d,t2)(3)(+,(1),(2))(3)(+,t1,t2,t3)(4)(:=,(3),a)(4)(:=,t

3、3,a,-)四元式操作符分类算术、逻辑、关系运算符IO操作类型转换赋值(ASSIG,id1,n,id2)地址加(AADD,id1,id2,id3)标号(LABEL,-,-,label)转移过程调用传送参数7.2语法制导方法语法制导方法基于文法结构,在每个产生式的右部增加语义动作,在语法分析过程中,如遇语义动作,就完成对应的语义处理。属性文法属性直接与文法的符号相联系若X为一文法符号,a为X的一个属性,用X.a表示与X关联的a的值对于每个文法规则X0->X1…Xn,Xi的属性Xi.aj与规则的其他符号的属性a1,…,ak有关Xi.aj=fij(X0.a1,…,Xn.ak)动

4、作文法文法规则与语义函数相联系每个产生式的右部附着相应的语义动作每个动作对应一个函数动作文法的定义由语法分析的实现方式决定实例VT={0,1,a}VN={Z,L}S=ZP:{ZLL0LL1LLa}VT={0,1,a}VN={Z,D,L}S=ZP:{ZLLDLD1D0La}init(){sum0=0;sum1=0;}add1(){sum1++;}print(){printf(sum0,sum1);}add0(){sum0++;}类型检查和类型转换各种条件表达式的类型是否是布尔类型?运算符的运算分量是否相容?

5、赋值语句的左、右部类型是否相容?实参与形参的类型是否相容?下标表达式的类型是否为所允许的类型?函数说明中的函数类型与返回值的类型是否一致?中间代码生成中的几个问题语义信息的获取与保存标识符的语义信息类型检查、转换目标代码生成保留相关运算分量和结果的语义信息地址表示语义栈及其操作用途:变量和表达式的处理时存放运算分量和结果的类型和语言信息(层数、偏移、访问方式等,用一个记录FORM表示)top、push(x)、pop(n)常用的语义子程序申请存储单元New_dir(t)New_indir(t)存放中间代码Generate(,op1,op2,result)生成中间代码G

6、enCode()类型转换?生成中间代码清理语义栈7.3简单表达式的中间代码生成ETEs//Es是一个符号Es+T$GenCode(+)EsEsTPTsTs*P$GenCode(×)TsTsPid$Push(id)PC$Push(C)//C表示常量P(E)7.4下标变量中间代码生成(1)V→$Initid$PUSH(Addr(id))A(2)A→[E]$AddNextB(3)B→B→[E]$AddNextB$Init:用来初始化下标计数器n=0;$Push:把id首地址压入栈中;$AddNext:1)下标计数器加1,即n:=n+1;2)从语义栈中取

7、出下标表达式计算结果r;3)生成计算第n维下标需要累加的地址偏移的四元式组:(SUBI,r,Ln,tn+1)(MULTI,tn+1,Sk,tn+2)(MULT,tn+2,ele_size,tn+3)4)从语义栈中取出地址累加结果ad;5)生成地址累加四元式(ADDI,ad,tn+3,tn+4)6)把累加后的地址结果tn+4压入语义栈;中间代码生成实例inti,m;floatz;structrt{inty;floatx;};rta[100];a[5+i].x+m*z(ADDI,5,i,t1)(SUBI,t1,0,t2)(MULT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。