- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 语义分析和中间代码产生 语义分析和中间代码的产生 在词法分析和语法分析之后,编译程序要进行静态语义检查和翻译 静态语义检查通常包括: 类型检查 控制流检查 一致性检查 相关名字检查 翻译为中间语言的好处: 便于进行与机器无关的代码优化 使编译程序改变目标机更容易 使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰 1 中间语言 掌握几种中间语言的基本结构 逆波兰表示 图表示法(DAG 和抽象语法树) 三地址代码(四元式、三元式、间接三元式) 1.1 后缀式 后缀式表示法又称逆波兰表示法,把运算量(操作数)写在前面,把算符写在后面(后缀) 一个表达式的后缀式可以如下定义: 如果E是一个变量或常量,则E的后缀式是E自身 如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为 E1’ E2’ op,这里E1’和E2’分别为E1和E2的后缀式 如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式 例如:a+b可以写成 (a+b)*c可以写成 abc+*代表 ab+cd+*代表 把表达式翻译成后缀式的语义规则描述: 1.2 图表示法 图表示法包括DAG与抽象语法树 无循环有向图(Directed Acyclic Graph , 简称 DAG)与抽象语法树一样,对于表达式中的每个子表达式,DAG图中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数 两者不同的是,在DAG图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树 例如:赋值语句a:=b*-c+b*-c的抽象语法树和DAG图如下: 产生赋值语句抽象语法树的属性文法 1.3 三地址代码 三地址代码是由下面一般形式的语句构成的序列: X := y op z 其中,x、y、z为名字、常数或编译时产生的临时变量;op代表运算符号如定点运算符、浮点运算符、逻辑运算符等。每个语句的右边只能有一个运算符 例如:赋值语句a:=b*-c+b*-c的抽象语法树如下: 例如:赋值语句a:=b*-c+b*-c的DAG图如下: 三地址语句的种类 (1)赋值语句 x:=y op z,op为二目算术算 符或逻辑算符; (2)赋值语句 x:=op y ,op为一目算符, 如一目减uminus、逻辑非not、移位算符 及转换算符; (3)复制语句 x:=y; (4)无条件转移语句goto L; (5)条件转移语句 if x relop y goto L,关系运 算符号relop( ,=,>= 等等); (6)过程调用语句 param x 和 call p, n ; 过程返回语句 return y; (7)索引赋值 x:=y[i] 及 x[i] :=y ; (8)地址和指针赋值 x:=&y,x:=* y 和 * x:=y。 产生赋值语句三地址代码的属性文法 E.place表示存放E值的名字 E.code表示对E求值的三地址语句序列 newtemp是个函数,对它的调用将产生一个新的临时变量 三地址语句序列是语法树的线性表示,用临时变量代替语法树中的结点 实际实现中,三地址语句序列往往是被存放到一个输出文件中,而不是将三地址语句序列置入code属性之中 三地址代码的具体实现 四元式 op, arg1, arg2, result 三元式 op, arg1, arg2 间接三元式 间接码表+三元式表 四元式需要利用较多的临时单元,四元式之间的联系通过临时变量实现 中间代码优化处理时,四元式比三元式方便的多,间接三元式与四元式同样方便,两种实现方式需要的存储空间大体相同 2 说明语句 当考察一个过程或分程序的一系列说明语句时,便可为局部于该过程的名字分配存储空间 对每个局部名字,我们将在符号表中建立相应的表项,并填入相应的信息,如类型、在存储器中的相对地址等 相对地址是指对静态数据区基地址的一个偏移量 2.1 过程中的说明语句 在C、Pascal及FORTRAN等语言的语法中,允许在一个过程中的所有说明语句作为一个组来处理,把他们安排在一块数据区中 需要一个全程变量如offset来跟踪下一个可用的相对地址的位置 计算说明语句中名字的类型和相对地址 第一条产生式及其语义动作可写为: P? {offset:=0 } D 进一步用产生式ε的标记非终结符号,改写产生式,以便语义动作均出现整个产生似的右边:
您可能关注的文档
最近下载
- 外研版高中《英语》(新标准)必修二Unit4 单元整体教学设计附作业设计.docx VIP
- 初中物理教研会记录(3篇).docx VIP
- 中医诊疗器具消毒课件必威体育精装版完整版本.pptx VIP
- 乘法公式.2乘法公式.ppt VIP
- 小兔子和小狐狸的100个睡前晚安小故事.docx VIP
- 云上高效研发协同实践——RDC新品首发.pdf VIP
- 呼吸衰竭 PPT(共80张PPT)【80页】.pptx VIP
- 2025年湖北省监督数据分析应用中心专项公开招聘22名工作人员笔试参考题库附答案解析.docx VIP
- 2024年Z世代进军职场:欢迎新一代职场精英调查报告.docx VIP
- 学堂在线 模拟电子技术基础(基础部分) 章节测试答案.docx VIP
文档评论(0)