第四章 自底向上分析方法 主要内容 自底向上分析的基本思想 简单优先分析方法 LR类分析方法 LR(0)分析方法 SLR(1)分析方法

Slides:



Advertisements
Similar presentations
第八章 第四节 机动 目录 上页 下页 返回 结束 一个方程所确定的隐函数 及其导数 隐函数的微分法.
Advertisements

大学物理实验 第一讲 南昌大学物理实验中心 2013年2月.
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
编 译 原 理 指导教师:杨建国 二零一零年三月.
圆的一般方程 (x-a)2 +(y-b)2=r2 x2+y2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+ F=0.
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
第九课时 二元一次方程组 .
第6章 LR分析程序及其自动构造 6.1 自下而上分析及其LR分析概述 6.2 LR (0) 分析 6.3 SLR(1) 分析
七(7)中队读书节 韩茜、蒋霁制作.
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
中考阅读 复习备考交流 西安铁一中分校 向连吾.
中央广播电视大学开放教育 成本会计(补修)期末复习
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
常用逻辑用语复习课 李娟.
LR与LL分析 编译原理习题课二 胡云斌 PB
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
中考语文积累 永宁县教研室 步正军 2015.9.
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
小学数学知识讲座 应用题.
倒装句之其他句式.
编译原理与技术 --文法和分析 2018/9/17 《编译原理与技术》讲义.
Chapter4 Syntax Analysis
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
Part5语法分析 授课:胡静.
编译原理复习.
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
语法分析在编译程序中的逻辑位置 语 法 分 析 表 处 理 源 程 序 词 法 分 析 语 义 分 析 中 间 代 码 生 成 中 间 代
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第6章 自底向上优先分析法 自底向上优先分析概述 简单优先分析 算符优先分析 返回目录.
Part5语法分析 授课:胡静.
LL(1)分析方法 LL(1)是LL(k)的特例,其中的k则表示向前看k个符号. LL(1)方法和递归下降法属于同一级别的自顶向下分析法.
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第五章 语法分析——自下而上分析 自上而下分析法(Top-down) 自下而上分析法(Bottom-up) 国防科技大学计算机系602教研室.
内容提要 什么是句法分析 与形式语言句法分析的比较 上下文无关语法的分析策略 自顶向下分析法 自底向上分析法 左角分析法
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
第三章 语法分析 自顶向下语法分析思想 语法分析方法的分类: 自顶向下语法分析方法(Top-Down) ,亦称面向目标的分析方法;
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
第五章 自底向上分析方法 LR(0)分析法.
第3,4次课 一个简单的语法制导翻译器 2.3~2.5.
LL(1)分析法 复 习 LL分析程序构造及分析过程 输入串 符号栈 执行程序 此过程有三部分组成: 分析表 执行程序 (总控程序)
第五章 自底向上分析方法 LR(0)分析法 1 LR(K)分析法 第一个L表示:相应的语法分析将按自左至右的顺序扫描输入符号串;
LALR(1)分析方法.
编译原理实践 13.语法分析程序的自动生成工具YACC.
第五章 语法分析-自下而上分析 5.1 自下而上分析的基本问题 Figure5.5LR演示自下而上分析 i+(i+i)*i
文法等价变换 文法的等价 对文法G1和G2,若有:L(G1)=L(G2),则称文法G1和G2等价, 记作:G1=G2. 文法等价变换
自底向上的语法分析 4.5.
第16讲 相似矩阵与方阵的对角化 主要内容: 1.相似矩阵 2. 方阵的对角化.
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
1.2 子集、补集、全集习题课.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第4课时 绝对值.
第 四 章 迴歸分析應注意之事項.
两个变量的线性相关 琼海市嘉积中学 梅小青.
2.2矩阵的代数运算.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
《离散结构》 二元运算性质的判断 西安工程大学计算机科学学院 王爱丽.
§2 方阵的特征值与特征向量.
欢迎大家来到我们的课堂 §3.1.1两角差的余弦公式 广州市西关外国语学校 高一(5)班 教师:王琦.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第五章 语法分析—自下而上分析 自下而上分析法:即是从输入串开始,逐步进行 “归约”,直至归约到文法的开始符号;
编译原理 第五章 语法分析——自下而上分析 编译原理.
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
§4.5 最大公因式的矩阵求法( Ⅱ ).
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
成本會計 在決策中的功能 第四課 1.
102年人事預算編列說明 邁向頂尖大學辦公室製作.
Presentation transcript:

第四章 自底向上分析方法 主要内容 自底向上分析的基本思想 简单优先分析方法 LR类分析方法 LR(0)分析方法 SLR(1)分析方法 LALR(1)分析方法

逆过程:(符号栈,输入流) 1.1例:SaAcBe [1] A  b [2] A  Ab [3] B  d [4] (-, abbcde) (a,bbcde) (ab,bcde) (aA,bcde) (aAb,cde) (aA,cde) (aAc,de) (aAcd,e) (aAcB,e) (aAcBe,-) (S,-) 1.1例:SaAcBe [1] A  b [2] A  Ab [3] B  d [4] 输入流:abbcde。 规范推导过程为: S a A c B e A b d S  aAcBe[1]  aAcd[4]e[1]  aAb[3]cd[4]e[1]  ab[2]b[3]cd[4]e[1] b

1 自底向上语法分析方法介绍 自下而上 S a A c B e A b d b 思想:从待分析的符号串开始,自左向右进行扫描,自下而上进行分析,通过反复查找当前句型的句柄,并使用产生式规则将找到的句柄归约为相应产生式的左部非终极符,直到将输入串归约为文法的开始符。(移入-归约分析)

1.自底向上的语法分析 语法分析的动作: a.移入:把输入流的头符压入分析栈 b.归约:把分析栈栈顶的句柄,用某一非终极符进行替换 c.成功 d.失败 核心问题 如何确定句柄,不同的找句柄的方法构成不同的自底向上语法分析程序 语法分析的动作,实际上从我们刚才的过程来看大概也就这么几项 确定句柄是很重要的,不能简单的按照某个规则的右部一样了就去替换,最直观的来想,就是出现了规则右部是可以用规则左部直接替换么?(分情形讨论实例) 所以核心的方法就是确定句柄,如果给出一个新的找句柄的方法,就相当于给了个新的方法。 下面就要介绍一个最一般的,也是以前用的比较多的方法,简单优先方法,以后的课还会给大家介绍一些比较标准的现在应用更多的LR语法分析方法,这两类的方法实际上都是告诉大家如何来确定句柄。

2 简单优先分析方法概述 一种“移入-归约”分析方法,根据文法符号的优先关系来确定句柄 优先分析法的主要思想是,为每个符号对(X,Y)定义其在句型中的相邻关系,并通过相邻关系判定进行何种分析动作。 符号相邻:如存在形如"…XY…"的句型,则称X和Y是可相邻的。

简单优先分析中的三种关系 —— 表示相邻两个文法符号归约的先后顺序 X  Y : 当且仅当存在一个产生式A→…XY… X ⊲ Y : 当且仅当存在一个产生式A→…XB… 并有B+Y… X ⊳ Y : 当且仅当存在一个产生式A→…BC… 并有B+…X,C*Y… A X Y … X  Y A X B … . Y X ⊲Y A B C … . X Y X ⊳ Y

3 简单优先文法 文法G为简单优先文法如果满足:  对于任意两个语法符号X和Y,至多成立一种 优先关系;  任意两个产生式都具有不同的右部.

FIRST(W) ={S | W + S…,S(VNVT)} 4 优先关系的确定 A B C … . X Y FIRST(W) ={S | W + S…,S(VNVT)} LAST(W) ={S | W + …S,S(VN VT)} 若有U…SiSj…: 则有Si  Sj ; 若有U…SiW…:任SjFIRST(W),有Si ⊲ Sj 若有U…VW…:任SiLAST(V), Sj(FIRST(W) {W}) 则有: Si ⊳ Sj 输入流的开始和结束标志 ‘#’,文法的开始符为Z, Si FIRST(Z),有# ⊲ Si ; 且# ⊲ Z Si LAST(Z),有Si ⊳ #; 且Z ⊳ #

5 优先关系矩阵 优先关系可以用一个矩阵来表示,称之为优先关系矩阵。其中: R[X,Y]= ,当X  Y时 给出了3中优先关系,和定理,实际上我们就可以根据这个来进行语法分析了,在构造这个分析器之前呢,我们要先来看看,给定了文法,实际上优先关系就已经确定了,如果不事先存好的话,会导致进行语法分析的时候效率比较低,如果是现算肯定慢,所以我们首先一个任务就是把所有的优先关系先求出来。既然文法是给定的,那终极符和非终极符都是固定的,那我就可以构造一个所谓的优先关系矩阵,把优先关系用矩阵的时候存起来,以后到矩阵里去查表就可以了。 矩阵里存的就是这些内容 不满足也可以存错误的编号, 把两个语法符号作为下标就行。 这个矩阵其实也挺好构造的

例: Z  bMb M  a M  (L L  Ma) ⊳ ⊳ ⊳ ⊳ ⊲ ⊲ ⊲ ⊲ ⊲ ⊳ ⊳ ⊳ ⊳ ⊲ ⊲ ) a L ) FIRST LAST 例: Z  bMb M  a M  (L L  Ma) # ) a ( b L M Z ⊳   ⊳ ⊳ ⊳  ⊲ ⊲ ⊲  ⊲ ⊲ ⊳  ⊳ ⊳ ⊳ ⊲ ⊲

6 简单优先分析算法 定理: 设X1…XiXi+1…Xj…Xn是一个句型,若有 Xi ⊲ Xi+1 Xi+2 … Xj-1 Xj ⊳Xj+1 则Xi+1Xi+2…Xj-1Xj一定是该句型的简单短语. 结论: ⊲用来确定句柄的头; 用来确定句柄的内部; ⊳用来确定句柄的结束.

简单优先分析算法要点 找第一个使Sj⊳Sj+1的Sj 从Sj开始往前(左)找第一个使Si-1⊲Si的Si 用SiSi+1…Sj去查产生式的右部,并用相应的左部符号代替句柄SiSi+1…Sj (归约) . 重复上述过程,直至输入符结束.如果归约出文法的开始符号则成功.否则失败. A C D … B … X1X2…Xn SiSi+1…Sj

2.7 程序结构 a b c # Input X1 驱动程序 X2 ... Xn # Stack 优先矩阵 产生式集 栈顶X1与当前输入符a到优先矩阵查R[X1,a], ⊲或则a入栈; ⊳则从栈顶X1向栈底找Xi-1⊲Xi, XiXi+1…X1为句柄进行规约。 2.7 程序结构 a b c # Input X1 驱动程序 优先矩阵 X2 ... 语法分析栈 ,分析的对象(输入流,词法分析后得到的,怎么确定单词是什么属性?实际上我们token的第一位就已经确定了类型),中间是驱动程序,规则集就是查是哪个右部,矩阵当然不用说了 驱动程序要做的工作就是刚才我们所说的,比较优先关系 产生式集 Xn # Stack

⊲ ⊲ ⊲ ⊳ ⊳ ⊳ ⊳ ⊳ 简单优先分析实例1 符号栈 关系 输入流 动作 # b ( a a ) b # 例 G(Z): Z  bMb M  a M  (L L  Ma) 分析字符串:b(aa)b 符号栈 关系 输入流 动作 # b ( a a ) b # # b ( a a ) b # # b ( a a ) b # # b ( a a ) b # # b ( M a ) b # # b ( M a ) b # # b ( M a ) b # # b ( L b # # b M b # # b M b # # Z # ⊲ 移入 ⊲ 移入 ⊲ 移入 ⊳ 规约2  移入  移入 ⊳ 规约4 ⊳ 规约3  移入 ⊳ 规约1 ⊳ 成功

例 已知文法G[E],判断该文法是否为简单优先文法. EE1 E1E1+ T1 | T1 T1T TT * F | F F(E) | i E E1 T1 T F FIRST LAST E1 ,T1 ,T ,F ,( ,i E1 ,T1 ,T ,F ,( ,i T ,F ,( ,i ( ,i T ,F ,( ,i E1 ,T1 ,T ,F ,),i T1 ,T ,F ,),i T ,F ,),i F ,),i ),i

因为优先矩阵元素至多有一种优先关系,所以是简单优先文法。 E E1 T T1 F + * ( ) i # EE1 E1E1+ T1 | T1 T1T TT * F | F F(E) | i 因为优先矩阵元素至多有一种优先关系,所以是简单优先文法。 E E1 T1 T F FIRST LAST E1 T ,F ( ,i ,( ,i ,T1 T1 ),i F ,),i ,T

符号栈 关系 输入流 动作 # i*i # # i *i # #F *i # #T *i # #T * i # #T *i # 符号栈 关系 输入流 动作 # i*i # # i *i # #F *i # #T *i # #T * i # #T *i # #T *F # #T # #T1 # # E1 # # E # 移入 规约[8] EE1 E1E1+ T1 | T1 T1T TT * F | F F(E) | i 规约[6] 移入 移入 规约[8] 规约[5] 规约[4] 规约[2] 规约[1] 成功

练习:已知文法G[S]: S→a | b | (A) A→SdA | S 完成下列表1的简单优先关系矩阵,并判断G[S]是否为简单优先文法。