College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -1- Compiler Construction Principles & Implementation.

Slides:



Advertisements
Similar presentations
首 页 首 页 上一页 下一页 本讲内容 投影法概述三视图形成及其投影规律平面立体三视图、尺寸标注 本讲内容 复习: P25~P31 、 P84~P85 作业: P7, P8, P14[2-32(2) A3 (1:1)]
Advertisements

纺纱学. 2 绪 论 基本要求:了解纺纱系统的类别 重点掌握:棉纺系统的工艺流程 3 一、纺纱原理与设备 纺纱:用物理或机械的方法将纺织纤维纺成纱 线的过程。 纺纱原理:初加工、原料的选配、开松除杂、 混和、梳理、精梳、并合、牵伸、加捻、卷绕等。 纺纱方法:传统纺纱方法、新型纺纱方法。 纺纱设备:开清棉联合机、梳棉机、精梳机、
第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
空间群 space groups 晶轴和直角坐标轴
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
数据挖掘实验 1 Apriori 算法编程实现. 数据挖掘实验一 (20’) 实验目的:了解关联规则在数据挖掘中的 应用,理解和掌握关联挖掘的经典算法 Apriori 算法的基本原理和执行过程并完成程 序设计。 实验内容:对给定数据集用 Apriori 算法进行 挖掘,找出其中的频繁集并生成关联规则。
HistCite 结果分析示例 罗昭锋. By:SC 可能原因:文献年度过窄,少有相互引用.
细分曲面 傅孝明 SA 目录 细分曲面的基本思想 两个关键问题 一些基本概念 几种简单的细分曲面算法 细分曲面方法分类.
Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -1- Compiler Construction Principles & Implementation.
4 第四章 矩阵 学时:  18 学时。 教学手段:  讲授和讨论相结合,学生课堂练习,演练习题与辅导答疑相结合。 基本内容和教学目的:  基本内容: 矩阵的运算,可逆矩阵,初等矩阵及其性质和意义, 分块矩阵。  教学目的:  1 .使学生理解和掌握矩阵等价的相关理论  2 .能熟练地进行矩阵的各种运算.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
5 第五章 二次型 学时: 10 学时。 教学手段:  讲授和讨论相结合,学生课堂练习,演练习题与辅导答疑相结合。 基本内容和教学目的:  基本内容: 二次型的矩阵表示、标准型、唯一性、正定二次型。  教学目的:  1 、了解二次型的概念,二次型的矩阵表示。  2 、会化二次型为标准型,规范性。
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
有限自动机 (Finite Automata) 描述程序设计语言中的单词的识别过程。 主要内容: 确定有限自动机 DFA(Deterninistic FA) 确定有限自动机 DFA 的实现 非确定有限自动机 NFA(Nondeterninistic FA) NFA 到 DFA 的转换 DFA 的化简.
例9:例9: 第 n-1 行( -1 )倍加到第 n 行上,第( n-2 ) 行( -1 )倍加到第 n-1 行上,以此类推, 直到第 1 行( -1 )倍加到第 2 行上。
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
自顶向下分析 —— 递归下降法 递归下降法 (Recursive-Descent Parsing) 对每个非终极符按其产生式结构产生相应语 法分析子程序. 终极符产生匹配命令 非终极符则产生调用命令 文法递归相应子程序也递归,所以称这种方 法为递归子程序方法或递归下降法。
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十九讲 ) 离散数学. 例 设 S 是一个集合, ρ ( S )是 S 的幂集合,集合 的交( ∩ ),并(∪)是 ρ ( S )上的两个代数运算, 于是,( ρ ( S ), ∩ ,∪) 是一个格。而由例 知.
语义分析 主要内容:  语义分析概述 ( 必要性、功能、描述方法 )  符号表  类型表达式  声明和程序体的语义分析.
Chapter 10 m-way 搜尋樹與B-Tree
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十五讲 ) 离散数学 模 格 定义 设( L , ≤ ) 是一个格,对任意 a , b , c ∈ L , 如果 a≤b ,都有 a  ( b×c ) = b× ( a  c ) 则称( L , ≤ )为模格。
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
第二章 贝叶斯决策理论 3学时.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 5 章 解线性方程组的直接法 实际中,存在大量的解线性方程组的问题。很多数值方 法到最后也会涉及到线性方程组的求解问题:如样条插值的 M 和.
从 Postscript 格式文献中提取 数学公式的方法. 概述 从 Postscript 格式文献中提取识别数学公式, 是数学公式识别领域的一个研究方向。主要针对 以 Word 和 Latex 为生成源的 Postscript 文档, 提出 基于内容的数学公式提取方法。首先重载 Postscript.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
Chapter 4 OPTIMIZED IMPLEMENTATION OF LOGIC FUNCTIONS 优化.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
第2章 激光器的工作原理 回顾 ——产生激光的三个必要条件: 1. 工作物质 2. 激励能源 3. 光学谐振腔
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
第五节 学习要点 对句子的分析,向来是从句型、句类、句式的角度进行的。 以这三个角度为切入点,我们可以建立句型系统、句类系统和句 式系统。 ★句型系统 —— 按照句子的结构模式划分出来的类型系统。
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
平行线的平行公理与判定 九年制义务教育七年级几何 制作者:赵宁睿. 平行线的平行公理与判定 要点回顾 课堂练习 例题解析 课业小结 平行公理 平行判定.
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Chapter 3 Chang Chi-Chung Parse tree intermediate representation The Role of the Parser Lexical Analyzer Parser Source Program Token Symbol.
初中几何第三册 弦切角 授课人: 董清玲. 弦切角 一、引入新课: 什么是圆心角、圆周角、圆周角定理的内容是什么? 顶点在圆心的角叫圆心角。 顶点在圆上,并且两边都和圆相交的角叫做圆周角。 定理:一条弧所对的圆周角等于它所对的圆心角的一半。 A B′ C B O.
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Introduction to Automatic Control The Laplace Transform Li Huifeng Tel:
Chapter 8 Algorithms. Understand the concept of an algorithm. Define and use the three constructs for developing algorithms: sequence, decision, and repetition.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
项目 1 典型低压电器 的拆装、检修及调试 任务 2 交流接触器的拆装与检修 接触器是一种自动的电磁式自动开关,是 一种依靠电磁力作用使触点闭合或分离的自 动电器,用于接通和断开电动机或其它用电 设备电路。适用于远距离频繁地接通或断开 交直流主电路及大容量控制电路。交流接触 器具有控制容量大、操作方便、便于远距离.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
河南济源市沁园中学 前进中的沁园中学欢迎您 ! 温故知新: 1 、什么是原子? 2 、原子是怎样构成的? 3 、原子带电吗?为什么?
第四章 不定积分. 二、 第二类换元积分法 一、 第一类换元积分法 4.2 换元积分法 第二类换元法 第一类换元法 基本思路 设 可导, 则有.
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
元 胞 自 动 机. 一. 元胞自动机的定义及构成 元胞自动机 (Cellular Automata ,简称 CA ,也有 人译为细胞自动机、点格自动机、分子自动机 或单元自动机 ) 。 是一时间和空间都离散的动力系统。散布在规 则格网 (Lattice Grid) 中的每一元胞 (Cell) 取有限.
Presentation transcript:

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -1- Compiler Construction Principles & Implementation Techniques Dr. Ying JIN Associate Professor Oct. 2007

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -2- Role of Parsing in a Compiler Lexical Analysis scanning Syntax Analysis Parsing Semantic Analysis Intermediate Code Optimization Intermediate Code Generation Target Code Generation analysis/front endsynthesis/back end

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -3- What will be introduced About Parsing –General information about a Parser (parsing) Functional requirement (input, output, main function) Process –General techniques in developing a scanner How to define the syntax of a programming language? –Why not regular expressions? (not enough) –Context free grammar ( 上下文无关文法 ) How to implement a parser with respect to its definition of syntax? –Top-down Parsing –Bottom-up Parsing

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -4- Knowledge Relation Graph Develop a Parser Syntax definition basing on Context Free Grammar using implement Top-down Bottom-up

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -5- § 3 Context Free Grammar & Parsing 3.1 The Parsing Process (语法分析过程) 3.2 Context-free Grammars (上下文无关文法) 3.3 Parse Trees and Abstract Syntax Tree (语法分析树和抽象语法树) 3.4 Ambiguous (二义性) 3.5 Syntax of Sample Language (简单语言的语法)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques The Parsing Process Function of a Parser –Input : Token / TokenList –Output: internal representation of syntactic structure –Process Read tokens Establish syntactic structure – parse tree/syntax tree, according to the syntax definition (context free grammar); Check syntactical errors

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -7- Syntactic Structures Rules for describing the structure of a well-defined program (1) Program (2) Declaration - Constant declaration - Type declaration - Variable Declaration - Procedure/function declaration (3) Body (4) Statements (assignment, conditional, loop, function call) (5) Expressions (arithmetic, logical, boolean)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -8- Syntax Errors Different Types of Syntax Errors –Following token for a syntactic structure is wrong ( 后继单词错 ) –Identifier/constant error ( 标识符或者常量错 ) –Keyword error( 关键字错 ) –Start token for a syntactic structure is wrong( 开始单词错 ) –Unbalanced parentheses( 括号配对错 )

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -9- Syntax Errors int GetMax( int x ; int y) { if (x>y) {return x } else return y; } } vod main() { real 10, y; 10 + ; GetMax( x, y) ; } 后继单词错 括号配对错 关键字错, 开始单词错 标识符错 开始单词错

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -10- Dealing with Errors Once an error is detected, how to deal with it? –Quit immediately, not practical –Error recovery –Error repair –Error correction –There is no “perfect” way to do it!

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -11- Different Types of Parsing Methods Universal parsing methods for any grammars –Cocke-Younger-Kasami algorithm –Earley’s algorithm Top-down parsing methods (limited grammars)- predictive –Recursive descendent parsing ( 递归下降法 ) –LL(k) -- k=1 Bottom-up parsing methods (limited grammars) – shift-reduce –SLR(k) –LR(k) –LALR(k) –Operator-precedence parsing ( 简单优先关系法 ) k=1 inefficient

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -12- § 3 Context Free Grammar & Parsing 3.1 The Parsing Process (语法分析过程) 3.2 Context-free Grammars (上下文无关文法) 3.3 Parse Trees and Abstract Syntax Tree (语法分析树和抽象语法树) 3.4 Ambiguous (二义性) 3.5 Syntax of Sample Language (简单语言的语法)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques Context-free Grammars What is a Grammar? Chomsky classification of Grammars; Context Free Grammar (some concepts)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -14- What is a Grammar? To define syntactic structure? A grammar G is a quadruple (V T, V N, S, P)  V T is a finite set of terminal symbols( 有限的终极符集合 )  V N 是 is a finite set of non-terminal symbols( 有限的非终极符 集合 )  S is start symbol , S  V N  P is a set of production rules( 产生式的集合 ) , each production rule has following form :    , where  ,  (V T  V N )*

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -15- 文法的分类 O 型文法 : 也称为短语文法,其产生式具有形式 :  →  ,其中 ,  (V T  V N )* ,并且  至少含一个非终极符 ; 1 型文法 : 也称为上下文有关文法。它是 0 型文法的特例,即 要求 |  |  |  | (S→ 除外,但 S 不得出现于产生式右部 ) 2 型文法 : 也称为上下文无关文法。它是 1 型文法的特例,即 要求产生式左部是一个非终极符 : A→  3 型文法 : 也称为正则文法。它是 2 型文法的特例,即其产生 式的右部至多有两个符号,而且具有下面形式之一 : A →a , A →a B, 其中 A,B  V N , a  V T  

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -16- 文法的分类 描述能力 O 型文法 > 1 型文法 > 2 型文法 > 3 型文法 对应自动机 –O 型文法 : 图灵机 –1 型文法 : 线性有界自动机 –2 型文法 : 下推自动机 –3 型文法 : 有限自动机

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -17- Context Free Grammar (CFG) 定义为四元组 (V T, V N, S, P)  V T 是有限的终极符集合  V N 是有限的非终极符集合  S 是开始符, S  V N  P 是产生式的集合,且具有下面的形式: A  X 1 X 2 …X n 其中 A  V N , X i  (V T  V N ) ,右部可空。

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -18- Example V T = {i, n, +, *, (, )} V N = {E, T, F } P: E  T E  E + T T  F T  T * F F  (E) F  i F  n S = E

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -19- Derivation ( 直接推导 ) : if there is a production A , we can have  A  , where  represents one step derivation ( 用 A →  一步推导 ). We can say that  is derived from  A  ;  的含义是,使用一条规则,代替  左边的某个 符号,产生  右端的符号串

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -20-   +  : represents one or more steps derivation (  通过一步或多步可推导出  )   *  : 表示  通过 0 步或多步可推导出 

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -21- Example (E)  (E+T) E  + (i+n) E+E+T  * E+i+F P: (1) E  T (2) E  E + T (3) T  F (4) T  T * F (5) F  (E) (6) F  i (7) F  n

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -22- 句型: if S  *  ,则称符号串  为 G 的句型。我们用 SF(G) 表示文法 G 的所有句型的集合 ; Sentence( 句子 ) :只包含终极符的句型被称为 G 的句子 Language( 语言 ) : L( G ) = { u | S  + u, u  V T * } the set of all sentences of G; G = (V T,V N, S, P)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -23- Example 句型 : E, T, E+T, F, T*F, i, n, (E), ……. 句子 : i, n, (i), (n), i+i, i+n, …… 语言 :{i, n, (i), (n), i+i, i+n, ……} P: (1) E  T (2) E  E + T (3) T  F (4) T  T * F (5) F  (E) (6) F  i (7) F  n

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -24- Leftmost(rightmost) derivation 最左(右)推导: 如果进行推导时选择的是句型中的最左 ( 右)非终极符,则 称这种推导为最左 ( 右 ) 推导,并用符号  lm (  r m )表示最 左(右)推导。 左(右)句型: 用最左推导方式导出的句型,称为左句型,而用最右推导方 式导出的句型,称为右句型 ( 规范句型 ) 。 conclusion : each sentence has its rightmost or leftmost derivation (但 对句型此结论不成立)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -25- Example 最左推导 : i+T*n +F  lm i + F*n + F 最右推导 : i+T*n +F  lm i + T*n +i 左句型 : i + i*F 右句型 : E+(i) 特例 : i + (T*i) P: (1) E  T (2) E  E + T (3) T  F (4) T  T * F (5) F  (E) (6) F  i (7) F  n

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -26- Some Notes CFG (V T,V N, S, P) will be used to define syntactic structure of a programming language; Normally V T will be set of tokens of the programming language; one terminal symbol might be one token, one token type, or one symbol representing certain structure; Non-terminal symbols act as intermediate representation of certain structure; Productions are rules on how to derive syntactic structure;

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -27- Example(1) Arithmetic Expressions V T = {id, num, (, ), +, -, *, /} V N = {Exp} P: Exp  Exp + Exp Exp  Exp – Exp Exp  Exp * Exp Exp  Exp / Exp Exp  (Exp) Exp  id Exp  num S = Exp

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -28- Example(2) Program V T = {VarDec, TypeDec, ConstDec, MainFun, FunDec } V N = {Program, Dec, Decs} P: Program  Decs MainFun Decs Dec   Dec  VarDec Dec  ConstDec Dec  FunDec Dec  TypeDec Decs  Dec Decs  Dec Decs S = Program

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -29- Example(3) Variable Declaration V T = {Type, id, ;,, } V N = {VarDec, VarDef, VarDefList, idList} P: VarDec   VarDec  VarDef ; VarDec  VarDef; VarDec S = VarDec VarDef  Type idList idList  id idList  id, idList P: 变量声明  变量声明  一个变量定义 ; 变量声明  一个变量定义 ; 变量声明 变量定义  类型 标识符序列 标识符序列  一个标识符 标识符序列  一个标识符, 标识符序列

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -30- Extended BNF ( 扩展巴克斯范式 ) Extended Notations –Optional | A   |  |  A   A   A   –Repetition * or {} A  A  |  (left recursive) A    * A   A |  (right recursive) A   * 

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -31- Some algorithms on Grammar Transformation 文法等价变化 : L(G1) = L(G2) 增补文法 : the start symbol does not appear in the right part of any productions; ( 定理 2.1) –Z  S

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -32- Some algorithms on Grammar Transformation 文法 G 中除了 S  以外的空产生式 (A  ) 可以消除 ; ( 定理 2.2) – 找出所有可以推导出  的非终极符, 记为 S  ; – 对于所有产生式 A  X1 X2 …… Xi-1XiXi+1……Xn Xi  S  增加 A  X1 X2 …… Xi-1Xi+1……Xn 直到没有新的产生式产生 删除对应空产生式, 除了 S 

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -33- Example S  | A a BB A  B B | a B   |b {S, B, A} A  B A  BB S  a BB S  A a BB S  A a B S  a B S  a BB S  Aa S  A a B S  a S  a B S  A a S  a

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -34- Some algorithms on Grammar Transformation 消除无用产生式 ( 定理 2.3) – 无用产生式 : A , A 不出现在任何句型中 ; –How to find such non-terminal symbols? – 生成会出现在句型中的非终极符集合 SS SS = {S}  Si  SS, Si  1,……, Si  n 把  1,……,  n 中的所有非终极符加入 SS 中 ; 重复直到没有新的加入 ; – 不属于 SS 的非终极符, 它们的产生式是无用产生式, 删除掉 ;

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -35- Example S  | A a BB A  B B | a B   |b C  c {S} {S, A, B} C  c 是无用产生式

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -36- Some algorithms on Grammar Transformation 消除特型产生式 : ( 定理 2.4) 特型产生式 : A  B Algorithm – 对每个非终极符 A, 构造 SA = {B| A  +B, B  V N } – 如果 C  SA, 而且 C   不是特型产生式, 则增加 A   ; – 删除特型产生式 ; – 删除无用产生式 ;

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -37- Example S  | A A  B | a B  b S: {A,B} A: {B} S  a S  b A  b S  | a | b A  a | b B  b

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -38- Some algorithms on Grammar Transformation 消除公共前缀 (left factoring) 公共前缀 –A   1 | … |  n|  1|…|  m 提取公因子 –A   A’|  1|…|  m –A’   1 | … |  n

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -39- Some algorithms on Grammar Transformation 消除左递归 (left recursion) – 直接左递归 :A  A  1 | … | A  n|  1|…|  m – 消除方法 : A   1A’|…|  mA’ A   1A’ | … |  nA’| 

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -40- Example P: (1) E  T (2) E  E + T (3) T  F (4) T  T * F (5) F  (E) (6) F  i (7) F  n E  T E ’ E ’  +T E ’ |  E  E + T | T  = + T  1 = T

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -41- Some algorithms on Grammar Transformation 消除左递归 (left recursion) – 间接左递归 : – 消除方法 : Pre-conditions Algorithm S  A b A  S a | b 1:S 2:A A  Aba | b A  bA ’ A ’  baA ’ | 

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -42- § 3 Context Free Grammar & Parsing 3.1 The Parsing Process (语法分析过程) 3.2 Context-free Grammars (上下文无关文法) 3.3 Parse Trees and Abstract Syntax Tree (语法分析树和抽象语法树) 3.4 Ambiguous (二义性) 3.5 Syntax of Sample Language (简单语言的语法)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques Parse Trees & Abstract Syntax Tree Problem: Derivation( 推导 ) is a way to construct a sentence from the start symbol; –Many derivation for the same sentence; –Not uniquely represent the structure of the sentence Parse tree: one way to represent the structure of a sentence;

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -44- Example P: (1) E  T (2) E  E + T (3) T  F (4) T  T * F (5) F  (E) (6) F  i (7) F  n sentence : i + i * n Several derivations for it Parse Tree

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -45- Parse Tree A labeled tree for a CFG The root must be labeled with the start symbol; Each node has a symbol associated with it; Each leaf must be labeled with a terminal symbol ; For each node which is associated with a non- terminal symbol A, has n sons, from left to right they are associated with symbols B1, …, Bn, then there must be a production A  B1 … Bn

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -46- Abstract Syntax Tree Problem with Parse tree –Includes much more than necessary nodes Abstract Syntax Tree –contains only those nodes necessary for compilation sentence : i + i * n

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -47- § 3 Context Free Grammar & Parsing 3.1 The Parsing Process (语法分析过程) 3.2 Context-free Grammars (上下文无关文法) 3.3 Parse Trees and Abstract Syntax Tree (语法分析树和抽象语法树) 3.4 Ambiguous (二义性) 3.5 Syntax of Sample Language (简单语言的语法)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques Ambiguous Grammar 二义性文法 –For a Grammar G, if there exists one sentence which has more than one parse tree, G is called ambiguous Grammar;

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -49- Example P: Exp  Exp + Exp Exp  Exp – Exp Exp  Exp * Exp Exp  Exp / Exp Exp  (Exp) Exp  id Exp  num id + id + id

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -50- § 3 Context Free Grammar & Parsing 3.1 The Parsing Process (语法分析过程) 3.2 Context-free Grammars (上下文无关文法) 3.3 Parse Trees and Abstract Syntax Tree (语法分析树和抽象语法树) 3.4 Ambiguous (二义性) 3.5 Syntax of Sample Language (简单语言的语法)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques Syntax of Sample Language CFG for ToyL Programming Language

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -52- Toy language Syntax (structure of program) {}{} variable declaration sequence of statements var int x, y; …… +, -, *, /, (, ) x := a+b; if x>0 then … else … ; while x<10 { … }; read(x); write(x+y) ;

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -53- CFG for ToyL V T = { id, num, +, -, *, /, >, <, =, {, }, :, ;, (, ), var, if, then, else, while, read, write, int, real, bool, ass} V N = { Prg, VarDec, VarDefList, VarDef, Body, IdList, Stms, Type, Stm, Exp} S = Prg

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -54- CFG for ToyL Variable Declaration: VarDec   VarDec  var VarDefList ; Program: Prg  VarDec Body Variable Definition List: VarDefList  VarDef; VarDec  VarDef ; VarDec

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -55- CFG for ToyL Variable Definition: VarDef  Type IdList IdList  id IdList  id, IdList Type  int Type  real Type  bool

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -56- CFG for ToyL Body: Body  { Stms } Stms  Stm Stm  Stm; Stms

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -57- CFG for ToyL Statement: Stm  Assig | if-S | while-S | read-S | write-S Assig  id ass Exp If-S  if Exp then Stms else Stms while-S  while Exp Body read-S  read (id) write-S  write (Exp)

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -58- CFG for ToyL Expressions: Exp  E | relE relE  E > E | E < E | E=E P: (1) E  T (2) E  E + T (3) E  E - T (4) T  F (5) T  T * F (6) T  T / F (7) F  (E) (8) F  i (9) F  n

College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -59- Homework Define the syntax of following C statements with CFG –Assignment –If statement –While statement –Case statement Assuming that CFGs for expressions and variables have already defined;