- 6
- 0
- 约3.68万字
- 约 51页
- 2017-01-28 发布于重庆
- 举报
大连理工大学_编译方法-中间代码及解释程序.
第七章 语义分析与代码生成
7.1 语法制导翻译
编译程序的实质性工作是翻译,即为源程序生成目标代码。为此,我们必须知道程序的含义是什么(语义分析)?应该翻译成什么(代码生成)?
在三、四章,我们主要讨论了源程序的识别,即判定一个源程序是否符合源语言的文法。在讨论语法分析时曾说过,上下文无关文法不足以描述编程语言的全部语法特征。为了说明这一点,让我们来看一个例子:
VAR
i:integer;
BEGIN
j:=i*i
END;
如果j没有在外层块中说明,那么赋值语句中出现的j就是非法的。这是一种上下文敏感的成分。为了清楚地说明这一点,假定j是在自顶向下分析过程中由非终极符变量导出的,在这次推导之前的句型为
αVARj:integer;β变量γ
其中α,β,γ为符号串。推导后的句型为
αVARj:integer;βjγ
为了保证变量在使用前必须说明,需要有如下形式的规则:
VAR j:integer;β变量→VAR j:integer;βj
而不是
变量→j
即变量只有在一定的上下文中才可以展开成j。
上下文敏感成分的分析实质上是语法分析的内容。但是,因为我们的语法分析是以上下文无关文法为基础的,没有考虑上下文敏感成分的处理,所以必须在语义分析时加以考虑。这相当于把语言的敏感成分划归为语言的语义范畴(尽管在概念上并非如此)。比如说在处理说明
VAR j
原创力文档

文档评论(0)