Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -1- 编译程序的面向对象设计与实现 Dr. Zheng Xiaojuan Associate.

Slides:



Advertisements
Similar presentations
纺纱学. 2 绪 论 基本要求:了解纺纱系统的类别 重点掌握:棉纺系统的工艺流程 3 一、纺纱原理与设备 纺纱:用物理或机械的方法将纺织纤维纺成纱 线的过程。 纺纱原理:初加工、原料的选配、开松除杂、 混和、梳理、精梳、并合、牵伸、加捻、卷绕等。 纺纱方法:传统纺纱方法、新型纺纱方法。 纺纱设备:开清棉联合机、梳棉机、精梳机、
Advertisements

第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
数据挖掘实验 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→
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 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 ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
第二部分 行政法律关系主体 第一节 行政主体 一、行政主体 (一)行政主体的概念 cc (二)行政主体资格含义及构成要件 CASE1CASE1\CASE2CASE2 (三)行政主体的职权和职责 1 、行政职权的概念及内容 2 、行政职权的特点 3 、行政职责.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 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 ), ∩ ,∪) 是一个格。而由例 知.
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
语义分析 主要内容:  语义分析概述 ( 必要性、功能、描述方法 )  符号表  类型表达式  声明和程序体的语义分析.
1 第 7 章 专家控制系统 概述 专家系统的起源与发展 专家系统的一般结构 专家系统的知识表示和获取 专家系统的特点及分类.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
非均相物系的分离 沉降速度 球形颗粒的 :一、自由沉降 二、沉降速度的计算 三、直径计算 1. 试差法 2. 摩擦数群法 四、非球形颗粒的自由沉降 1. 当量直径 de :与颗粒体积相等的圆球直径 V P — 颗粒的实际体积 2. 球形度  s : S—— 与颗粒实际体积相等的球形表面积.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
主要内容 :  SLR(1) 分析方法. LR(0) 分析方法的不足  LR(0) 方法对文法的要求严格。  LR(0) 方法容易出现冲突状态。
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
1 学籍归档工作 年学籍归档工作安排 从 2008 年开始,改为按届移交档案 从 2008 年开始,改为按届移交档案 今年的归档工作范围: 今年的归档工作范围: 2014 年应届毕业班级 2014 年应届毕业班级 2014 年办理毕业证的往届生。 2014 年办理毕业证的往届生。 整理内容:根据.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
College of Computer Science & Technology Compiler Construction Principles & Implementation Techniques -1- Compiler Construction Principles & Implementation.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
1-4 节习题课 山东省淄博第一中学 物理组 阚方海. 2 、位移公式: 1 、速度公式: v = v 0 +at 匀变速直线运动规律: 4 、平均速度: 匀变速直线运动 矢量式 要规定正方向 统一单位 五个量知道了三 个量,就能求出 其余两个量 3 、位移与速度关系:
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Introduction to Automatic Control The Laplace Transform Li Huifeng Tel:
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)
EC 营客通产品操作(九) EC 营客通产品操作(九) 400 电话 400 电话. 400 电话有助于提升企业形象,无论企业地址变更、机构 变化、人员变动,联系方式永远不变。且在 EC 上申请的 400 电话可以在 EC 平台上进行统一的 400 电话接听及 400 电话客服的管理。
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
要求: 熟练掌握发动机的基本术语。 结合实物可以说出发动机大致组成。 掌握发动机的基本工作原理。 掌握发动机各系统的作用。
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
消防产品网上认证业务系统 操作指南(初始认证委托) 公安部消防产品合格评定中心 2015 年 4 月.
一、 版 面 构 成 的 概 念 版 面 构 成 的 概 念 二、 版 面 构 成 的 发 展 趋 势 版 面 构 成 的 发 展 趋 势 三、 广 告 文 字 的 版 面 构 成 广 告 文 字 的 版 面 构 成 四、 广 告 版 面 的 视 觉 流 程 广 告 版 面 的 视 觉 流 程.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
党员发展流程 —— 惠东县住建局. 发展流程示例 制定发展 党员规划 递交入党 申请书 确定发展 对象 确定入党 积极分子 预审 入党积极 分子培养 教育考察 入党材料 归档 预备党员 转正 预备党员 教育考察 预备党员 接收审批.
§5.6 利用希尔伯特 (Hilbert) 变换 研究系统的约束特性 希尔伯特变换的引入 可实现系统的网络函数与希尔伯特变换.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
韩文数据库使用说明 鲁锦松. 主要内容 一、为什么要用数据库 二、怎样利用中文数据库 三、怎样利用韩文数据库.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -1- 编译程序的面向对象设计与实现 Dr. Zheng Xiaojuan Associate Professor Software College of Northeast Normal University April. 2009

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -2- 阶段三:语法分析器开发

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -3- 项目需求 读入词法分析的输出结果 token 序列; 对 token 序列进行语法分析生成语法正确的与 源程序结构相对应的语法分析树; 能够指出语法错误所在位置。

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -4- 一、编译原理内容

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -5- 语法分析程序的功能

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -6- 所需编译知识关联图 Develop a Parser Syntax definition basing on Context Free Grammar using implement Top-down Bottom-up √ √

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -7- Top-down parsing Syntax definition basing on CFG using check precondition Predict(A  ) first(  ) follow(A) Yes Recursive-descent LL(1) Implement 所需编译知识关联图

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -8- 一、 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 ) ,右部可空。

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -9- 二、 Top-down parsing 自顶向下语法分析方法的前提条件 –G = (V T, V N, S, P) –For any A  V N, –For any two productions of A, –Predict(A   1)  Predict(A   2) =  ( 同一个非终极符的任意两个产生式的 predict 集合互不相交 ) 这个条件保证 : 针对当前的符号和当前的非终极符, 可 以选择唯一的产生式来进行推导 ;

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -10- 三、 Grammar Transformation 消除公共前缀 (left factoring) 公共前缀 –A   1 | … |  n |  1 | … |  m 提取公因子 –A   A ’ |  1 | … |  m –A ’   1 | … |  n

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -11- 消除左递归 (left recursion) – 直接左递归 :A  A(  1 | … |  n )|  1 | … |  m – 消除方法 : A  (  1 | … |  m )A ’ A ’  (  1 | … |  n )A ’ | 

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -12- 消除左递归 (left recursion) – 间接左递归 : – 消除方法 : Pre-conditions Algorithm S  A b A  S a | b 1:S 2:A A  Aba | b A  bA ’ A ’  baA ’ | 

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -13- 四、 Three Important Sets First Set(first 集 ) for a string  with non-terminal and terminal symbols; –First(  ) Follow Set(follow 集 ) for a non-terminal symbol A; –Follow(A) Predict Set( 预测集 ) for a production; –Predict(A   )

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques First Set (first 集 ) Definition: –First(  ) = {a |  *a , a  V T }, –if  *  then First(  )= First(  )  {  } How to calculate First(  )? –  = , First(  ) = {  } –  = a, a  V T, First(  ) = {a} –  = A, A  V N, First(  ) = First(A) –  = X 1 X 2 …… X i-1 X i …… X n

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -15- S  = {A | A  * , A  V N } For each terminal symbol a, First(a) = {a} For each symbol X, calculate First(X) V N ={A 1, …, A n }, calculate First(A i ) (1) 初始化, First(A i ) ={}; (2)for i =1 to n 对于 A i 的每个产生式, - if A i  , First(A i ) = First(A i )  {  }; - if A i  Y 1 …. Y m, {Y 1,….,Y m }  S , First(A i ) = First(A i )  First(Y 1 )  …..  First(Y m ) - if A i  Y 1 …. Y m, {Y 1,….,Y j-1 }  S , Y j  S  First(A i ) = {First(A i )  {First(Y 1 )  …..  First(Y j-1 )-{  }}  First(Y j ) (3) Repeat (2) until 每个 First(A i ) 没有变化 ( 收敛 ).

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -16- Example P: (1) E  TE ’ (2) E ’  + TE ’ (3) E ’   (4) T  FT ’ (5) T ’  * F T ’ (6) T ’   (7) F  (E) (8) F  i (9) F  n S  = {E ’, T ’ } E{i, n, ( } E’ { +,  } T{ i, n, ( } T’ { *,  } F{ i, n, ( }

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques Follow Set (follow 集 ) How to calculate Follow(A), A  V N (1) 初始化,  A  V N, Follow(A) = { } (2)Follow(S) = {#} (3) 对于每个产生式 A   If there is no non-terminal symbol in , skip; If  =  B , B  V N, Follow(B) = Follow(B)  (First(  )-{  }) If   First(  ), Follow(B) = Follow(B)  Follow(A) If  =  B, Follow(B) = Follow(B)  Follow(A) (4) Repeat (3) until all follow sets do not change any more;

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -18- Example E{i, n, ( } E’ { +,  } T{ i, n, ( } T’ { *,  } F{ i, n, ( } P: (1) E  TE ’ (2) E ’  + TE ’ (3) E ’   (4) T  FT ’ (5) T ’  * F T ’ (6) T ’   (7) F  (E) (8) F  i (9) F  n E{#, )} E’{#, )} T{+, ), #} T’{+, ), #} F{*, +, ), #}

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques Predict Set (predict 集 ) Definition: –Predict(A   ) = first(  ), if   first(  ); –Predict(A   ) = (first(  )-  )  follow(A), if   first(  );

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -20- Example E{i, n, ( } E’ { +,  } T{ i, n, ( } T’ { *,  } F{ i, n, ( } P: (1) E  TE ’ (2) E ’  + TE ’ (3) E ’   (4) T  FT ’ (5) T ’  * F T ’ (6) T ’   (7) F  (E) (8) F  i (9) F  n E{#, )} E’{#, )} T{+, ), #} T’{+, ), #} F{*, +, ), #} first 集 follow 集 First(TE ’ )={i, n,( } First(+TE ’ )={+} Follow(E ’ )={#, )} First(FT ’ )={i,n,( } First(*FT ’ )={*} Follow(T ’ )={ ),+, # } First((E))={ ( } First(i)={i} First(n)={n}

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -21- 五、 Recursive-Descent Parsing The goal of parsing –Check whether the input string belongs to the language of CFG; Two actions –match(a): to check current symbol, if match, read next symbol; –Derivation: select the production

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -22- General Process G = (V T, V N, S, P) Predefined function: void match(a: V T ) Global variable: token: V T Input string: str For each A  V N, A   1 |……|  n A( ) { case token of Predict(A   1 ): SubR(  1 ) ; break; …… Predict(A   n ): SubR(  n ) ; break; other: error; }

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -23- General Process void match(a: V T ) { if token == a token = readNext(str); else error(); } SubR(  ):  = X 1 X 2 …… X n If X i  V T, match(X i ) If X i  V N, X i (); SubR(  ):  =  { }

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -24- Example P: (1) Z  aBd {a} (2) B  d {d} (3) B  c {c} (4) B  bB {b} Z ( ) { if token = a {match(a); B( ); match(d); } else error( ); } B ( ) { case token of d: match(d);break; c: match(c); break; b:{ match(b); B( ); break;} other: error( ); } a b c d main( ){ read(token); Z( )}

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -25- Building Parse Tree Data structure –ParseTree Operations –ParseTree BuildRoot(symbol: V T  V N ); –ParseTree BuildOneNode(symbol: V T  V N ) –AddOneSon(father:*ParseTree, son:*ParseTree ) –SetNum(Node:*ParseTree, n:int) 符号 儿子个数 儿子指针

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -26- Example Z ( ) { if token = a { match(a); B( ); match(d); } else {error(); return nil;} } *ParseTree T = BuildRoot(Z); AddOneSon(T, A);A = BuildOneSon(a); AddOneSon(T, BB); BB= AddOneSon(T, D);D = BuildOneSon(d); return T; SetNum(T, 3);

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -27- 六、 LL(1) Parsing Method LL(1) Parsing –LL(1) parsing table to record predict sets for each production; (LL(1) 分析表 ) –A general engine( 一个通用的驱动程序 )

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -28- LL(1) Parsing Table (LL(1) 分析表 ) How to build LL(1) Parsing Table for a LL(1) Grammar? –For a LL(1) Grammar G = (V T, V N, S, P) –V T = {a 1, …, a n } –V N = {A 1, …, A n } –LL(A i, a i ) = [A i   ], if a i  predict(A i   ) –LL(A i, a i ) = error, if a i not belong to the predict set of any production of A i a1a1 …anan # A1A1 ……. … AnAn

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -29- LL(1) Parsing Mechanism Stack Input #………a 驱动程序 :  栈为空情形的处理  X  V T 情形的处理  X  V N 情形的处理 X … … LL[1] 分析表

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -30- LL(1) Parsing Engine [1] 初始化: Stack := [ ] ; Push(S) ; [2] 读下一个输入符: Read(a) ; [3] 若当前格局是 (, # ) ,则成功结束;否则转下; [4] 设当前格局为(..... X, a.....) ,则  若 X  V T & X= a ,则 { Pop(1) ; Read(a) ; goto [3] }  若 X  V T & X  a ,则 Error ;  若 X  V N ,则: if LL(X, a)=X→Y 1 Y Y n then { Pop(1) ; Push(Y n,.....,Y 1 ) ; goto[3] } else Error

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -31- Building Parse Tree During LL(1) [1] 初始化: Stack := [ ] ; root=BuildOneNode(S); Push(S, root) ; [2] 读下一个输入符: Read(a) ; [3] 若当前格局是 (, # ) ,则成功结束;否则转下; [4] 设当前格局为(..... X, a.....) ,则  若 X  V T & X= a ,则 { Pop(1) ; Read(a) ; goto [3] }  若 X  V T & X  a ,则 Error ;  若 X  V N ,则: if LL(X, a)=X→Y 1 Y Y n then { (X, ptr) = Pop(1); for i=n to 1 { p[i] = BuildOneNode(Yi), Push(Y i, p[i]) ; } AddSons(ptr, p, n); goto[3] } else Error

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -32- 二、语法分析程序的实现

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -33- 部分 SNL 语言的上下文无关文法 总程序: Program::=ProgramHead DeclarePart ProgramBody. 程序头: 2) ProgramHead::=PROGRAMProgramName 3) ProgramName::= ID 程序声明: DeclarePart::=TypeDecpart VarDecpart ProcDecpart 类型声明: TypeDecpart::=  | TypeDec TypeDec ::= TYPETypeDecList TypeDecList::=TypeId = TypeDef ; TypeDecMore TypeDecMore::=  | TypeDecList TypeId::= ID

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -34- 语法树节点的数据结构 childSiblingLinenonodekindkindidnumnametableattrtype 012de c stmtexp…… 原则:语法分析器的输出将作为语义分析的输入,因此语法分 析树中不仅应该包含源程序的结构信息,还应该为语义分析提 供必要的信息。在进行语法分析时,语法分析程序将根据源语 言的文法产生式,为相应的非终极符创建一个语法树节点,并 为之赋值,得到的是与程序结构相似的改进的语法树。除此之 外,只要能够清晰表达出源程序的语法结构即可。语法树节点 的数据结构 可小组自行定义。

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -35- 语法树节点的数据结构

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -36- ProK PheadK p TypeK DecK IntegerK t1 VarK DecK IntegerK v1 v2 ProcDecK q DecK value param: IntegerK i VarK DecK IntegerK a StmLk StmtK Assign ExpK a IdV ExpK i IdV StmtK Write ExpK a IdV StmLk StmtK Read v1 StmtK If ExpK Op < ExpK v1 IdV ExpK Const 10 StmtK Assign ExpK v1 IdV ExpK Op + ExpK v1 IdV ExpK Const 10 StmtK Assign ExpK v1 IdV ExpK Op - ExpK v1 IdV ExpK Const 10 StmtK Call ExpK q IdV ExpK v1 IdV program p type t1 = integer; var integer v1,v2; procedure q(integer i); var integer a; begin a:=i; write(a) end begin read(v1); if v1<10 then v1:=v1+10 else v1:=v1-10 fi; q(v1) end.

Software College of Northeast Normal University Compiler Construction Principles & Implementation Techniques -37- 第三次小组讨论题目: 明确项目需求,学习 ppt 编译原理六个知识点后完成: 仔细研究源语言的语法规则定义,确定产生式是否存在冲突,如有 冲突请根据知识点三进行文法的转换。 根据知识点四求出没有冲突的文法的每条产生式的三个集合。 根据源语言的语法规则特点定义语法分析树的数据结构。 根据知识点五或六进行语法分析(小组任选方法之一)。语法错误 可输出一次。 讨论语法分析树的建立与输出(如对树的数据结构描述不清楚请进 行小组复习或个人复习) 应用 UML 建立系统类图、对象图、用例图、交互图、活动图、状态 图等,编制相应的说明文档。