大侠素材铺

Similar documents
Microsoft PowerPoint - ch4.ppt [兼容模式]

Microsoft PowerPoint - ch4.ppt [兼容模式]

Microsoft PowerPoint - syntaxdirect

Microsoft PowerPoint - L9-v3.pptx

编译原理原理与技术

Microsoft PowerPoint - 5 Syntax-Directed Translation.pptx

大侠素材铺

内容提要 1 语法制导翻译语法制导定义 S 属性定义的自下而上计算 L 属性定义的自上而下计算 L 属性定义的自下而上计算 2 中间代码生成中间语言声明语句赋值语句布尔表达式和控制流语句

大侠素材铺

.size main,.lfe1-main.local b.comm b,4,4.comm c,4,4.ident "GCC: (GNU) egcs /Linux (egcs release)" 修改图 6.5 中计算声明名字

修改图 7.5 中计算声明名字的类型和相对地址的翻译方案, 允许名字表而不是单个名字出现在形式为 D id : T 的声明中 即允许 a, b, c : integer 这种形式的变量声明 下面是一个 C 语言程序 : long f1( i

编译技术 Compiler Principles 课程总结 湖南大学信息科学与工程学院软件工程系杨金民 2019/06

Microsoft PowerPoint - SyntaxDirectedTranslation [Compatibility Mode]

Microsoft PowerPoint - ch7 [Compatibility Mode]

Microsoft PowerPoint - ch6 [Compatibility Mode]

Microsoft PowerPoint - ch7.ppt [兼容模式]

编译原理与技术

ebook14-4

再版前言

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

目 录 第 一 章 地 方 陪 同 导 游 人 员 服 务 程 序...1 第 一 节 地 方 陪 同 导 游 人 员 的 概 念 与 职 责...1 第 二 节 服 务 准 备...2 一 熟 悉 接 待 计 划...2 二 落 实 接 待 事 宜...5 三 物 质 和 知 识 的 准 备...

走 吧, 到 三 峡 去 : 那 里 是 我 们 先 人 用 生 命 之 血 打 造 的 家 园 走 吧, 到 三 峡 去 : 那 里 的 浪 涛 承 载 过 千 百 万 只 我 们 先 人 驶 向 今 天 的 航 船 走 吧, 到 三 峡 去 : 那 里 的 每 一 座 青 山 都 刻 满 了 我

6寸PDF生成工具

( 地 ( ) 组 织 机 构 代 码 企 业 详 细 名 称 哈 密 地 伊 吾 新 疆 广 汇 新 能 源 有 限 公 司 玛 纳 斯 玛 纳 斯 祥 云 化 纤 有 限 公 司 玛 纳 斯 玛 纳 斯 澳 洋 科 技 有 限 责

申請機構基本資料

申請機構基本資料

附件1

~2~

,,

untitled

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

<4D F736F F D A67EABD7A4BAB3A1B1B1A8EEA8EEABD7A6DBA6E6B5FBA6F4AD70B5652E646F63>

统计工作情况汇报

Microsoft Word - 送報伕2.doc

Microsoft Word - N011 斷翅天使

中 国 科 学 院 国 家 科 学 图 书 馆

申论写作套路万能模板

申 请 律 师 执 业 许 可 初 审 服 务 指 南 目 录 一 办 理 要 素 ( 一 ) 事 项 名 称 和 编 码 4 ( 二 ) 实 施 机 构 4 ( 三 ) 申 请 主 体 4 ( 四 ) 受 理 地 点 4 ( 五 ) 办 理 依 据 4 ( 六 ) 办 理 条 件 5 ( 七 )

图 文 聚 焦 国 培 计 划 (2013) 甘 肃 省 农 村 小 学 音 乐 骨 干 教 师 短 期 集 中 培 训 9 月 4 日 开 班 了, 学 员 老 师 们 从 甘 肃 省 各 个 县 市 州 汇 聚 湖 南 一 师, 开 始 了 为 期 14 天 的 培 训 学 习 : 鲜 明 的

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

环 境, 我 在 巩 固 在 校 期 间 所 学 习 的 理 论 知 识 的 同 时, 不 断 的 充 实 己, 利 用 业 余 时 间 主 动 学 习 专 业 知 识, 技 能, 把 理 论 联 系 到 工 作 实 践 中 作 为 一 名 工 作 生 活 中 的 党 员, 我 始 终 注 意 与

1 行 业 发 展 不 平 衡 我 国 房 地 产 中 介 服 务 业 起 步 较 晚, 专 业 分 工 程 度 和 国 外 发 达 国 家 相 比 还 有 很 大 差 距 房 地 产 中 介 服 务 行 业 的 发 展 水 平 与 房 地 产 开 发 行 业 的 市 场 化 水 平 密 切 相 关

汇集全球21位医生的经验和智慧,总结出最实用的专业建议,这些都是最值得你牢记的健康提醒

"# $ % & $# $ % & "!! " # $! %(() * )(

2016 年 地 质 工 程 系 教 学 工 作 安 排 2016 学 年 我 系 将 在 总 结 过 去 工 作 的 基 础 上, 结 合 今 年 学 院 以 抓 质 量 强 内 涵 促 改 革 调 结 构 建 品 牌 细 管 理 重 过 程 为 宗 旨, 以 规 范 管 理 深 化 内 涵 为

<4D F736F F D203136BCADBBD8D2E4D3EBD1D0BEBF2E646F63>

萧山中学课程建设方案.doc


Microsoft Word - 9pinggb_A4.doc

Microsoft Word - 9pinggb_A4-f4.doc

理 论 探 索 事 业 单 位 改 革 的 五 点 思 考 余 路 [ 摘 要 ] 事 业 单 位 改 革 是 中 国 改 革 的 重 要 环 节, 其 影 响 力 和 难 度 不 亚 于 国 有 企 业 改 革 本 文 着 重 围 绕 推 进 事 业 单 位 改 革 应 考 虑 的 五 个 方 面

日 本 位 于 亚 洲 东 部, 太 平 洋 西 北 角, 是 我 国 东 方 的 一 个 岛 国 在 洪 积 世 ( 注 1) 的 大 部 分 时 期 内, 日 本 与 大 陆 相 连 大 约 在 洪 积 世 晚 期 至 冲 积 世 ( 注 2) 初 期, 日 本 各 地 发 生 海 进, 出 现

2深化教育教学改革、创新人才培养模式


Microsoft Word - 9pinggb_let.doc

实 习 上 下 点 表 格 解 释 和 相 关 纪 律 要 求 : 1 表 格 中 所 有 名 词 都 为 简 称, 包 括 医 院 名 称 四 年 级 五 年 级 各 专 业 名 称 等 所 有 时 间 都 为 学 生 装 好 行 李 出 发 时 间, 请 提 前 0 分 钟 将 行 李 运 到

3 基 金 杠 杆 从 分 级 基 金 的 概 念, 我 们 知 道 了 分 级 基 金 的 A 份 额 是 每 年 获 得 固 定 收 益 的 稳 健 份 额,B 份 额 是 具 有 杠 杆 效 应 的 激 进 份 额 分 级 基 金 中 的 杠 杆 一 般 有 三 类 : 份 额 杠 杆 =(A

简报158期.doc

Microsoft Word - 9pingb5_let.doc

退休權益.ppt [相容模式]

Microsoft Word - 1.《國文》試題評析.doc

Ps22Pdf

$%%& ()*+, %&, %-&&%%,. $ %,, $,, & /$- 0(1 $%%& %& 234 %-%, 5&%6&633 & 3%%, 3-%, %643 -%%% :::; 7<9; %-%, 3$%$ :::;

# $# #!# # # # # # # %# # # &# # # # #! "

zt


了 波 涛 和 号 声 袁 读 者 很 容 易 就 进 入 广 州 城 的 水 上 旅 途 袁 进 入 一 座 野 水 上 名 城 冶 的 传 说 中 去 遥 于 是 袁 一 座 名 城 往 事 充 满 了 漂 流 感 袁 旋 律 自 水 上 而 来 袁 我 们 就 这 样 来 到 了 往 事 的

壹、摘 要

第三章 栈和队列

PowerPoint Presentation

摘 要 网 络 欺 诈 催 生 黑 色 产 业 链, 商 业 运 作 模 式 日 渐 成 熟 互 联 网 + 的 飞 速 发 展 催 生 了 黄 牛 打 码 手 羊 毛 党 等 日 趋 专 业 的 黑 产 团 伙, 他 们 分 布 在 产 业 链 的 各 个 环 节, 为 黑 产 利 益 链 条 提

Microsoft PowerPoint - 1-Introduction.ppt

第二章

<4D F736F F D20B6C0AE78B0EDAABAC0B8A740B8D65FA7EBA7BAA54EA4E5BEC7ACE3A873C24FA55AA15E2E646F63>

Microsoft Word - F5.docx

第十号 上市公司关联交易公告

Microsoft Word - 朗诵诵材.doc

06-07周年報告template.PDF

<4D F736F F D20C8CBB8A3D2BDD2A9BCAFCDC5B9C9B7DDB9ABCBBECFEACABDC8A8D2E6B1E4B6AFB1A8B8E6CAE9A3A8CEE4BABAB5B1B4FABFC6BCBCB2FAD2B5BCA

PowerPoint Presentation

大侠素材铺


Microsoft PowerPoint - ir

编译原理与技术

山东2014第四季新教材《会计基础》冲刺卷第二套

PowerPoint 演示文稿

Review

<4D F736F F F696E74202D20B5DA31D5C220D2FDC2DB2E BD6BBB6C15D205BBCE6C8DDC4A3CABD5D>

第5章修改稿

校园之星

实践 : 能够独立设计和开发简单语言的编译器 课程意义 : 1. 本课程能使学生对编程语言的设计和实现有深刻的理解, 对和编程语言有关的理论 ( 形式语言和自动机理论 类型论等 ) 有所了解, 对宏观上把握编程语言来说, 起一个奠基的作用 2. 对软件工程来说, 编译器是一个很好的实例 ( 基本设计

Ps22Pdf

untitled

大侠素材铺


Microsoft PowerPoint - ch1.ppt [兼容模式]

PowerPoint Presentation

Transcription:

编译原理与技术 语法制导翻译 Ⅱ 计算机科学与技术学院 李诚 22/10/2018

Announcement Tutorial on Thursday (25/10/2018) 3B201, Class time Assignment review Q & A Cheng @ Compiler Fall 2018, USTC 2

主要内容 源程序 词法分析器 token 语法分析器 分析树 语义分析 注释分析树 中间代码生成 中间表示 符号表 语法分析树 抽象语法树 从语法制导定义到翻译方案 S 属性定义的 SDT L 属性定义的 SDT Cheng @ Compiler Fall 2018, USTC 3

抽象语法树 语法树是分析树的浓缩表示 : 算符和关键字是作为内部结点 语法制导翻译可以基于分析树, 也可以基于语法树 S if B then S1 else S2 if-then-else S B S 1 S 2 语法树 if B then S else 1 S 2 分析树 Cheng @ Compiler Fall 2018, USTC 4

抽象语法树 例 : 表达式 (A - 12) * B + 6 的语法结构树 + * 6 - B A 12 Cheng @ Compiler Fall 2018, USTC 5

建立算符表达式的语法树 mknode (op, left, right) 建立一个运算符号结点, 标号是 op, 两个域 left 和 right 分别指向左子树和右子树 mkleaf (, entry) 建立一个标识符结点, 标号为, 一个域 entry 指向标识符在符号表中的入口 mkleaf (num, val) 建立一个数结点, 标号为 num, 一个域 val 用于存放数的值 Cheng @ Compiler Fall 2018, USTC 6

构造语法树的语法制导定义 以算数表达式为例 产生式语义规则 E E 1 + T E.nptr = mknode( +, E 1.nptr, T.nptr) E T T T 1 F T F F (E) F F num E.nptr = T.nptr T.nptr = mknode(, T 1.nptr, ) T.nptr = = E.nptr = mkleaf (,.entry) = mkleaf (num, num.val) Cheng @ Compiler Fall 2018, USTC 7

构造语法树的语法制导定义 注意事项 : 同样是产生式附带语义规则, 不同的语义规则产生不同的作用 对算符结点, 一个域存放算符并作为该结点的标记, 其余两个域存放指向运算对象的指针 基本运算对象结点, 一个域存放运算对象类别, 另一个域存放其值 ( 也可用其他域保存其他属性或者指向该属性值的指针 ) Cheng @ Compiler Fall 2018, USTC 8

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 9

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 10

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 11

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 12

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 13

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 14

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 15

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 16

S 属性定义的语法树构造 a+5b 的语法树的构造 E.nptr E.nptr + T.nptr T.nptr + T.nptr num num 5 指向符号表中 a 的入口 指向符号表中 b 的入口 Cheng @ Compiler Fall 2018, USTC 17

构造 a-4+c 语法树的步骤 (1) p1:=mkleaf(,entry a); (2) p2:=mkleaf(num, 4); (3) p3:=mknode( -,p1,p2) (4) p4:=mkleaf(, entry c) (5) p5:=mknode( +,p3,p4) p 1, p 2,..., p 5 是指向结点的指针, entry a 和 entry c 分别指向符号表中标识符 a 和 c 的指针 + p 5 + p 3 - p 4 entryc - p 1 entrya p 2 num 4 to entry for a to entry for c num 4 指向 c 的入口 指向 a 的入口 Cheng @ Compiler Fall 2018, USTC 18

左递归的消除引起继承属性 考虑以下左递归文法 产生式语义规则 E E 1 + T E.nptr = mknode( +, E 1.nptr, T.nptr) E T T T 1 F T F F (E) F F num E.nptr = T.nptr T.nptr = mknode(, T 1.nptr, ) T.nptr = = E.nptr = mkleaf (,.entry) = mkleaf (num, num.val) Cheng @ Compiler Fall 2018, USTC 19

左递归的消除引起继承属性 首先消除左递归 T + T + T + E TR R +TR 1 R T FW W FW 1 W F 产生式部分不再给出 Cheng @ Compiler Fall 2018, USTC 20

左递归的消除引起继承属性 E T {R.i = T.nptr} T + T + T + R {E.nptr = R.s} R + T {R1.i = mknode ( +, R.i, T.nptr)} R 1 {R.s = R 1.s} R {R.s = R.i } T F {W.i = } W {T.nptr = W.s} W F {W1.i = mknode (, W.i, )} W 1 {W.s = W 1.s} W {W.s = W.i } F 产生式部分不再给出 Cheng @ Compiler Fall 2018, USTC 21

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 22

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 23

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 24

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 25

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 26

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 27

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 28

左递归的消除引起继承属性 T i W num 略去了 E TR T 部分 i W i W s 指向符号表中 b 的入口 num 5 指向符号表中 a 的入口 Cheng @ Compiler Fall 2018, USTC 29

主要内容 源程序 词法分析器 token 语法分析器 分析树 语义分析 注释分析树 中间代码生成 中间表示 符号表 语法分析树 抽象语法树 从语法制导定义到翻译方案 S 属性定义的 SDT L 属性定义的 SDT Cheng @ Compiler Fall 2018, USTC 30

语法制导翻译方案 语法制导翻译方案 (SDT) 是在产生式右部中嵌入了程序片段 ( 称为语义动作 ) 的 CFG SDT 可以看作是 SDD 的具体实施方案 Cheng @ Compiler Fall 2018, USTC 31

将 S-SDD 转换为 SDT 将一个 S-SDD 转换为 SDT 的方法 : 将每个语义 动作都放在产生式的最后 Cheng @ Compiler Fall 2018, USTC 32

S- 属性定义的 SDT 实现 综合属性可通过自底向上的 LR 方法来计算 当归约发生时执行相应的语义动作 Cheng @ Compiler Fall 2018, USTC 33

S- 属性定义的 SDT 实现 可以通过扩展的 LR 语法分析栈来实现 在分析栈中使用一个附加的域来存放综合属性值 若支持多个属性, 那么可以在栈中存放指针 此时, 分析栈可以看成一个栈, 栈元素包含状态 文法符号 综合属性三个域 ; 分析栈也可以看成三个栈, 分别是状态栈 文法符号栈 综合属性栈, 分开看的理由是, 入栈出栈并不完全同步 Cheng @ Compiler Fall 2018, USTC 34

S- 属性定义的 SDT 实现 可以通过扩展的 LR 语法分析栈来实现 语义翻译对应栈的操作 Cheng @ Compiler Fall 2018, USTC 35

SLR 分析栈中实现计算器 桌面计算器的 SDD 和 SDT 定义如下 : Cheng @ Compiler Fall 2018, USTC 36

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top...... Z Z. z Y Y. y X X.x...... 产生式 L E n E E 1 + T E T T T 1 F T F F (E) F digit 语义规则 print (E.val) E.val =E 1.val +T.val E.val = T.val T.val = T 1.val F.val T.val = F.val F.val = E.val F.val = digit.lexval 栈 state val Cheng @ Compiler Fall 2018, USTC 37

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top...... Z Z. z Y Y. y X X.x...... 产生式 L E n E E 1 + T E T T T 1 F T F F (E) F digit 代码段 print (E.val) E.val =E 1.val +T.val E.val = T.val T.val = T 1.val F.val T.val = F.val F.val = E.val F.val = digit.lexval 栈 state val Cheng @ Compiler Fall 2018, USTC 38

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T E.val =E 1.val +T.val E T E.val = T.val T T 1 F T.val = T 1.val F.val T F T.val = F.val F (E) F.val = E.val F digit F.val = digit.lexval Cheng @ Compiler Fall 2018, USTC 39

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T val [top 2 ] = E T T T 1 F T F F (E) F digit val [top 2]+val [top] E.val = T.val T.val = T 1.val F.val T.val = F.val F.val = E.val F.val = digit.lexval Cheng @ Compiler Fall 2018, USTC 40

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T val [top 2 ] = E T T T 1 F T F F (E) F digit val [top 2]+val [top] 值不变, 无动作 T.val = T 1.val F.val T.val = F.val F.val = E.val F.val = digit.lexval Cheng @ Compiler Fall 2018, USTC 41

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T val [top 2 ] = val [top 2]+val [top] E T T T 1 F val [top 2 ] = T F F (E) F digit val [top 2]val [top] T.val = F.val F.val = E.val F.val = digit.lexval Cheng @ Compiler Fall 2018, USTC 42

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T val [top 2 ] = val [top 2]+val [top] E T 值不变, 无动作 T T 1 F val [top 2 ] = T F F (E) F digit val [top 2]val [top] 值不变, 无动作 F.val = E.val F.val = digit.lexval Cheng @ Compiler Fall 2018, USTC 43

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T val [top 2 ] = val [top 2]+val [top] E T 值不变, 无动作 T T 1 F val [top 2 ] = val [top 2]val [top] T F 值不变, 无动作 F (E) val [top 2 ] =val [top 1] F digit F.val = digit.lexval Cheng @ Compiler Fall 2018, USTC 44

SLR 分析栈中实现计算器 简单计算器的语法制导定义改成栈操作代码 top 栈...... Z Z. z Y Y. y X X.x...... state val 产生式 代码段 L E n print (val [ top1] ) E E 1 + T val [top 2 ] = val [top 2]+val [top] E T 值不变, 无动作 T T 1 F val [top 2 ] = val [top 2]val [top] T F 值不变, 无动作 F (E) val [top 2 ] =val [top 1] F digit 值不变, 无动作 Cheng @ Compiler Fall 2018, USTC 45

翻译输入 3*5+4n 输入 state val 使用的产生式 3*5+4n - - *5+4n 3 3 *5+4n F 3 Fdigit *5+4n T 3 TF 5+4n T* 3* +4n T* 5 3*5 +4n T* F 3*5 F digit Cheng @ Compiler Fall 2018, USTC 46

翻译输入 3*5+4n +4n T 15 T T*F +4n E 15 E T 4n E+ 15+ n E+4 15+4 n E+F 15+4 F digit n E+T 15+4 T F n E 19 E E+T En 19 - L 19 L En Cheng @ Compiler Fall 2018, USTC 47

总结 采用自底向上分析, 例如 LR 分析, 首先给出 S- 属性定义, 然后, 把 S- 属性定义变成可执行的代码段, 这就构成了翻译程序 随着语法分析的进行, 归约前调用相应的语义子程序, 完成翻译的任务 Cheng @ Compiler Fall 2018, USTC 48

主要内容 源程序 词法分析器 token 语法分析器 分析树 语义分析 注释分析树 中间代码生成 中间表示 符号表 语法分析树 抽象语法树 从语法制导定义到翻译方案 S 属性定义的 SDT L 属性定义的 SDT Cheng @ Compiler Fall 2018, USTC 49

L 属性定义的自上而下计算 边分析边翻译的方式能否用于继承属性? 属性的计算次序一定受分析方法所限定的分析树结点建立次序的限制 分析树的结点是自左向右生成 如果属性信息是自左向右流动, 那么就有可能在分析的同时完成属性计算 Cheng @ Compiler Fall 2018, USTC 50

L 属性定义的自上而下计算 如果每个产生式 AX 1 X j-1 X j X n 的每条语 义规则计算的属性是 A 的综合属性 ; 或者是 X j 的继承属性, 但它仅依赖 : 该产生式中 X j 左边符号 X 1, X 2,, X j-1 的属性 ; A 的继承属性 S 属性定义属于 L 属性定义 Cheng @ Compiler Fall 2018, USTC 51

L 属性定义的自上而下计算 变量类型声明的语法制导定义是一个 L 属性定义 产生式语义规则 D TL L.in = T.type T int T real L L 1, L T. type = integer T. type = real L 1.in = L.in; addtype(.entry, L.in) addtype(.entry, L.in) Cheng @ Compiler Fall 2018, USTC 52

L 属性定义的自上而下计算 翻译方案 例把有加和减的中缀表达式翻译成后缀表达式如果输入是 8+5 2, 则输出是 8 5 + 2 E T R R addop T {print (addop.lexeme)} R 1 T num {print (num.val)} E T R num {print (8)} R num{print (8)}addop T{print (+)}R num{print(8)}addop num{print(5)}{print (+)}R {print(8)}{print(5)}{print(+)}addop T{print()}R {print(8)}{print(5)}{print(+)}{print(2)}{print()} Cheng @ Compiler Fall 2018, USTC 53

编译原理与技术 语法制导翻译 Ⅱ 有些时候不是因为看到希望才坚持, 而是因为坚持久了才看到了希望 Loved by Cheng Li