什么是编译器设计中的语法导向翻译方案?
它是一种符号,其中上下文无关文法的每个产生都与一组语义规则或动作相关,每个语法符号与一组属性相关。因此,语法和语义动作组结合起来形成语法导向的定义。
翻译可以是中间代码、目标代码的生成,或者在符号表中添加有关构造类型的信息。现代编译器使用语法导向的翻译,通过隐藏许多实现细节使用户的生活变得轻松,并使用户不必明确指定要评估语义规则的顺序。
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