什么是编译器设计中的语法导向翻译方案?
它是一种符号,其中上下文无关文法的每个产生都与一组语义规则或动作相关,每个语法符号与一组属性相关。因此,语法和语义动作组结合起来形成语法导向的定义。
翻译可以是中间代码、目标代码的生成,或者在符号表中添加有关构造类型的信息。现代编译器使用语法导向的翻译,通过隐藏许多实现细节使用户的生活变得轻松,并使用户不必明确指定要评估语义规则的顺序。
SemanticActions-每当解析器识别由上下文无关语法生成的输入字符串时,就会执行该操作。
例如,A→BC{语义动作}
语义动作写在花括号中,并附有产生式。
在Top-DownParser中,当A将被扩展以派生BC将进一步派生字符串w时,将采取语义动作。
在Bottom-UpParser中,当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.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中,任何标识符的翻译都是标识符本身。
以下是语法符号的各种属性或翻译