语法制导翻译
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/07 21:11:16
语法制导翻译
语法制导翻译
语法制导翻译
第五章 语法制导翻译
5.1 计算语义规则的方法
1 .分析树法:输入串----分析树----依赖图----计算次序
2.基于规则的方法:在构造编译器时,用手工或专门的工具来分析语义规则,确定属性值的计算顺序.
3.忽略语义规则的方法:在分析过程中翻译,那么计算顺序由分析方法来确定而表面上与语义规则无关.实际上,限制语法制导定义,使属性值的计算顺序能和语法分析过程同步进行.
5.2 语法树
表示程序层次结构的树,它 把分析树中对语义无关紧要的成分去掉,是分析树的抽象形 式 ,也称作语法结构树,或结构树.
语法树是常用的一种中间表示形式.
C sg++
把语法分析和翻译分开.语法分析过程中完成翻译有许多优点,但也有一些不足:1.适于语法分析的文法可能不完全反映语言成分的自然层次结构;2.语法分析方法限制,对分析树结点的访问序和翻译需要的访问序不一致.
5.3 L-属性定义
语法分析过程中进行语义分析和翻译,属 性的计算顺序受到语法分析建立分析树结点顺序的限制.
一种自然的计算属性的顺序是按深度优先访问分析树结点的顺序,它适应多种自底向上和自顶向下的翻译方法.
L-属性定义 可用于按深度优先顺序计算属性值.
定义:一个语法制导定义是L-属性定义,如果"A→X1X2…XnÎP,其每一个语义规则中的每一个属性都是一个综合属性,或是Xj(1£j £ n)的一个继承属性,这个继承属性仅依赖于
1.产生式中Xj的左边符号X1,X2,…Xj-1的属性;
2.A的继承属性.
每一个S-属性定义都是L-属性定义
5.4 翻译模式定义
翻译模式是语法制导定义的一种便于翻译的书写形式.其中属性与文法符号相对应,语义规则或语义动作用花括号{ }括起来,可被插入到产生式右部的任何合适的位置上.
这是一种语法分析和语义动作交错的表示法,他表达在按深度优先遍历分析树的过程中何时执行语义动作.
翻译模式给出了使用语义规则进行计算的顺序.可看成是分析过程中翻译的注释.
5.5 类型表达式定义
类型表达式的定义如下:
1) 类型名和基本类型是类型表达式.integer、char、real、boolean是基本类型,所以它们是类型表达式.另外,void表示“无类型”,type_error表示“出错类型”,它们也是类型表达式.
2)类型构造符作用于类型表达式的结果仍然是类型表达式.类型构造符包括:
a)数组构造符ARRAY:若T是类型表达式,则ARRAY(I,T)是类型表达式.
b)笛卡儿乘积´:若T1、T2是类型表达式,则T1´ T2是类型表达式,且´是左结合.
c)记录类型构造符RECORD:若有标识符N1、N2……、Nn与类型表达式T1、T2、…、Tn,则RECORD((N1 ´ T1) ´(N2 ´ T2)´ …´ (Nn ´ Tn))是一个类型表达式,它指称一个记录类型.
d)指针类型构造符POINTER:若T是类型 表达式,则POINTER(T)是类型表达式,它指称一个指针类型.
e)函数类型构造符→:若D1、D2、…、Dn和R是类型表达式,则D1´D2 ´ ……´ Dn
→R是类型表达式,其中´优先于→,它指称从定义域类型D1 ´ D2 ´ … ´ Dn到值域类型R
的映射.
3) 类型表达式中可出现类型变量,变量值是类型表达式.