语法制导的翻译方案SDT
# 语法制导的翻译方案SDT
# 将 S-SDD 转换为 SDT
# 将 L-SDD 转换为 SDT
# 在非递归的预测分析中进行翻译
- 动作符号
- 自顶向下
- Asyn 和 A 可能均有相关的执行代码
注意
- 综合记录出栈时,要将综合属性值复制给后面特定的语义动作
- 变量展开时(即变量本身的记录出栈时),如果其含有继承属性,则要将继承属性值复制给后面特定的语义动作
为每一个产生式中的每一个符号编写执行代码
示例
# 在递归的预测分析过程中进行翻译
# L-属性定义的自底向上翻译
引入标记非终结符
需要修改文法
为语义动作编写执行代码
示例
-
为继承属性, 为综合属性
-
借助自底向上分析的特性
- 标记非终结符左端的非终结符已经在栈中
- 标记非终结符所在产生式左部的非终结符,其继承属性也已经在栈中
2)
号产生式左部的的其继承属性 的计算 2)
号产生式规约产生的要么用 1)
号产生式继续进行归约, 要么用2)
号产生式继续进行归约- 两种情况下,其继承属性
都已在之前的入栈操作中计算得出,且都位于 stack[top-2]
的位置
- 两种情况下,其继承属性
- 具体可以借助自动机进行分析
- 以上两种情况下的语义动作均可改写为相应的栈操作
编辑 (opens new window)