编译原理(H) 第一次习题课.

Slides:



Advertisements
Similar presentations
迪士尼公主裙衫变化记. 《白雪公主和七个小孩人》 《白雪公主和七个小矮人》,是世界电影史上第一部长动 画片,也是迪士尼的第一部。《白雪公主》不仅为迪斯尼 带来了第一尊奥斯卡小人,更是拯救迪斯尼于水火的贵 人 —— 在经济大萧条的 1937 年的美国,《白雪公主》为迪 斯尼赚到了 850 万美元,这约等于现在的数亿美元!
Advertisements

1 安全乘坐电梯 与大型游乐设施 福建省特检院宁德分院党支部 王祖生 特种设备安全知识进校园.
邱锡鹏 复旦大学计算机科学技术学院 Text Books  “Dragon book”  Compilers: Principles, Techniques, and Tools (2nd Edition)  Alfred V. Aho;Monica S.
组长:倪运超 小组成员:徐悦、曹吕卿、孙浩、徐圣尧.  上海的历史 上海的历史  上海的历史 上海的历史  上海的文化 —— 建筑 上海的文化 —— 建筑  上海的文化 —— 美食 上海的文化 —— 美食  香港的历史 香港的历史  香港的历史 香港的历史  香港的文化 —— 建筑 香港的文化.
一、 突出解析几何复习中的重点问题的通法通解 解析几何中的重点问题 一、 突出解析几何复习中的重点问题的通法通解 直线与圆锥曲线的位置关系 重点一.
高一年级组家长会. 一、考试成绩分析 二、存在的问题 三、给家长的建议 四、科任教师交流 表扬 1 、 年级组语数外成绩优异同学 ( 年级排名 ) 李 芮第 1 名 吕明洋第 2 名 王 越第 3 名 杨天宇第 4 名 张凯燕第 5 名 李 曦第 7 名 魏书静第 8 名 项春怡第 10 名 郑明明第.
沟通交流 活动有序 内容轻松 文明守纪 团结共进 1. 成立家长委员会, 通知 15 人明天下午 3-5 点五楼报告厅 “ 全面育人教育论坛 ” 2. 介绍附中、年级、班级的规范和要求 日常行为规范,高中学习特点,考试、作业要求 3. 开学以来年级、班级开展的工作及安排 开学以来年级、班级开展的工作及安排.
1、毛将后代握手言欢泯恩怨 2、美国总统奥巴马访华.
大学生安全防范知识 城北派出所 陶燕雄.
4月2日是安徒生诞辰200周年纪念日,世界各国的读者以各种各样的方式怀念这位给儿童带来感动和快乐的童话巨人。
远 方 宽厚肩膀,手指干净而修长。 笑声像大海,眼睛里有阳光。 我想象你,一定就是这样。 还没出现,就已对你爱恋;还没遇见,就先有了思念。
600年前,鄭和率領世界上最強大的艦隊,浩浩蕩蕩的駛入印度洋,展開一場「文化帝國」的海上大秀。
第十三章 中国的传统科学技术 中国古代的科技曾经长期处于世界领先地位,对人类文明的进步作出过重要贡献,并形成了富有特色的科技文化。在今天,源自中国古代科技文化的中医学仍然在现实生活中发挥着积极的作用。
情境导入: 诚信是金 同学们,这是一个非常经典的故事。请大家思考当小男孩真的遇到狼时,为什么没人去救他呢? 你从中得到了什么启示?狼来了.MP4.
大洋洲.
欢迎各位家长 同样的心情 一样的期待 初二(2)班家长会.
欢迎各位家长的到来! 沟通 交流 协作 初二 班家长会.
家校同心, 师生同行 ——八(五、六)班家长会.
“他的人生观真是一种‘单纯信仰’,这里面只有三个大字:一个是爱,一个是自由,一个是美。他梦想这三个理想的条件能够回合在一个人生里,这是他的‘单纯信仰’。他的一生的历史,只是他追求这个单纯信仰的实现的历史。” ——胡适《追悼志摩》
欢迎各位家长光临 初二(1)班家长会
学习情境七 领队业务 【学习目标】 了解领队工作职责; 掌握领队的工作程序; 掌握领队的服务要点。 【技能目标】
蒙古与苗族的特色建筑 项艺烽小组 最炫民族风.mp3.
当代 国 际 关 系(案例6) 冷战时期美苏关系的演变.
大聲一點又如何? 打耳光、重擊或大聲音會使聲波以極大的力量快速撞擊鼓膜而傷害鼓膜。 事先知道要聽到很大的聲音要張開嘴巴。
一、平面点集 定义: x、y ---自变量,u ---因变量. 点集 E ---定义域, --- 值域.
一分钟电话营销分享 刘瑾.
热烈欢迎您 参加家长会!.
雄伟的金字塔.
欢迎各位家长 参加初一八班的家长会!.
您買美元了嗎? 退休規劃 全球外幣保單.
管理学基本知识.
通州市教研室 王作良 邮箱 06高考复习讲座 通州市教研室 王作良 邮箱
滁州学院首届微课程教学设计竞赛 课程名称:高等数学 主讲人:胡贝贝 数学与金融学院.
战 后 国 际 关 系 专题五:冷战时期美苏关系的演变 政治学与行政管理系.
反思,调整学习方法 迎接中考的挑战 九(7)班.
培训教案 公司审计部
斑马线上的安全学问 学校:平安二小 班级:四年级(1)班 姓名:张海超 时间:2016年6月21日.
令我后悔的一件事.
热烈欢迎各位家长 初二(1)班
拾貳、 教育行政 一、教育行政的意義 教育行政,可視為國家對教育事務的管理 ,以增進教育效果。 教育行政,乃是一利用有限資源在教育參
課程銜接 九年一貫暫行綱要( )  九年一貫課程綱要( ) 國立台南大學數學教育系 謝 堅.
2.4 二元一次方程组的应用(1).
珍惜时间 提高效率 初二1班
感受柏林禅寺—— 华莲的日记 2006年6月9日 周五 多云
第十课我的朋友圈.
开 学 第 一 课 六年级3班.
國語文好點子趴辣客教學食譜 甜點:〈焦糖鳥布蕾〉
台南市石門國民小學 九十八學年度上學期 作文教學成果
2-1熟記網路交友的注意事項 2-2分析各種網路交友的錯誤心態 2-3認識各種網路交友的正確方法
编译原理复习.
教育部顧問室 九年一貫 防災教育教材.
Compilers Flex & Bison 的安裝使用
2.2 语法分析器生成器YACC 分析器的构造步骤: 产生式→识别活前缀的DFA→分析表(+驱动器) YACC概述
助教:胡光能,解定宝 编译原理讲师:戴新宇
语言及其文法.
港口股份有限公司东源分公司 降本增效 部门:机械队流机二班 发言人:程广州.
第2次课 上下文无关文法
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
学习目标 1、知道家中被盗后要保护现场; 2、了解一些防盗的小技巧。. 学习目标 1、知道家中被盗后要保护现场; 2、了解一些防盗的小技巧。
15-16 水運會 維多利亞公園游泳池 4月30日 (星期六) 9:00-12:30.
考前总结 背景 必要性 作用 新旧版交替面临一些问题 从教学目标和要求说起 知识梳理 可能有助于提高考试成绩 或者让知识掌握得更好.
歐巴桑症候群 *** 歐巴桑症候群***.
第二章 会计要素和会计等式 会计要素; 会计等式; 学习目标.
学习目标 1、知道家中被盗后要保护现场; 2、了解一些防盗的小技巧。. 学习目标 1、知道家中被盗后要保护现场; 2、了解一些防盗的小技巧。
编译原理实践 1.课程说明及引论.
第四章 语法分析 南京大学计算机系 戴新宇
4. 曾文水庫越域引水環評報告彙整 資料來源: 1. 曾文水庫越域引水下游輸水工程環境影響差異分析暨環境現況差異分析及對策檢討報告(定稿本)
用加減消去法解一元二次聯立方程式 台北縣立中山國中 第二團隊.
孙 权 劝 学 --《资治通鉴》 随县炎帝学校 谭芳.
Presentation transcript:

编译原理(H) 第一次习题课

作业 注意过程 作业共性的问题比较少,也没有人提问。下面只 讲一道难一点的题

最多只有一处相邻数字相同的所有数字串 思路: 首先考虑相邻数字都不相同的串 从两个数字开始,用归纳的方法扩展到十个数字 记相邻数字都不相同的串为S,则所求为SS 证明:SS满足要求,满足要求的串都可以表示为 SS

答案 no_1 = ‘0’ no_2 = no_1 | (‘1’ | no_1 ‘1’) (no_1 ‘1’)* no_1? no_3 = … … S = no_9 | (‘9’ | no_9 ‘9’) (no_9 ‘9’)* no_9? | ε ans = S S

某次作业 讨论:分析树与抽象语法树的区别

举例 x=1 y=2 3*(x+y) prog : ( stat )+ ; stat : expr | ID '=' expr NEWLINE | NEWLINE ; expr : multExpr (( '+' | '-' ) multExpr)* multExpr: atom ('*' atom)*; atom : INT | ID | '('! expr ')'!; x=1 y=2 3*(x+y) http://stackoverflow.co m/questions/5026517/ whats-the-difference- between-parse-tree- and-ast

分析树 x=1 y=2 3*(x+y) http://stackoverflow.co m/questions/5026517/ whats-the-difference- between-parse-tree- and-ast

AST x=1 y=2 3*(x+y) http://stackoverflow.co m/questions/5026517/ whats-the-difference- between-parse-tree- and-ast

MP1.1 部分同学没有去看提供的源代码。至少要对API 以及程序执行流程进行阅读 对COOL support code中的list的理解

list 是一个类似lisp表的,递归定义的单链表 结构:head, tail 接口:hd(), tl()

MP1.2 为什么不在这时候进行atoi? 词法分析负责将字符流转换为token流,对常量进行转 换、判断是否越界,是后面语法、语义分析的内容

MP1.2 Ref bin的一个bug:字符串转义+EOF结尾 <STR>\" { ... } <STR><<EOF>> { ... } “\<<EOF>>”这样的序列会在STR中失配

MP1.2 Ref bin的另一个bug:多文件。正确处理: - 重置所有状态:注释层数等 - BEGIN(0):防止无限输出 - YY_NEW_FILE宏

讨论:大家遇到的难以解决的bug以及如何解决

MP1.3 两次提交要求补充说明: 第一次提交要求可以识别正确的文法并产生AST。 注意AST结构与分析树结构、以及与cool文档的 syntax定义的区别。对正确样例的测试将以这次 提交为准,之后有修正会适当减分 第二次提交要求做错误处理与恢复。这部分不要 求与标程行为一致,但要求提供测试用例、文档 说明

MP1.3 一些指导 阅读ast-tree.h,了解你需要生成的AST node 编写文法。冲突的问题,可以借助命令 bison –report-file=FILE 打印分析表 let expression:二义的问题,

Clang和LLVM 在MP1.3两次提交之间、以及MP2中间,会有有 关clang和llvm的内容。 What is LLVM? A “collection of modular and reusable compiler and toolchain technologies” used to develop compiler front ends and back ends. 负责平台无关的中间代码到机器码的优化、代码生成

学习LLVM clang –S –emit-llvm:编译C到LLVM 阅读 http://llvm.org/releases/3.9.0/docs/LangRef.html 根据助教的指导,完成kaleidoscope实验

Clang源码阅读 阅读“Clang” CFE Internals Manual 从main函数读起 使用Doxygen生成文档 学习一些设计模式

理解visitor模式 分离遍历本身与遍历途中的操作 Visitor实现对每个节点的操作,另有遍历器负责 对数据结构进行遍历,要完成的操作由visitor指 定 使用该模式:继承visitor基类,实现对应节点的 访问方法,即可将其传给遍历器,由遍历器在合 适的时机调用

理解visitor模式 以SimpleStreamChecker类为例: class SimpleStreamChecker : public Checker<[…]> { public: checkPostCall(…) { … } checkPreCall(…) { … } checkDeadSymbols(…) { … } }

形式语言 字母表 形式语言 : 字符串集合 非终结符 开始符号 产生式 : 重写规则的集合 形式语法 每个语法定义一个语言 的子集

的分类 乔姆斯基谱系 Chomsky hierarchy Type-0 grammars (unrestricted grammars) Type-1 grammars (context-sensitive grammars) Type-2 grammars (context-free grammars)  Type-3 grammars (regular grammars) 

CFG 的子集 LR(0) grammars LR(0) 项目 直接利用栈中信息就能完成分析. 例子: LR(0) 从识别的角度定义的.

CFG 的子集 LR(0) grammars SLR grammars 利用 FOLLOW 集解决部分冲突 例子: 表达式 LR(0) 从识别的角度定义的. SLR(1)

CFG 的子集 LR(0) grammars SLR grammars LR(1) grammars 引入 LR(1)项目, 比 FOLLOW 考虑更细致 LR(0) 从识别的角度定义的. SLR(1) LR(1)

CFG 的子集 LR(0) grammars SLR grammars LALR(1) grammars LR(1) grammars 同心 LR(1)项目, 合并后, 可能有 LR(1) 没有的冲突 例 LR(1) grammars 例3.34, P86 LR(0) http://people.cs.vt.edu/~ryder/515/f05/homework/hw1ans.pdf SLR(1) LALR(1) LR(1)

CFG 的子集 LR(0) grammars SLR grammars LALR(1) grammars LR(1) grammars LL(1) grammars 和上面的不在一个维度上 LR(0) 从识别的角度定义的. SLR(1) LALR(1) LL(1) LR(1)

CFG 的子集 LR(0) grammars SLR grammars LALR(1) grammars LR(1) grammars LL(1) grammars 和上面的不在一个维度上 LR(0) http://people.cs.vt.edu/~ryder/515/f05/homework/hw1ans.pdf SLR(1) LALR(1) LL(1) LR(1)

CFG 的子集 LR(0) grammars SLR grammars LALR(1) grammars LR(1) grammars LL(1) grammars 书 P88, 例3.36 CFG 非二义 CFG LR(0) SLR(1) LALR(1) LL(1) LR(1)

CFG 的子集 二义的 CFG (语言) CFG 无二义 CFG LR(0) SLR(1) LALR(1) LL(1) LR(1) 为什么是两个 CFG 相交? Anbncndn 是什么语言? SLR(1) LALR(1) LL(1) LR(1)

CFG 的子集 二义的 CFG (语言) CFG 无二义 CFG LR(0) SLR(1) LALR(1) LL(1) LR(1) 为什么是两个 CFG 相交? Anbncndn 是什么语言? SLR(1) LALR(1) LL(1) LR(1)

K 变大, 会变强吗? http://www.cs.cornell.edu/Courses/cs412/2006sp/lectures/lec09.pdf https://www.wikiwand.com/en/LR_parser https://www.wikiwand.com/en/LALR_parser http://www.antlr2.org/article/needlook.html 理论上 LR(1) = LR( k), 实际不方便报错

K 变大, 会变强吗? http://www.cs.cornell.edu/Courses/cs412/2006sp/lectures/lec09.pdf https://www.wikiwand.com/en/LR_parser https://www.wikiwand.com/en/LALR_parser http://www.antlr2.org/article/needlook.html 理论上 LR(1) = LR( k), 实际不方便报错

K 变大, 会变强吗? http://www.cs.cornell.edu/Courses/cs412/2006sp/lectures/lec09.pdf https://www.wikiwand.com/en/LR_parser https://www.wikiwand.com/en/LALR_parser http://www.antlr2.org/article/needlook.html 理论上 LR(1) = LR( k), 实际不方便报错

K 变大, 会变强吗? LL(k+1) , not LL(k) LL(k+1) , not LL(k) http://www.cs.cornell.edu/Courses/cs412/2006sp/lectures/lec09.pdf https://www.wikiwand.com/en/LR_parser https://www.wikiwand.com/en/LALR_parser http://www.antlr2.org/article/needlook.html 理论上 LR(1) = LR( k), 实际不方便报错 LL(k+1) , not LL(k)

最左/最右推导与二义 一个分析树有很多种推导顺序 分析树的结构 语义 一个句子对应多个分析树 二义的语法 语义 : 顺序, 块

最左/最右推导与二义 一个分析树有很多种推导顺序 分析树的结构 语义 一个句子对应多个分析树 二义的语法 分析树的结构 语义 一个句子对应多个分析树 二义的语法 没有二义的语法最左最右产生 的分析树相同? 语义 : 顺序, 块

LR 分析 定义 句型 右句型 句柄 活前缀

LR 分析 定义 分析中出现了两个句柄, 文法是二义的吗? 句型 : 推导到一半的字符串(也可能推到底了) 右句型 : 最右推导得到的句型 句柄 : 句型中和一个产生式右部匹配的子串, 并且, 把 它规约成改产生式左部的非终结符代表了最右推导过 程的逆过程的一步. 活前缀 : 右句型的前缀,该前缀不超过该右句型的最右 句柄的右端 分析中出现了两个句柄, 文法是二义的吗?

LR 分析 分析中出现冲突, 文法是二义的吗?

LR 分析 分析中出现冲突, 文法是二义的吗? 二义文法一定会在分析中出现冲突吗?

现代编程语言的前端 绝大多数是手写的递归下降分析器 GCC 早期使用 yacc : LALR 更好的错误提示 对于上下文相关的语言特性, CFG 无能为力 (下一个实验) GCC 早期使用 yacc : LALR Ocaml , Haskell 使用类似 yacc 工具: LALR https://www.quora.com/What-are-the-parsing-techniques-used-by-modern-compilers