ch6语义分析和中间代码生成

ch6语义分析和中间代码生成

ID:45033888

大小:1.03 MB

页数:141页

时间:2019-11-08

ch6语义分析和中间代码生成_第1页
ch6语义分析和中间代码生成_第2页
ch6语义分析和中间代码生成_第3页
ch6语义分析和中间代码生成_第4页
ch6语义分析和中间代码生成_第5页
资源描述:

《ch6语义分析和中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第六章属性文法第六章语义分析与中间代码生成6.1语义分析的任务6.2语法制导翻译6.2.1属性文法的定义6.2.2基于属性文法的处理方法6.2.3S—属性文法的自下而上计算6.2.4L—属性文法和自顶向下翻译。6.3中间代码生成6.1语义分析的任务源程序经过词法分析、语法分析后,表明该源程序书写正确、符合程序语言所规定的语法,但语法分析并未对程序内部的逻辑含义加以分析,因此编译程序接着进行语义分析,即审查每个语法成分的静态语义。如果静态语义正确,则生成与该语言成分等效的中间代码,或直接生成目标代码。6.1语义分析的任务语义分析进行的语义检查有两类:动态语义

2、检查和静态语义检查。动态语义检查需生成相应的目标代码,在运行时进行;静态语义检查在编译时进行。语法分析语义分析和中间代码生成编译的后续阶段语法树中间代码6.1语义分析的任务静态语义检查涉及以下几个方面:(1)类型检查,如运算操作数的类型应相容。(2)控制流检查,用以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流;break语句需寻找包含它的最小switch、while或for语句方可找到转向点。(3)一致性检查,如在相同作用域中标识符只能说明一次。6.2语法制导翻译程序语言的词法和语法结构可分别用正规式和上下文无关文法来描述,已

3、建立成熟的形式化描述方法。由于语义是上下文有关的,因此语义的形式化描述非常困难,目前较常见的是用属性文法作为描述语义的工具,并采用语法制导翻译法完成对语法成分的翻译。该方法在语法分析的同时进行语义分析。6.2.1属性文法的定义要利用语法制导的翻译方法,就需要在一个上下文无关文法的基础之上赋予每个文法符号以一定的属性,并规定文法的每个产生式对相关属性的运算规则,这种附加了一组属性和运算规则的文法称为属性文法。例如:对一个算数表达式进行翻译,不仅要知道各个运算符的先后次序,而且还要知道表达式中各个变量和常量的数据类型、内存地址或值,还要知道中间结果存放的内存地

4、址和值,这些信息被称为语义信息,也称为属性。6.2.1属性文法的定义属性文法是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。这些属性代表与文法符号相关的信息,例如它的类型、值、代码序列、符号表内容等等。属性和变量一样,可以进行计算和传递,依据则是语义规则。属性的运算规则又称为语义规则或语义子程序,与相应的产生式密切相关,属性的值是由语义规则计算出来的,而语义规则的计算可以产生中间代码或目代码。属性的表示在属性文法中,文法符号X的属性t常用X.t来表示。例如:X.val、X.type、X.addr分别表示X的

5、值、类型和地址。例如:对于算数表达式文法G[E]:如果只想计算表达式的值,则只需关心各文法符号的值属性,因此对每个非终结符都有一个整数值的属性,分别为E.val、T.val、F.val,i的属性为i.lexval。其他终结符+、*、(、)都代表语义动作,将在语义规则中反映。E->E+T

6、T T->T*F

7、F F->(E)

8、i语义规则的表示一个产生式对应的语义规则是根据产生式所蕴涵的语义操作所建立的,并与语义分析的目标有关。例如文法G[E],已表达式求值为目标构造各产生式的语义规则如下:E->E+T

9、T T->T*F

10、F F->(E)

11、i语义规则EE1+TE

12、TTT1*FTFF(E)FdigitE.val:=E1.val+T.valE.val:=T.valT.val:=T1.valF.valT.val:=F.valF.val:=E.valF.val:=digit.lexval产生式6.2.2基于属性文法的处理方法用属性描述语义信息,用语义规则描述属性间的关系,将语义规则与语法规则相结合,在语法分析的过程中通过执行语义动作,计算语义属性的值,从而完成预定的翻译工作。这就是语法制导翻译的思想。具体实现时,语法制导翻译有两种处理方法:语法制导定义,即对每个产生式编制一个语义分析子程序,在进行语法分析的过程中,当一个

13、产生式获得匹配时,就调用相应的语义分析子程序检查与翻译。这种实现方案隐藏了语义规则的计算次序等细节问题,不必规定翻译顺序。翻译模式,即在产生式右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作。语法制导的定义属性一般分为两类:综合属性和继承属性。简单的说,综合属性用于“自下而上”传递信息,而继承属性用于“自上而下”传递信息。语法制导的定义综合属性:在语法树中,一个结点的综合属性的值由其子结点的属性值确定。因此,通常使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值。继承属性:在语法树中,一个结点的继承属性由此结点的父结点和/或

14、兄弟结点的某些属性确定。用继承属性来表示程序语言结构中的上下文依赖

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

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

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