第五章 自底向上分析方法 LR(0)分析法 1 LR(K)分析法 第一个L表示:相应的语法分析将按自左至右的顺序扫描输入符号串;

Slides:



Advertisements
Similar presentations
1 基北區 103 學年度免試入學志願選填、 超額比序項目、共同就學區規劃說明 臺北市政府教育局 新北市政府教育局 基隆市政府教育處.
Advertisements

1 人事資料考核作業待遇資料報送說明. 2 待遇資料報送情形 ( 一 ) 非主管機關成績:機關人數報送率 機關已報送現職人數 / 機關應報送數* 100% ( 二 ) 主管機關成績分二部份:報送情形、線上抽查 1. 報送情形 (1) 人數報送率=主管機關及其所屬機關人數報送率總和/機關數 (2) 機關報送率=已報送機關數/應報送機關數*
2014 年浙江省数量资料 华图网校 刘有珍 数字推理 年份题量数字规律 三级等差 2. 和递推 3. 幂次修正 4. 倍数递推 5. 倍数递推 6. 特殊差级 7. 倍数递推 8. 倍数递推 9. 积递推 10. 分数数列
一、模型与计算公式 二、基本的组合分析公式 三、概率直接计算的例子 第 1.3 节 古典概率 四、抽签与顺序无关 五、二项分布与超几何分布 六、概率的基本性质.
第二单元 生产、劳动与经营 第五课 企业与劳动者. 想创办企业,开一家公司,公司和企业是一回事吗? 是以营利为目的而从事生产经营活动, 向社会提供商品或服务的 经济组织 依法设立的,有独立的法人财产、以营 利为目的的企业法人。企业法人 创办的公司可以采用任何形式吗? 我国法定的公司形式: 有限责任公司和股份有限公司.
用藥常識知多少? 五乙李麗娜 心寶的故事 心寶哪裡錯了? 說一說藥袋上有什麼資訊? 姓名 怎麼用(一天使用幾次? ) 藥的用途對症嗎? 藥品和外觀 副作用 注意事項 保存期限與方法 成藥有沒有衛生署許可證字號.
林園高中適性入學 高雄區免試入學 及 特色招生介紹 1. 國中學生 國中教育會考 1 ( 每年五月 ) 特色招生 術科考試 五專 免試入學 ( 每年六月 ) 特色招生 甄選入學 高中高職 免試入學 擇一報到 林園高中適性入學  入學管道流程 2.
用印度数学提高计算速度 段志强. 讲义大纲 速算基础 充满智慧的印度数学 印度数学的十类快速计算 复习和测验 综合应用及思考.
高中生物专题复习 丰宁一中 李俊英. 问题: 很多同学认为高等植物个体发育的起点 是种子, 你认为对吗 ?
第四章:长期股权投资 长期股权投资效果 1、控制:50%以上 有权决定对方财务和经营.
二代健保重點說明.
關於「中華民國國民健保卡」 (健保 IC 卡內容)
600年前,鄭和率領世界上最強大的艦隊,浩浩蕩蕩的駛入印度洋,展開一場「文化帝國」的海上大秀。
能做得更好吗 ——能力寻根:能力表现目标序列
歷史建築清水國小宿舍群修復工程 施工說明會
概述 报表解读 报表舞弊分析 综合分析 经营诊断 撰写分析报告
第二章 遺傳 2‧4 突變.
第五章 多基因遗传病.
工職數學 第三冊 第二章 不等式與線性規劃 ‧2-1 一元二次不等式 ‧2-2 絕對值不等式 ‧2-3 二元一次不等式的圖形
(一)生年不滿百 佚名 (二)飲酒之五 陶淵明
主要内容 1. 利用估值对债券组合估价的优势 2. 如何评估债券估值的合理性 3. 产业债的定价与估值.
现代汉语语法精讲.
现代汉语语法 2017/3/11 语法知识辅导.
不会宽容人的人, 是不配受到别人的宽容的。 贝尔奈.
复习回顾 a a×a a×a×a a a×a×a= a×a= 1.如图,边长为a厘米的正方形的面积 为 平方厘米。
第5节 关注人类遗传病.
语文园地六.
巧用叠词,妙趣横生.
高考新改革与过渡 怀化市铁路第一中学 向重新.
交通事故處置 當事人責任與損害賠償 屏東縣政府警察局交通隊.
歌仔戲 與 歌舞伎 4a 張淇惠 4a11b025 許巧嬑 4a 倪曼凌 4a1c0004 楊長梵
104年振聲國中 志願選填個別序位 說明會 104年06月08日 輔導室關心您.
请同学们思考下列问题:.
第2章 LR分 析 法 LR分析法是一种自下而上进行规范归约的语法分析方法,LR指“自左向右扫描和自下而上进行归约”。LR分析法比递归下降分析法、LL(1)分析法和算符优先分析法对文法的限制要少得多,对大多数用无二义的上下文无关文法描述的语言都可以用LR分析器予以识别,而且速度快,并能准确、及时地指出输入串的任何语法错误及出错位置。LR分析法的一个主要缺点是,若用手工构造分析器则工作量相当大,因此必须求助于自动产生LR分析器的产生器。
面向海洋的开放地区——珠江三角洲 山东省高青县实验中学:郑宝田.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
第1节 光的干涉 (第2课时).
高考第二轮复习课件 东莞中学松山湖学校 丁文韬
测角被动雷达的技术方案 测角被动雷达 作者:陈必红 深圳大学数学系.
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
! 温故知新 上下文无关文法 最左推导 最右推导 自上而下 自下而上 句柄 归约 移进-归约冲突 移进-归约分析 递归下降预测分析
Part5语法分析 授课:胡静.
编译原理复习.
狂賀!妝品系同學美容乙級通過 妝品系三甲 學號 姓名 AB 陳柔諺 AB 陳思妤 AB 張蔡婷安
第6章 自底向上优先分析法 自底向上优先分析概述 简单优先分析 算符优先分析 返回目录.
第 二 章 逻 辑 代 数 基 础.
第七章 门电路和组合逻辑电路 7.1 基本概念 模拟信号 电子电路中的信号 数字信号 模拟信号:随时间连续变化的信号 正弦波信号 三角波信号
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
LR(1)分析方法.
Part5语法分析 授课:胡静.
第五章 语法分析——自下而上分析 自上而下分析法(Top-down) 自下而上分析法(Bottom-up) 国防科技大学计算机系602教研室.
第三课时 匀变速直线运动的位移与时 间的关系
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
青眼究極龍 之 賓果連線 簡豪天、宋華敏製作.
第五章 自底向上分析方法 LR(0)分析法 1 LR(K)分析法 第一个L表示:相应的语法分析将按自左至右的顺序扫描输入符号串;
苏 教 版 五 年 级 数 学(上) 用字母表示数 青阳体仁小学 胡春雅.
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
大綱:整數的加法 整數的減法 蘇奕君 台灣數位學習科技股份有限公司
SLR(1)分析方法.
職業學校群科課程綱要規劃原理及修訂重點 報告人:鄭慶民
數線上兩點的距離.
第四章 语法分析 南京大学计算机系 戴新宇
美丽的旋转.
§12-5 同方向同频率两个简谐振动的合成 一. 同方向同频率的简谐振动的合成 1. 分振动 : 2. 合振动 : 解析法
1.8 完全平方公式(一) 锦州市实验学校 数学组(3).
2019/8/26 二元一次方程式的圖形 陳玉珮 2019/8/26.
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
本节内容 1.数据结构的起源 2.数据结构的作用和意义 3.基本概念和术语 4.逻辑结构与物理结构 5.抽象数据类型 6.作业
2.2.2双曲线的简单几何性质 海口市灵山中学 吴潇.
第二章 柯西不等式与排序不等式及其应用.
Presentation transcript:

第五章 自底向上分析方法 LR(0)分析法 1 LR(K)分析法 第一个L表示:相应的语法分析将按自左至右的顺序扫描输入符号串; 括号中的“k”:则表示在分析过程中需要向前展望k个输入符号才能决定是移入还是归约,并且归约是用哪个产生式。

唐纳德•克努特(Donald Ervin Knuth) (1938__) ——经典巨著《计算机程序设计的艺术》的年轻作者 洋洋数百万言的多卷本《计算机程序设计的艺术》(The Art of Computer Programming)堪称计算机科学理论与技术的经典巨著,有评论认为其作用与地位可与数学史上欧几里得的《几何学原理》相比。唐纳德•克努特因而荣获1974年度的图灵奖。 计算机科学技术中两个最基本的概念:“算法”(Algorithm)和“数据结构”(Data Structure)就是克努特于29岁时提出来的。 1973年他首创双向链表。 在编译器设计方面,著名的LR(k)文法也是克努特于1965年在对自左至右、自底向上的移进一归约分析进行了深刻剖析的基础上,经过高度概括和集中以后发明的。

1.2 LR(k)分析法优缺点 优点: 分析方法对文法的限制很少,因而大多数能用上下文无关文法描述的程序设计语言都可用LR(k)分析法进行有效的分析。 LR(k)分析方法适用范围较广、分析速度快,并且能准确及时地发现语法错误,因此,LR分析法是当前最一般的语法分析方法。 缺点: 对于实用语言文法分析器的构造量非常大,K越大构造越复杂。

1.3 主要LR分析法 四种不同LR分析方法: LR(0)分析法 种方法的局限性很大,但它是建立其它较一般的LR分析法的基础; SLR(1)分析法 虽然有一些文法构造不出SLR(1)分析表,但是,这是一种比较容易实现又极有使用价值的方法; LR(1)分析法 这种分析法能力最强,能够适用一大类文法,但实现代价过高,或者说,分析表所占空间非常大。 LALR(1)分析法 这种分析方法的能力介于SLR(1)和LR(1)之间,是一种即实用又高效的分析方法。

•accbde a•ccbde ac•cbde aA•cbde aAc•bde aA•bde aAb•de aAbd•e aAbde• 例1 G[S]: SaAbB[1] Ac [2]| Ac[3] Be [4]| dB[5] 分析字符串accbde。 S a A b B •accbde a•ccbde ac•cbde aA•cbde aAc•bde aA•bde aAb•de aAbd•e aAbde• aAbdB• aAbB• S• A c d B c e 如果输入流是正确的: 当前符号栈内容和剩余输入流构成句型。 符号栈内容:不含句柄,或含句柄且句柄在最右端。

2 LR类分析方法的基本概念和术语 规范句型:用最右推导导出的句型。 规范活前缀:若某一规范句型的规范前缀不含句柄或含一个句柄并且具有形式=(是句柄),则称规范前缀为规范活前缀(简称活前缀)。 归约规范活前缀:若活前缀是含句柄的活前缀,即有=,且是句柄,则称活前缀为归约规范活前缀(简称归约活前缀或可归活前缀)。 示例

定义续 活前缀的描述性定义:形成可归前缀之前,包括可归前缀在内所有规范句型的前缀都称为活前缀。它的右端不超过该句型句柄的末端。 活前缀 为一个或若干规范句型的前缀。 它是规范归约过程中的任何时刻已分析过的部分,即在分析栈(符号栈)中的符号串均为规范句型的活前缀,表明输入串的已被分析过的部分是该文法某规范句型的一个正确部分。

•accbde ε a•ccbde a ac•cbde ac aA•cbde aA aAc•bde aAc aA•bde aAb•de S 例1 G[S]: SaAbB[1] Ac [2]| Ac[3] Be [4]| dB[5] 分析字符串accbde。 a A b B •accbde a•ccbde ac•cbde aA•cbde aAc•bde aA•bde aAb•de aAbd•e aAbde• aAbdB• aAbB• S• ε a ac aA aAc aAb aAbd aAbde aAbdB aAbB S A c d B 归约活前缀 c e 归约活前缀 归约活前缀 归约活前缀 归约活前缀

3 LR类分析方法的关键问题 如何判断分析栈内容是否为归约活前缀 能唯一的确定归约活前缀中的句柄 如果解决了这两个问题,语法分析就好办了。 出现在符号栈里,我们知道他是可归前缀了,然后还能确定句柄,就可以做了,把这两个问题想清楚实际上就好做了,剩下的就是细节的问题和实现效率的问题,都不是关键的,最关键的就是解决这两个问题。按照定义,可以给一些原则判断可归前缀。

4 归约活前缀的求取 派生定理 开始符产生式的右部是归约活前缀。 如果A是归约活前缀,且A→是产生式,则也是归约活前缀。 任何归约活前缀,都可按上述方式被派生。 设文法开始符的产生式是: S →1|2|…|n 则文法G的可归活前缀集合为:RPSG={1,…,n}{|ARPSG,A→P}

可归活前缀: aAcBe A → b [2] ab A → Ab[3] aAb B → d[4] aAcd 可归活前缀集: 例2:计算下列文法的可归前缀集。 G[S]: S → aAcBe [1] A → b [2] A → Ab [3] B → d [4] 设文法开始符的产生式是: S →1|2|…|n 则文法G的可归活前缀集合为:RPSG={1,…,n}{|ARPSG,A→P} 可归活前缀: 开始符产生式的右部 aAcBe A → b [2] ab A → Ab[3] aAb B → d[4] aAcd 可归活前缀集: {aAcBe,ab,aAb,aAcd}

识别活前缀自动机 {aAcBe,ab,aAb,aAcd} a 1 A c B e b b d G[S]: S → aAcBe [1] 符号栈 输入流 动作 abbbcde # a bbbcde # ab bbcde# aA bbcde# aAb bcde# aA bcde# aAb cde# aA cde# aAc de# aAcd e# aAcB e# aAcBe # S # 移入 移入 G[S]: S → aAcBe [1] A → b [2] A → Ab [3] B → d [4] 归约2 移入 归约3 移入 归约3 移入 移入 {aAcBe,ab,aAb,aAcd} 归约4 移入 归约1 成功 a 1 2 3 A c [1] 4 B 5 e [2] b [3] b [4] d

5 LR(0)分析法 基本概念 1.LR(0)项目: 若A→是产生式,则称A→为LR(0)项目(简称项目) 项目的含义:分析过程中到达某一个步骤的状态。圆点的左部表示分析过程的某个时刻欲用该产生式归约时已经识别过的部分,圆点右部表示期待的后缀部分。 例:S → aAc 对应四个LR(0)项目: S → aAc 表明我们希望接下来在输入中看的一个从aAc推导得到的串,这时符号栈为空。 S → aAc 表明刚在输入中看到了一个a,我们希望接下来看到一个能从Ac推导得到的串。这时符号栈中包含活前缀a。 S → aAc 表明刚在输入中看到了一个可以由aA推导得到的串。这时符号栈中包含活前缀aA。 S → aAc 表明我们已经看到了产生式体aAc,已经是时候把aAc归约为S了。符号栈中为归约活前缀,右部为句柄。

LR(0)分析法基本概念(续1) 2.项目集的闭包:假设IS是LR(0)项目集,则称下面CLOSURE(IS)为IS的闭包集: = IS  {A→ | Y→ACLOSURE(IS), A→是产生式 } 例:G[S]: S → aAc[1] A → dbb[2] A → b[3] 令项目集IS={S → aAc[1]} 则: CLOSURE(IS) ={S → aAc[1] , A →  dbb[2], A → b[3] }

LR(0)分析法基本概念(续1) 例:G[S]: 项目集的闭包CLOSURE(IS):表示分析项目集IS中每一个项目Y→A圆点右部A可能推导出的子串的某个前缀可以从A推导得到,推导时可以应用的所有可能的A的产生式。 例:G[S]: S E E  E+T | T T  T*F | F F  (E) | id 令项目集IS={S →  E} CLOSURE(IS): S →  E E →  E+T E →  T T → T*F T → F F → (E) F → id

LR(0)分析法基本概念(续2) 3.项目集的投影:假设IS是LR(0)项目集,则称下面定义的IS(X) 为IS关于X的投影集: IS(X) = {A→X |A→XIS, X(VTVN)} 项目集IS关于X的投影集的含义:项目集中每个项目A→X所描述的状态,处理完一个符号X后所对应的后继状态。 例:G[S]: S → aAc[1] A → dbb[2] A → b[3] 令项目集IS={S → aAc[1] , A → dbb[2] , A → b[3] } 则: IS(A)={S → aA  c[1]} IS(S)={ } IS(d)={A →dbb [3] } IS(b)={A →b [3] } IS(a)={ } IS(c)={ }

LR(0)分析法基本概念(续3) 4.项目集的转换函数(GO函数):若IS是一个LR(0)项目集,X(VTVN),函数GO(IS, X)定义为: GO(IS, X)=CLOSURE(IS(X)), 其中IS(X)为LR(0)项目集IS关于X的投影。 例:G[S]: S → aAc[1] A → dbb[2] A → b[3] 令项目集IS={S → aAc[1] } 则: GO(IS, a )= CLOSURE(IS(a)) = CLOSURE({S → aAc[1]}) = {S → aAc[1] , A →  dbb[2], A →  b[3] }

构造LR(0)活前缀状态机LRSM 为了使“成功”状态易于识别,通常LR文法要求文法的开始符唯一且不出现于产生式的右部,因此要增加一个新的产生式,称拓广产生式: ZS 其中:S是原文法的开始符,而Z则是新符号。

构造LR(0)活前缀状态机LRSM的算法 x x Step1.构造初始状态IS0:IS0=CLOSURE({Z→S}),并给IS0标上NO。 Step2.从已构造的LRSM部分图选择被标为NO的任一状态IS,删除NO, 对每个符号XVTVN,做下面动作: 1) 令ISj = CLOSURE( IS(X)) 。 2) 若ISj非空: ①如果在LRSM部分图中已有ISj项目集, 则在IS和ISj之间画有向X边:IS ISj 。 ②如果在LRSM部分图中没有ISj项目集, 则将ISj作为LRSM的一个新的状态节点,并给ISj标上NO, 并在IS和ISj之间画有向X边: IS ISj 。 重复Step2 ,直至没有被标记为NO的状态结点为止。 x x

形如A→• 的项目称为归约型项目 形如A→• 的项目称为移入型项目

例2:计算下列文法的LR(0)状态机。 文法G[S]: SaAbB[1] Ac [2]| Ac[3] Be [4]| dB[5]

aAbd+ B 9 B ε aAbd+ 7 aAbB 8 a d a 1 aA B 3 A b aAb 5 c c aAc 4 ac e 2 文法G[S]: SaAbB[1] A c [2]| Ac[3] Be [4]| dB[5] B ε d S → aAbB[1] aAbd+ B dB[5] B  e [4] B  dB[5] 7 e a aAbB S → aAbB [1] 8 d a S → aAbB[1] A → c[2] A → Ac[3] 1 aA B S → aAbB[1] A → Ac[3] 3 A b aAb S → aAbB[1] B  e [4] B  dB[5] 5 c c aAc ac 4 A → A c [3] e 2 A → c  [2] aAbe , aAbd+e B e  [4] 6 G[S]的LRSM

例3:构造LR(0)状态机 S  E $ E  E + T E  T T  id T ( E )

T T 6 9 ( ( 5 id id E id ( E + 1 3 7 + $ ) T 2 4 8 T→( E) E→ E+T S  E $ E  E + T E  T T  id T ( E ) T T 6 T→( E) E→ E+T E→ T T→ id T→ ( E ) S→ E $ E→ E+T E→ T T→ id T→ ( E ) 9 E→T  ( ( 5 T→id  id id E id ( E + 1 S→E $ E→E +T 3 E→E+  T T→ id T→ (E) 7 T→(E ) E→E +T + $ ) T 2 S→E $ 4 E→E+T  8 T→(E) 

LRSM给出了所有的可归活前缀 LRSM中的每个状态将对应一个项目集: (1)其中一部分是由先驱状态分出来 (称为基本项目); (2)一部分则是由基本项目扩展出来的 (称为扩展项目或派生项目)。派生部 分项目的特点是其中的“”出现在产 生式右部的最左侧。

LRSM不能直接用于LR分析,因为它识别的是VTVN上的符号串,而语法识别的是VT组成的句子。但它提供了LR分析所需的信息。 移入/归约信息: [A→a]、[A→]; 移入/归约后的转向状态信息.