什么是语法导向翻译器的实现?

语法导向的翻译方案是一种上下文无关的语法,其中属性与括在大括号 ({ }) 中的语法符号和语义动作相关。这些语义动作是解析器在适合翻译的时间知道的子程序。产生式右侧的语义动作的位置表示解析器知道执行的时间。

当它可以产生一个翻译方案时,它应该提供一个属性值在动作定义它时可用。这需要

  • 产生式右侧的符号的继承属性应在该符号之前(左侧)的动作中计算,因为它可以定义为评估其右侧符号的继承属性的动作。

  • 评估产生式左侧非终结符的综合属性的动作应该位于产生式右侧的末尾,因为它可以定义任何右侧语法符号的属性。

考虑一个由产生式及其语义动作组成的示例。生产是

E → E 1 + E 2

它的语义动作将是

{E。值 = E 1。瓦尔 + E 2。值}

语法导向翻译提供了一种描述输入-输出映射的方法,并且该描述独立于实现。要实现语法定向翻译,它可以使用由一对数组 STATE和 VAL组成的堆栈。每个状态条目显示一个指向解析表的指针,每个VAL代表与相应状态符号关联的值。

STATE数组由上下文无关语法中出现的所有变量或标识符组成,VAL数组由每个变量的值组成。

示例- 用于生产

A → 公元前

要计算变量 A 的平移,首先,我们必须将 B 和 C 分别插入堆栈中,B.VAL并分别对应它们的值和 C.VAL。

当 BC 简化为 A 时,Bottom-Up Parser 将执行翻译。

Before Reduction - Top 指针将指向 C 变量,而 VAL [TOP] 由 C.VAL.VAL [TOP-1] 由 B.VAL 组成。

After Reduction - 当 BC 将减少为 A 时,B 和 C 及其对应的值B.VAL都C.VAL将被弹出,并且 AA.VAL将被推入堆栈。因此,在归约之后,堆栈将在其堆栈 TOP 中有变量 A,而 VAL [TOP] 现在将由 A.VAL 组成。

∴ 对于生产 A → BC