什么是编译器设计中的语法导向翻译方案?

它是一种符号,其中上下文无关文法的每个产生都与一组语义规则或动作相关,每个语法符号与一组属性相关。因此,语法和语义动作组结合起来形成语法导向的定义。

翻译可以是中间代码、目标代码的生成,或者在符号表中添加有关构造类型的信息。现代编译器使用语法导向的翻译,通过隐藏许多实现细节使用户的生活变得轻松,并使用户不必明确指定要评估语义规则的顺序。

Semantic Actions - 每当解析器识别由上下文无关语法生成的输入字符串时,就会执行该操作。

例如,A → BC {语义动作}

语义动作写在花括号中,并附有产生式。

在 Top-Down Parser 中,当 A 将被扩展以派生 BC 将进一步派生字符串 w 时,将采取语义动作。

在Bottom-Up Parser中,当BC减少到A时产生语义动作。

后缀代码的语法定向翻译方案

在后缀表示法中,操作符出现在操作数之后,即操作数之间的操作符被取出并附加在操作数之后。

例如,

考虑语法

E → E (1) + E (2)

E → E (1) ∗ E (2)

E → (E (1) )

E → id

下表显示了语法的后缀翻译。

生产
语义动作
   E → E(1) + E(2)E. 代码 = E (1)。代码| |E (2)。代码 | |'+'
   E → E(1) ∗ E(2)E. 代码 = E (1)。代码| |E (2)。代码 | |'*'
   E → (E(1))
E. 代码 = E (1)。代码
   E → id
E. 代码 = id

后缀符号的翻译

这里,E.CODE 表示语法符号 E 的一个属性或翻译。它表示对 E 求值的三地址语句序列。每个产生式左边的非终结符的翻译是该翻译的串联(||)右侧的非终结符后跟运算符。

在第一个产生式E → E (1) + E (2) 中,翻译 E. CODE 的值是两个翻译 E (1)的串联。代码 & E (2)。代码和符号“+”。

在第二个产生式E → E (1) ∗ E (2) 中,翻译 E. CODE 的值是两个翻译 E (1)的串联。代码 & E (2)。代码和符号“*”。

此处,连接由符号 (| |) 表示。

在第三个产生式E → (E (1) ) 中,括号表达式的翻译与非括号表达式的翻译相同。

在第四个产生式E → id 中,任何标识符的翻译都是标识符本身。

以下是语法符号的各种属性或翻译

以上是 什么是编译器设计中的语法导向翻译方案? 的全部内容, 来源链接: utcz.com/z/352629.html

回到顶部