什么是语法导向翻译方案的类型?

有两种类型的语法定向翻译方案如下 -

综合翻译

在这种翻译中,产生式规则的 LHS 上的变量值取决于产生式规则的 RHS 上的变量值。

例如,

E → E (1) + E (2)     {E. VAL = E (1)。VAL + E (2)。值}

这里,产生式规则LHS上的E可以通过产生式规则RHS上的E (1)和E (2)的值之和来计算,即LHS变量依赖于RHS变量。

在合成翻译中,节点处的合成属性值是根据解析树中该节点的子节点处的属性值来评估的。

例如,在制作中。

E → E (1) + E (2)

E → 数字

其中数字 = 0 | 1 | 2 |…。. | 9

字符串 2 + 3 的解析树将是

完整的解析树,即带翻译的解析树将由一棵树组成,每个节点都用属性 VAL 标记。

这里,E.VAL 表示非终结符 E 的值,根据解析树中该节点的子节点的值计算得出。

继承翻译

在这个翻译中,产生式右侧的非终结符的翻译依赖于产生式规则左侧的非终结符的翻译。

例如,考虑一个带有语义动作的产生式。

A → BC {B. VAL = 5 * A. VAL}

在这个产生式中,它可以看到 B 的值取决于 A 的值。因此,产生式 RHS 的非终结翻译(B.VAL)依赖于 LHS 的非终结翻译(A.VAL)。

继承属性的值是根据该节点的兄弟节点和父节点的属性值评估的。

例如,一个完整的解析树将是

A → BC {B. VAL = 5 * A. VAL}

如果A.VAL= 2,则B.VAL= 5 * 2 = 10

因此,B 的值是从该节点的父节点计算的。

继承翻译的例子 - 考虑生产

A → BC {C. VAL = 2 * B. VAL}

它的完整解析树将是

这里,节点 C 的值在其兄弟节点 B 上。因此,在继承转换中,节点的继承属性值取决于其父节点或兄弟节点。

解析树上的翻译

考虑语法

E → E + T

E → T

T → T * F

T → F

F → 数字

以下是上述语法的语法导向定义。

生产语义动作
E → E + TE. VAL = E1。VAL + T1。价值
E → TE. VAL = T. VAL
T → T ∗ FT. VAL = T. VAL * F. VAL
T → FT. VAL = F. VAL
F → digitF. VAL = 数字

下图显示了字符串 5 + 6 + 7 的解析树和完整解析树。

Complete Parse Tree (Annotated Parse Tree) - 显示每个节点属性值的解析树。

LEXVAL 表示叶节点处的数字值。