- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1
第6章 语法制导翻译和中间代码生成
6.1 语法制导翻译概述
6.2 符号表和常数表
6.3 中间代码
6.4 说明语句(简单变量)的翻译
6.5 整型算术表达式及赋值语句的翻译
6.6 混合型算术表达式及赋值语句的翻译
6.7 布尔表达式的翻译
6.8 标号和无条件转移语句的翻译
6.9 控制语句的翻译
if-then if-then-else while-do 复合语句
6.10 小结
2
㈠语法分析和语义分析的区别
①语法分析
利用产生式推导或归约,验证符号串是否为文法的一个句子,并没有考虑符号和符号串的意义。
②语义分析
规定每个符号和符号串的意义,同时完成符号串所规定的语义动作,显然这是以语法正确为前提。
例文法G
E→E(1)+T | T
T→T(1)*F | F
F→(E) | i | x | y
i:语法分析认为i是一个终结符,代表标识符;而语义分析认为它不仅是一个标识符,还具有标识符名、种属和类型等。i可能是一个简单变量,也可能是一个标号。标识符名由单词二元式中的值给出,种属和类型可从符号表获取。
x:语法分析认为它是一个终结符,代表整常数;而语义分析认为它不仅是一个整常数,还具有值,值由单词二元式中的值给出。
3
y:语法分析认为y是一个终结符,代表实常数;而语义分析认为它不仅是一个实常数,还具有值,值由单词二元式中的值给出。
F:语法分析认为F是一个非终结符,代表语法单位因子,F由i、x、y或(E)归约而得;而语义分析认为F还具有值、类型等属性。为了保存值和类型,引入语义变量F.val、F.type。
T:语法分析认为T是一个非终结符,代表语法单位项,由F或T*F归约而得;而语义分析认为T还具有值、类型等属性。为了保存值和类型,引入语义变量T.val、T.type。
E:语法分析认为E是一个非终结符,代表语法单位算术表达式,由T或E+T归约而得;而语义分析认为E还具有值、类型等属性。为了保存值和类型,引入语义变量E.val、E.type。
+:语法分析认为它是一个终结符,代表算术加;而语义分析认为它可能是一个实数加运算符,也可能是一个整数加运算符,视运算对象而定。
*:语法分析认为它是一个终结符,代表算术乘;而语义分析认为它可能是一个实数乘运算符,也可能是一个整数乘运算符,视运算对象而定。
4
E→E(1)+T:在语法分析时认为它是一个算术表达式的产生式,而在语义分析时认为:应将E(1)的值(用E(1).val表示)加上T的值(用T.val表示),结果放在E.val中。若数据类型有实型和整型之分,在运算前还需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行实数加运算。
T→T(1)*F:在语法分析时认为它是一个项的产生式,而在语义分析时认为:应将T(1)的值(用T(1).val表示)乘上F的值(用F.val表示),结果放在T.val中。若数据类型有实型和整型之分,在运算前还需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行实数乘运算。
㈡语义分析主要工作
①建立符号表和常数表。
②诊察和报告源程序中的语义错误。
③根据语言的语义产生中间代码(或机器指令),或直接解释执行。
5
6.1 语法制导翻译概述
㈠语法制导翻译方法简介
为每一个产生式配一个语义子程序。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。
㈡实现方法(以SLR分析器为例)
SLR分析器是由工作栈(状态栈和符号栈)、分析表和总控程序三部分构成,只要适当修改工作栈和总控程序,就可将SLR分析器用于语义分析。
①分析表不变
②改造工作栈
为了保存语义信息,在状态栈、符号栈的基础上增加单词值(wval)栈和语义(semantic)栈。
状态栈(原有)
符号栈 (原有)
单词值栈(新增)
语义栈(新增)
6
状态栈(不变)
符号栈(不变)
增加单词值栈(wval),用于保存单词的值(字符串形式)。
增加语义栈(semantic) ,用于记录分析过程中需保留的语义值。例:值(semantic.val)、地址(semantic.addr)、种属(semantic.cat)、类型(semantic.type) 、…… 。
经改造后,工作栈如下所示:
state symbol wval .val .addr .cat .type …
Sm
X
……
X.val
X.addr
X.cat
X.
您可能关注的文档
最近下载
- 新22S6消防工程参考标准.docx
- 慢性肾脏病早期筛查、诊断及防治指南(2022年版).pptx VIP
- 家庭饮食健康计划.pptx VIP
- 2025年福建省厦门集美中学招聘办公室职员1人笔试备考题库及答案解析.docx VIP
- 级配碎石施工 ..ppt VIP
- 2022年7月上海高考英语真题(学生版+解析版+听力音频).docx
- DB44T 1212-2013 用能单位能源计量管理体系通用要求.pdf VIP
- 上-下气道慢性炎症性疾病联合诊疗与管理专家共识中华医学会呼吸病学分会哮喘学组(发布时间:2017-07).pdf VIP
- 心力衰竭诊疗规范.docx VIP
- 光照时间对三斑海马幼苗成活率和生长速度的影响.pdf VIP
文档评论(0)