编译原理-属性文法和语法制导翻译

1.属性文法:在上下文无关文法的基础上,为每个文法符号引进一组属性,且让该文法中的重写规则附加上语义规则时,称该上下文无关文法为属性文法。(属性文法往往以语法制导定义和翻译模式两种形式出现。具体说明问度娘)

注意:

(1)属性与变量一样,可以进行计算和传递。

(2)属性加工的过程即是语义处理的过程。

(3)属性分为综合属性(用于“自下而上”传递信息)和继承属性(用于“自上而下”传递信息)。

(1. 语义规则的形式:产生式A—>α的语义规则的形式为b:=f(c1,c2,…,ck)。就是属性b依赖于属性c1,c2,…,ck。
其中:

f是一个函数;

b—A的综合属性,且c1,c2,…,ck是α中文法符号的属性;

b—α中某个文法符号的继承属性, 且c1,c2,…,ck是A或α中任何文法符号的属性.

(2.VT—VN的属性

(1) VT — 只有综合属性,由词法分析器提供.

(2) VN — 既可有综合属性也可有继承属性; 开始符号S的所有继承属性作为属性计算前的初始值.

(3.属性的计算/获得

(1)由该产生式提供的计算规则计算获得:产生式右边的继承属性,产生式左边的综合属性。

(2)由其它产生式的属性规则计算或由属性计算器的参数提供:产生式左边的继承属性,产生式右边的综合属性

2.综合属性:通常使用自底向上的方法(由子确父),S—属性文法:仅使用综合属性的属性文法.
3.继承属性:用继承属性来表示程序设计语言结构中的上下文依赖关系很方便.(由父兄却该结点继承属性)

4.基于属性文法的处理方法:
(1.依赖图:继承属性和综合属性之间的相互依赖关系的有向图。
构造过程:为每个包含过程调用的语义引入一个虚综合属性b,改写为b=f(c1,c2,…,ck)的形式

-->为每个属性设置一个结点--->若属性b依赖于属性c,则从属性c的结点有一条有向边连到属性b的结点。
(2. 属性的计算次序:
(1)良定义的:若一个属性文法不存在属性之间的循环依赖关系,则称该文法为良定义的。

(2)一个依赖图的任何拓扑排序都给出一个语法树中结点的语义规则计算的有效顺序
5.基础文法—用于建立输入符号串的语法分析树

posted @ 2017-06-05 16:20  freeflying  阅读(1807)  评论(0)    收藏  举报