news 2026/5/14 18:05:48

【编译原理】语法制导翻译:属性分类、依赖图与求值逻辑全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【编译原理】语法制导翻译:属性分类、依赖图与求值逻辑全解析

博主前言
在编译原理的学习中,语法制导翻译(SDT)是连接语法分析与中间代码生成的桥梁。本文根据今日课堂笔记整理,重点梳理 SDD/SDT 的核心概念,并总结出一套快速判断属性类型的“高分口诀”,希望能帮到正在复习的小伙伴。


一、 核心术语定义 (Terminology)

在进行语义分析之前,我们需要明确两个基础概念:

  • SDD (Syntax-Directed Definition):语法制导定义。它是上下文无关文法(CFG)的扩展,为每个文法符号关联属性,并为每个产生式关联语义规则。
  • SDT (Syntax-Directed Translation Scheme):语法制导翻译方案。它是在产生式的右部嵌入程序片段(语义动作)的文法。

二、 属性分类:综合属性 vs 继承属性

这是笔记中最核心的考点,也是最容易混淆的地方。根据属性值的传递方向,我们将其分为两类:

1. 综合属性 (Synthesized Attribute, Syn)

  • 定义:结点NNN上的综合属性值由NNN的子结点NNN本身的属性值决定。
  • 特征
    • 信息流向:自底向上(Bottom-Up)。
    • 表现:下层往上传值。

2. 继承属性 (Inherited Attribute, Inh)

  • 定义:结点NNN上的继承属性值由NNN的父结点NNN的兄弟结点以及NNN本身的属性值决定。
  • 特征
    • 信息流向:自顶向下(Top-Down)。
    • 表现:上层或同层往传值。

三、 🎯 核心方法总结:高分记忆口诀

针对属性判别,笔记中总结了一套非常高效的口诀,建议背诵:

“父兄传值,继承属性;子给值,综合。”

属性类型传值来源对应流向
继承属性 (Inh)父节点、兄弟节点自顶向下 / 同层水平
综合属性 (Syn)子节点自底向上

四、 依赖图与求值顺序 (Dependency Graph)

在 SDD 中,如果属性bbb依赖于属性aaa,我们通过依赖图来描述这种约束关系:

  • 基本准则被依赖者→\to依赖者
    • 例如:若有规则E.val=T.valE.val = T.valE.val=T.val,则存在边T.val→E.valT.val \to E.valT.valE.val
  • 求值路径
    • 语法分析树⇒\Rightarrow带有属性值的注释分析树 (Annotated Parse Tree)
    • 拓扑排序:通过依赖图确定一个合法的求值序列(如笔记中标记的1, 2, 3...10序列)。

五、 知识点补充 (Necessary Supplement)

为了使博文更完整,补充以下两类特殊的文法分类,这也是考试常客:

1. S-属性文法 (S-Attributed Grammar)

  • 定义:如果一个 SDD 只包含综合属性,则称为 S-属性文法。
  • 优势:非常适合在自底向上的语法分析(如 LR 分析)过程中实现。

2. L-属性文法 (L-Attributed Grammar)

  • 定义:如果一个 SDD 的每个产生式A→X1X2…XnA \to X_1 X_2 \dots X_nAX1X2Xn的继承属性仅依赖于:
    1. 父节点AAA的继承属性。
    2. 该符号左侧的兄弟符号X1,…,Xi−1X_1, \dots, X_{i-1}X1,,Xi1的属性。
  • 结论:S-属性文法一定是 L-属性文法。

六、 实例场景:addtype 的应用

在笔记的左下角提到了addtype。这通常出现在类型声明语句中(如int a, b, c;):

  1. 关键词int解析后得到类型信息。
  2. 该类型信息作为继承属性向下传递给变量列表中的每一个id
  3. addtype动作将该类型填入符号表。

结语:编译原理虽然抽象,但只要抓住“信息流向”这个核心,配合上面的口诀,属性判断题基本就是送分题。如果你觉得有帮助,欢迎点赞收藏!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 18:05:48

MATLAB 2024b深度学习新特性全面解析与DeepSeek大模型集成开发

第一章:MATLAB 2024b深度学习工具箱新特性简介1、MATLAB Deep Learning Toolbox概览2、实时脚本(Live Script)与交互控件(Control)功能介绍与演示3、批量大数据导入及Datastore类函数功能介绍与演示4、数据清洗&#x…

作者头像 李华
网站建设 2026/5/14 18:05:18

一站式解决文献翻译难题:Zotero PDF Translate 完全指南

一站式解决文献翻译难题:Zotero PDF Translate 完全指南 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/5/14 18:02:09

3PEAK思瑞浦 TPA7253A-SO1R SOP8 运算放大器

特性 运算放大器 -供电电压:3V至36V -低供电电流:220A(最大) -输入轨至-Vs,轨到轨输出 -卓越高频PSRR:100kHz时为65dB -TPA7252/7252A的偏移电压:在25C时最大为4 mv 2 mV TPA7253/7253A的偏移电压:在25C时最大为 电压参考 -2.5V输出,无负载至1-F负载下稳…

作者头像 李华
网站建设 2026/5/14 18:01:42

nova-kernel:面向高性能计算与虚拟化的Linux内核定制实践

1. 项目概述:一个面向现代硬件与虚拟化场景的Linux内核分支最近在折腾一些高性能计算和虚拟化相关的项目时,我常常感觉标准发行版的内核在特定场景下有些“力不从心”。要么是某些新硬件的驱动支持不够及时,要么是虚拟化相关的调度器、内存管…

作者头像 李华
网站建设 2026/5/14 18:01:22

制造企业实现产品服务化的路径

在 AI 与工业物联网(AIoT)时代,制造企业实现“产品服务化”(Servitization,又称服务型制造),本质是把企业和客户的利益绑定在同一侧:客户不再为“硬件所有权”买单,而是为…

作者头像 李华
网站建设 2026/5/14 17:59:23

1.QT和MySQL的连接

以下是图片中的完整文本提取:流程: 1、安装Qt 2、配置path环境变量 3、编译mysql驱动 (用Qt打开mysql.pro文件) 第6行左右,在QMAKE_USE mysql前面加上#,变为 #QMAKE_USE mysql win32:LIBS -LD:/mysql/mysql-8.0.19-winx64/lib …

作者头像 李华