语义分析的任务:静态语义审查审查每个语法结构的静态语义,即验证语法结构合法的程序,是否真正有意义
第7章语法制导翻译技术和中间代码生成例如:表达式A+B*C对运算对象进行类型检查,对变量进行先定义后使用检查如果静态语义正确,语义处理则要执行真正的翻译,即生成程序的某种中间代码的形式或直接生成目标代码
执行真正的翻译第7章语法制导翻译技术和中间代码生成目前多数编译程序进行语义分析的方法是采用语法制导翻译法
它不是一种形式系统,但它比较接近形式化
语法制导翻译法使用属性文法为工具来描述程序设计语言的语义
第7章语法制导翻译技术和中间代码生成(1)属性对文法的每一个符号,引进一些属性,这些属性代表与文法符号相关的信息,如类型、值、存储位置等
与属性相关的信息,即属性值,可以在语法分析过程中计算和传递
属性文法第7章语法制导翻译技术和中间代码生成属性分为两类:综合属性其计算规则按“自下而上”方式进行,即规则左部符号的某些属性根据其右部符号的属性和(或)自己的其他属性计算得到
属性加工的过程即是语义的处理过程
综合属性和继承属性
第7章语法制导翻译技术和中间代码生成继承属性其计算规则按“自上而下”方式进行,即规则右部符号的某些属性根据其左部符号的属性和(或)右部其他符号的某些属性计算得到
第7章语法制导翻译技术和中间代码生成(2)属性文法为文法的每一个规则配备的计算属性的计算规则,称为语义规则(描述语义处理的加工动作)
属性文法包含一个上下文无关文法和一系列语义规则
语义规则:第7章语法制导翻译技术和中间代码生成这些语义规则附在文法的每个产生式上,在语法分析过程中,执行语义规则描述的动作,从而实现语义处理
也就是说,附在文法的每个产生式上语义规则描述了语义处理的加工动作
目前流行的语义描述和语义处理的方法主要是属性文法和语法制导翻译方法
第7章语法制导翻译技术和中间代码生成2