生成赋值四元式.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
生成赋值四元式

第七章 中间代码生成 中间语言 语法制导方法 简单表达式的中间代码生成 原子语句的中间代码生成 结构语句的中间代码生成 声明的中间代码 中间语言 后缀式----逆波兰式 图结构中间代码(语法树、DAG) 三地址中间代码(三元式、四元式) 三地址中间代码 三元式:i:(?,op1,op2) 四元式:( ?,op1,op2,result) 语法制导方法 语法制导方法 基于文法结构,在每个产生式的右部增加语义动作,在语法分析过程中,如遇语义动作,就完成对应的语义处理。 类型检查和类型转换 各种条件表达式的类型是否是布尔类型? 运算符的运算分量是否相容? 赋值语句的左、右部类型是否相容? 实参与形参的类型是否相容? 下标表达式的类型是否为所允许的类型? 函数说明中的函数类型与返回值的类型是否一致? 中间代码生成中的几个问题 语义信息的获取与保存 语义栈及其操作 常用的语义子程序 简单表达式的LL语法制导 下标变量中间代码生成 表达式中间代码生成的例子 a[5+i].x + m * z 其中,i,m:integer; z:real; a:array[1..100] of rt; rt = record y:int;x:real end 例:x + f (H(10), g(Y)) 其中x是整型变量,H为形参函数名,H的形参为 值参,f、g为实在函数名,f的参数均为值参, g的参数为变参。 ( VALACT,10,?1,1 ) ( CALL, H, false, t1 ) ( VARACT, Y,?1,1 ) ( CALL, g, true, t2 ) ( VALACT, t1, ?1,size1 ) ( VALACT, t2, ?2,size2 ) ( CALL, f, true, t3 ) ( ADDI, x, t3, t4 ) 过/函调用中间代码的生成 遇到过/函名: 在符号表中的地址压栈,实参计数器为0; 遇到实参Ei: 产生计算表达式Ei的中间代码,实参的语义 信息压栈,计数器加1。 实参结束: 根据过/函的语义信息,检查形参与实参个数 一致?类型相容?种类符合?过/函?, 产生参数传送的中间代码。产生调用的中间代码 删除语义栈中过/函名及实参的内容, 如果是函数 将返回值的语义信息压入栈中。 过/函调用的语法制导 ProcFunCall→ id #CallHead ( ParamList ) #CallTail ParamList→ ? | ExpList ExpList→ E #ActParam NextList NextList→ ? | , ExpList GOTO语句和标号语句的中间代码 LABEL L1,L2,...,Ln 空 S?GOTO Li (JUMP, ARG(Li) ) S?Li:S ( LABEL,ARG(Li) ) S.tuple 条件语句的中间代码 条件语句的文法: S→ if E then S ElsePart ElsePart→ else S ElsePart → ? 条件语句的中间代码形式 if E then S1 else S2 if E then S 条件语句的语法制导 S→ if E then #ThenIf S ElsePart #EndIf ElsePart → else #ElseIf S ElsePart → ? #ThenIf 根据Sem [ top ]的值,检查它的类型是否为boolean类型,如果是则产生中间代码 (THEN, Sem[top], _, _)。 #ElseIf 产生中间代码 (ELSE, _, _, _) #EndIf 产生中间代码 (ENDIF, _, _, _) While语句的中间代码 while语句的文法: S→ while E do S while语句的中间代码形式 while语句的语法制导 S→ while #StartWhile E do #DoWhile S #EndWhile #StartWhile 产生中间代码 (W

文档评论(0)

magui + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档