- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教学课件讲义PPT教学教案培训资料医学中小学上课资料
第4章 语义分析和中间代码生成 ;4.1 概 述
4.1.1 语义分析的概念
一个源程序经过词法分析、语法分析之后,表明该源程序在书写上是正确的,并且符合程序语言所规定的语法。但是语法分析并未对程序内部的逻辑含义加以分析,因此编译程序接下来的工作是语义分析,即审查每个语法成分的静态语义。如果静态语义正确,则生成与该语言成分等效的中间代码,或者直接生成目标代码。直接生成机器语言或汇编语言形式的目标代码的优点是编译时间短且无需中间代码到目标代码的翻译,而中间代码的优点是使编译结构在逻辑上更为简单明确,特别是使目标代码的优化比较容易实现。; 如同在进行词法分析、语法分析的同时也进行着词法检查、语法检查一样,在语义分析时也必然要进行语义检查。动态语义检查需要生成相应的目标代码,它是在运行时进行的;静态语义检查是在编译时完成的,它涉及以下几个方面:
(1) 类型检查,如参与运算的操作数其类型应相容。
(2) 控制流检查,用以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流;break语句需寻找包含它的最小switch、while或for语句方可找到转向点,否则出错。; (3) 一致性检查,如在相同作用域中标识符只能说明一次,case语句的标号不能相同等。
语义分析阶段只产生中间代码而不生成目标代码的方法使编译程序的开发变得较为容易,但语义分析不像词法分析和语法分析那样可以分别用正规文法和上下文无关文法描述。由于语义是上下文有关的,因此语义的形式化描述是非常困难的,目前较为常见的是用属性文法作为描述程序语言语义的工具,并采用语法制导翻译的方法完成对语法成分的翻译工作。;4.1.2 语法制导翻译方法
语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析过程中,当一个产生式获得匹配(对于自顶向下分析)或用于归约(对于自底向上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。
语法制导翻译分为自底向上语法制导翻译和自顶向下语法制导翻译,我们重点介绍自底向上语法制导翻译。; 假定有一个自底向上的LR分析器,我们可以把这个LR分析器的能力加以扩大,使它能在用某个产生式进行归约的同时调用相应的语义子程序进行有关的翻译工作。每个产生式的语义子程序执行之后,某些结果(语义信息)必须作为此产生式的左部符号的语义值暂时保存下来,以便以后语义子程序引用这些信息。
此外,原LR分析器的分析栈也加以扩充,以便能够存放与文法符号相对应的语义值。这样,分析栈可以存放三类信息:分析状态、文法符号及文法符号对应的语义值。扩充后的分析栈如图4-1所示。;图4–1 扩充后的LR分析栈 ; 作为一个例子,我们考虑下面的文法及语义动作所执行的程序:
产生式 语义动作
(0)S→E print val[TOP]
(1)E→E(1)+E(2) val[TOP]?=val[TOP]+val[TOP+2]
(2)E→E(1)*E(2) val[TOP]?=val[TOP]*val[TOP+2]
(3)E→?(E(1)) val[TOP]?=val[TOP+1]
(4)E→i val[TOP]?=lexval (注:lexval为i的整型内部值)
这个文法的LR分析表见表3.20。; 我们扩充分析栈工作的总控程序功能,使其在完成语法分析的同时也能完成语义分析工作(这时的语法分析栈已成为语义分析栈);即在用某一个规则进行归约之后,调用相应的语义子程序完成与所用产生式相应的语义动作,并将每次工作后的语义值保存在扩充后的“语义值”栈中。图4-2表示算术表达式7+9*5#的语法树及各结点值,而表4.1则给出了根据表3.20用LR语法制导翻译方法得到的该表达式的语义分析和计值过程。只不过在分析成功到达acc后还要添加执行产生式(0)所对应的语义动作,即输出语义值栈顶的val[TOP]?值52。;图4–2 语法制导翻译计算表达式7+9*5#的语法树;; 文法符号的属性可分为继承属性与综合属性两类。
继承属性用于“自顶向下”传递信息。继承属性由相应语法树中结点的父结点属性计算得到,即沿语法树向下传递,由根结点到分枝(子)结点,它反映了对上下文依赖的特性。继承属性可以很方便地用来表示程序语言上下文的结构关系。
综合属性用于“自底向上”传递信息。综合属性由相
您可能关注的文档
- Training_class_振动分析基础讲座教材教学课件.ppt
- UI设计-从图标到界面完美解析第二章_Photoshop功能概述教材教学课件.ppt
- UI设计-从图标到界面完美解析第六章_系列图标教材教学课件.pptx
- UI设计-从图标到界面完美解析第七章_综合案例设计教材教学课件.pptx
- UI设计-从图标到界面完美解析第三章_Illustrator功能概述教材教学课件.ppt
- UI设计-从图标到界面完美解析第四章_按钮、导航、控件的设计教材教学课件.pptx
- UI设计-从图标到界面完美解析第五章_图形、图标设计教材教学课件.pptx
- UI设计-从图标到界面完美解析第一章_UI设计概述教材教学课件.pptx
- Unit_1_英美文学与电影(William_Shakespeare)教材教学课件.ppt
- Unit_2_英美文学与电影(Jane_Austen)教材教学课件.ppt
最近下载
- 《念奴娇赤壁怀古》课件.pptx VIP
- 《线性代数》(陈建龙等)第三章 线性方程组.ppt VIP
- 2025年初中物理课程标准(2022版)考试模拟试卷及答案(共三套).docx
- 城市快速路系统工程冬季施工方案.pdf VIP
- 施耐德_ELAU PacDrive-3-故障代码.pdf VIP
- 2025年重庆市《安全员》C3证考试题库(含答案) .pdf VIP
- 模型试验在土力学与基础工程课程教学中的应用.pdf VIP
- 掘进与支护(第二版)课件:煤巷、半煤岩巷及特殊掘巷法.pptx
- 基于AHP-熵权法的建筑工程经济课程教学策略优化研究.pdf VIP
- 基于BIM技术的独立学院混凝土结构课程教学改革研究.pdf VIP
原创力文档


文档评论(0)