Chapter4 Syntax Analysis

Slides:



Advertisements
Similar presentations
专题复习 --- 走进名著 亲近经典 读完《鲁滨孙漂流记》这本精彩的小说 后,一个高大的形象时时浮现在我的眼 前,他就是勇敢的探险家、航海家鲁滨 孙。他凭着顽强的毅力,永不放弃的精 神,实现了自己航海的梦想。 我仿佛看到轮船甲板上站着这样的一 个人:他放弃了富裕而又舒适的生活, 厌恶那庸庸碌碌的人生,从而开始了一.
Advertisements

林園高中適性入學 高雄區免試入學 及 特色招生介紹 1. 國中學生 國中教育會考 1 ( 每年五月 ) 特色招生 術科考試 五專 免試入學 ( 每年六月 ) 特色招生 甄選入學 高中高職 免試入學 擇一報到 林園高中適性入學  入學管道流程 2.
牛熊證簡介.
說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
中小学教育网课程推荐网络课程 小学:剑桥少儿英语 小学数学思维训练 初中:初一、初二、初三强化提高班 人大附中同步课程
控制方长投下的子公司,需要编制合并报表的演示思路
人民版必修三专题三复习 近代中国 思想解放的潮流 灵石中学 易吉华.
成才之路 · 语文 人教版 • 中国古代诗歌散文欣赏 路漫漫其修远兮 吾将上下而求索.
翰林版國文第三冊第六課 《迢迢牽牛星》 設計者:郭宜幸.
判断推理,必须学会这些 主讲老师:小胡胡 2016年3月25日20:00 YY频道:
100年度財政業務聯席會報 公庫管理 高雄市政府財政局 中華民國100年12月21日.
编 译 原 理 指导教师:杨建国 二零一零年三月.
第6章 LR分析程序及其自动构造 6.1 自下而上分析及其LR分析概述 6.2 LR (0) 分析 6.3 SLR(1) 分析
建筑业2007年年报 2008年定报培训会 及 工交城建科 蔡婉妮
2014年初中生物学业水平抽测分析.
习题与试题 认真复习,重点是掌握基本概念。基本概念掌握了,相当一部分试题的解就有了
编 译 原 理 指导教师:杨建国 二零一零年三月.
06学年度工作意见 2006年8月30日.
第一单元 人在社会中生活 综合探究一 从地图上获取信息 第1课时 带着地图定向越野间.
忠孝國小自立午餐老師的叮嚀 教師指導手冊.
编 译 原 理 指导教师:杨建国 二零一零年三月.
二综防火设计分析.
你不得不知的几件事 2、图书《10天行测通关特训》 3、网络课程 《网校9元课程系列》《考前强化夜校班》 4、地面课程 《10天10晚名师密授营》《考前预测集训营》
第2章 LR分 析 法 LR分析法是一种自下而上进行规范归约的语法分析方法,LR指“自左向右扫描和自下而上进行归约”。LR分析法比递归下降分析法、LL(1)分析法和算符优先分析法对文法的限制要少得多,对大多数用无二义的上下文无关文法描述的语言都可以用LR分析器予以识别,而且速度快,并能准确、及时地指出输入串的任何语法错误及出错位置。LR分析法的一个主要缺点是,若用手工构造分析器则工作量相当大,因此必须求助于自动产生LR分析器的产生器。
LR与LL分析 编译原理习题课二 胡云斌 PB
了解太平天国运动的主要史实,认识农民起义在民主革命时期的作用与局限性。
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
第1节 光的干涉 (第2课时).
编译原理与技术 课程总结.
编译原理与技术 --文法和分析 2018/9/17 《编译原理与技术》讲义.
! 温故知新 上下文无关文法 最左推导 最右推导 自上而下 自下而上 句柄 归约 移进-归约冲突 移进-归约分析 递归下降预测分析
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
Part5语法分析 授课:胡静.
第四章 语法分析 赵建华 南京大学计算机系
编译原理复习.
第三章 语法分析 本章内容 上下文无关文法 自上而下分析和自下而上分析 围绕分析器的自动生成展开 词 法 分析器 记 号 取下一个记号
编译原理与技术 第3章 语法分析 14学时.
编译原理习题
佇列與推疊 (Queue and Stack)
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第6章 自底向上优先分析法 自底向上优先分析概述 简单优先分析 算符优先分析 返回目录.
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
LR(1)分析方法.
Part5语法分析 授课:胡静.
LL(1)分析方法 LL(1)是LL(k)的特例,其中的k则表示向前看k个符号. LL(1)方法和递归下降法属于同一级别的自顶向下分析法.
第五章 语法分析——自下而上分析 自上而下分析法(Top-down) 自下而上分析法(Bottom-up) 国防科技大学计算机系602教研室.
資料結構 第4章 堆疊.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
编译原理 第四章 语法分析—自上而下分析 编译原理.
第三章 语法分析 自顶向下语法分析思想 语法分析方法的分类: 自顶向下语法分析方法(Top-Down) ,亦称面向目标的分析方法;
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
第五章 自底向上分析方法 LR(0)分析法.
第3,4次课 一个简单的语法制导翻译器 2.3~2.5.
LL(1)分析法 复 习 LL分析程序构造及分析过程 输入串 符号栈 执行程序 此过程有三部分组成: 分析表 执行程序 (总控程序)
第五章 自底向上分析方法 LR(0)分析法 1 LR(K)分析法 第一个L表示:相应的语法分析将按自左至右的顺序扫描输入符号串;
编译原理总结-1 第3~5章.
LALR(1)分析方法.
第五章 语法分析-自下而上分析 5.1 自下而上分析的基本问题 Figure5.5LR演示自下而上分析 i+(i+i)*i
第四章 自底向上分析方法 主要内容 自底向上分析的基本思想 简单优先分析方法 LR类分析方法 LR(0)分析方法 SLR(1)分析方法
文法等价变换 文法的等价 对文法G1和G2,若有:L(G1)=L(G2),则称文法G1和G2等价, 记作:G1=G2. 文法等价变换
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
自底向上的语法分析 4.5.
第五章 自底向上分析方法 LR(0)分析法 1 LR(K)分析法 第一个L表示:相应的语法分析将按自左至右的顺序扫描输入符号串;
第九节 赋值运算符和赋值表达式.
SLR(1)分析方法.
第四章 语法分析 南京大学计算机系 戴新宇
第五章 语法分析—自下而上分析 自下而上分析法:即是从输入串开始,逐步进行 “归约”,直至归约到文法的开始符号;
编译原理 第五章 语法分析——自下而上分析 编译原理.
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
Presentation transcript:

Chapter4 Syntax Analysis 语法分析概述 (An overview of parsing) 自顶向下分析(Top-down Parsing) 自底向上分析(Bottom-up Parsing) 算符优先分析 (Operator-precedence Parsing) LR 分析(LR Parser) 2018/9/18

4.5 LR分析 LR(k)分析技术: L 指从左至右扫描输入符号串 R 指构造一个最右推导的逆过程(最左归约) 2018/9/18

4.5 LR分析 LR分析器的逻辑结构:P217 Fig4.29 input stack output a1 ... ai an $ Sm Xm Sm-1 Xm-1 . S1 X1 S0 LR Parsing Algorithm stack output Action Table Goto Table 2018/9/18

4.5 LR分析 LR分析器的逻辑结构: LR分析程序——固定不变的 分析表——动作表(action)、状态转移表(goto) 栈——状态符号、文法符号 输入缓冲 输出——产生式序列 2018/9/18

4.5 LR分析 LR分析器运行: 根据当前栈顶状态符号与输入符号查分析表决定下一步动作 假设当前 (s0X1s1X2s2…Xmsm, aiai+1…an$) 1、action [sm, ai] = shift s (s0X1s1X2s2…Xmsmais, ai+1…an$) 2、action [sm, ai] = reduce A→β (s0X1s1X2s2…Xm-rsm-rAs, aiai+1…an$) 2018/9/18

4.5 LR分析 LR分析算法: P 218-219 关键步骤: s : top of stack a : current input 1. If action[s,a]=“accept” halt, accept, success If action[s,a]=“reduce by production A β” do the following: 2a. Pop 2*|β| elements from the stack. 2b. Push A 2c. Push goto[s*,A] If action[s,a]=“shift and goto state s*” Shift; push s* 2018/9/18

4.5 LR分析 LR分析算法: LR分析的关键问题是如何构造分析表,不同的构造方法形成不同的分析方法,主要有 LR(0)、SLR、LR(1)、LALR 2018/9/18

a b c d e A B S a b c d e A B S 例子: 分析句子:abbcde 文法G[S]: (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d 例子: 分析句子:abbcde a b c d e A B S a b c d e A B S 2018/9/18

4.5 LR分析 ACTION GOTO a c e b d $ S A B S2 1 Acc 2 S4 3 S5 S6 4 R2 5 S8 S2 1 Acc 2 S4 3 S5 S6 4 R2 5 S8 7 6 R3 S9 8 R4 9 R1 LR(0)分析表 2018/9/18

4.5 LR分析 对 abbcde$ 的分析过程 步骤 栈 输入串 ACTION GOTO 1 abbcde$ S2 2 0a2 abbcde$ S2 2 0a2 bbcde$ S4 3 0a2b4 bcde$ R2 4 0a2A3 S6 5 0a2A3b6 cde$ R3 6 S5 7 0a2A3c5 de$ S8 8 0a2A3c5d8 e$ R4 9 0a2A3c5B7 S9 10 0a2A3c5B7e9 $ R1 11 0S1 Acc 2018/9/18

4.5 LR分析 LR分析过程中的性质与特点: 栈中的文法符号串并上剩余的输入串构成一个右句型(规范句型) 当该右句型的句柄出现在栈顶时,归约,否则,移进 栈中的文法符号串是当前句型的前缀,该前缀不包含句型句柄后面的符号,称之为活前缀(Viable Prefixes) 2018/9/18

4.5 LR分析 活前缀:上例 aAbcde  , a , aA , aAb 可归前缀:包含完整句柄的活前缀 2018/9/18

4.5 LR分析 只要每一时刻栈中的文法符号串是某规范句型的活前缀,则说明已分析的部分是正确的 α β $ α’ S α’ β’ αβ’  $ α’ S α’ β’ αβ’ 2018/9/18

4.5 LR分析 分析过程可以看作是识别文法规范句型活前缀的过程。 一个文法的规范句型的所有活前缀构成一个语言,而且是正规语言,可以用一个 DFA 来识别 2018/9/18

4.5 LR分析  例子: 文法G[S]: (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d 1 * 1 4 S b  a A b 2 3 6 c B e 5 7 9 d 8 2018/9/18

4.5 LR分析  每个状态都是活前缀的识别态,双圈状态是可归前缀(句柄)识别态,标识了*的状态是句子识别态 1 4 2 3 6 5 7 S b 每个状态都是活前缀的识别态,双圈状态是可归前缀(句柄)识别态,标识了*的状态是句子识别态  a A b 2 3 6 c B e 5 7 9 d (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d 8 2018/9/18

4.5 LR分析 构造识别活前缀的DFA 拓广文法:增加产生式 S’→S,S’作为新的开始符号 文法等价 确保文法的开始符号只在产生式的左部出现 为了在分析过程中区别是归约到了文法的最初开始符号还是产生式右边出现的开始符号 2018/9/18

4.5 LR分析 LR(0)项目(item) 在文法产生式右部的适当位置添加圆点构成项目 例: A→XYZ A→·XYZ A→X·YZ A→XY·Z A→XYZ· 例: A→ε A→· 2018/9/18

4.5 LR分析 项目的含义:圆点的左部表示分析过程中的某时刻用该产生式归约时句柄已识别过的部分,圆点右部表示待识别部分 移进项目:A →α· aβ 待约项目:A →α· Bβ 归约项目: A →α· 接受项目: S’ →S · 2018/9/18

4.5 LR分析 项目集的闭包(closure) I 在 closure(I) 中 若 A→α·Bβ在 closure(I),且 B→γ是产生式,将 B→·γ添加到 closure(I) 中 例: 求 closure ( { E’  ·E } ) E’  E E  E + T | T T  T * F | F F  ( E ) | id 2018/9/18

4.5 LR分析 goto 函数 goto ( I, X ) goto ( I, X ) = closure (A→αX·β),其中 A→α·Xβ在 I 中 例: 求 goto ( { E’  E·, E  E ·+ T } , +) E’  E E  E + T | T T  T * F | F F  ( E ) | id 2018/9/18

4.5 LR分析 构造规范的 LR(0)项目集族 算法 P 224 C = { closure ( { S’  ·S }) } C = C ∪ goto ( I, X ) 例子:P 224-225 2018/9/18

I0: I1: E  ·E E   E· E  ·E + T E  E· + T E  ·T T  ·T * F F  ·(E) F  ·id I1: E   E· E  E· + T I2: E  T· T T· * F I3: T  F· 2018/9/18

I0: I4: E  ·E F  (·E ) E  ·E + T E  ·E + T E  ·T E  ·T T  ·T * F T  ·T * F T  ·F T  ·F F  ·(E) F  ·(E) F  ·id F  ·id I5: F  id · 2018/9/18

I1: E   E· E  E·+ T I6 : EE + ·T T ·T * F T ·F I2: F ·(E) E T· F ·id I2: E T· TT·*F I7: TT *·F F ·(E) F ·id 2018/9/18

I4: I8: F  (·E ) F (E·) E  ·E + T E  E·+ T E  ·T T  ·T *F T  ·F F  ·id I9: … I10: I11: 2018/9/18

4.5 LR分析 构造识别文法所有活前缀的 DFA 项目集作为状态,项目集族作为状态集 goto ( I, X ) 作为状态转换函数 例子:P 226 2018/9/18

E + T * I0 I1 I6 I9 to I7 F to I3 ( to I4 id to I5 T * F I2 I7 F F ) I4 I8 I11 + ( T to I6 to I2 F to I3 id id I5 2018/9/18

4.5 LR分析 每个状态都是识别态,识别的是从初态到该状态的通路上标记的文法符号构成的活前缀 活前缀的有效项目(Valid items)集 初态是活前缀 ε 的有效项目集 活前缀γ的有效项目集是从初态出发经过γ道路所到达的那个状态所代表的项目集 2018/9/18

4.5 LR分析 例:文法G’ S’ E E  T + E E  T T  int * T T  int T  (E) 2018/9/18

E ® T + . E E ® .T E ® .T + E T ® .(E) T ® .int * T T ® .int 7 E ® T + E. E T 2 5 + S’ ® E . E ® T. E ® T. + E ( 6 T int E T ® (. E) E ® .T E ® .T + E T ® .(E) T ® .int * T T ® .int 1 T ® int. * T T ® int. T ( S’ ® . E E ® . T E ® .T + E T ® .(E) T ® .int * T T ® .int int int 4 3 int * T ® int * T. E T ® int * .T T ® .(E) T ® .int * T T ® .int T T ® (E.) 8 9 ) T ® (E). 11 10 ( 2018/9/18 (

4.5 LR分析 例:文法G’ (0)S’ S (1)S  aA (2)S  bB (3)A  cA (4)A  d (5)B  cB (6)A  d 2018/9/18

(0)S’ S (1)S  aA (2)S  bB (3)A  cA (4)A  d (5)B  cB (6)B  d I4: A → c•A A → •cA A → •d A I8: A → cA• d I10: A → d• c d I2: S → a•A A → •cA A → •d A I6: S → aA• a I0: S‘ → •S S → •aA S → •bB S I1: S‘ → S• I3: S → b•B B → •cB B → •d B b I7: S → bB• d I11: B → d• c d I5: B → c•B B → •cB B → •d c B I9: B → cB• 2018/9/18

accd <= acA <= aA <= S <= S’ 有了识别活前缀的 DFA 可以分析句子: accd <= acA <= aA <= S <= S’ 步骤 栈 输入串 ACTION GOTO 1 accd$ S2 2 0a2 ccd$ S4 3 0a2c4 cd$ 4 0a2c4c4 d$ S10 5 0a2c4c4d10 $ R4 8 6 0a2c4c4A8 R3 7 0a2c4A8 0a2A6 R1 9 0S1 Acc 2018/9/18

4.5 LR分析  有了识别活前缀的 DFA 可以分析句子: 含有归约项目的状态是可归前缀识别态,处于此状态可归约 β α  含有接受项目的状态是句子识别态,归约后完成分析 2018/9/18

4.5 LR分析   处于含有移进项目的状态可移进 处于含有待约项目的状态可以等待归约(A  β),然后状态转移 b α β α A 处于含有待约项目的状态可以等待归约(A  β),然后状态转移 β α  A 2018/9/18

4.5 LR分析 构造 LR(0)分析表: 若 goto (Ik,a)= Ij,则 action[k,a]= Sj 若 goto (Ik,A)= Ij,则 goto[k,A]= j 若 Ik 包含 A→α· ,则 aciton[k,a]= rj,a为任何终结符号或 $,j为产生式 A→α的编号(含有归约项目的状态是可归前缀识别态) 若 Ik 包含 S’→S · ,则 action[k,$]= acc 2018/9/18

(0)S’ S (1)S  aA (2)S  bB (3)A  cA (4)A  d (5)B  cB (6)B  d I4: A → c•A A → •cA A → •d A I8: A → cA• d I10: A → d• c d I2: S → a•A A → •cA A → •d A I6: S → aA• a I0: S‘ → •S S → •aA S → •bB S I1: S‘ → S• I3: S → b•B B → •cB B → •d B b I7: S → bB• d I11: B → d• c d I5: B → c•B B → •cB B → •d c B I9: B → cB• 2018/9/18

LR(0)分析表 a b c d $ S A B S2 S3 1 acc 2 S4 S10 6 3 S5 S11 7 4 8 5 9 r1 ACTION GOTO a b c d $ S A B S2 S3 1 acc 2 S4 S10 6 3 S5 S11 7 4 8 5 9 r1 r2 r3 r5 10 r4 11 r6 2018/9/18

4.5 LR分析 项目集合中的冲突 移进-归约冲突 归约-归约冲突 项目集合中若存在冲突,LR(0)分析表中存在多重定义入口 项目集合中同时含有形如 A→α · aβ和 B→γ·的项目 归约-归约冲突 项目集合中同时含有形如 A→α· 和 B→ β· 的项目 项目集合中若存在冲突,LR(0)分析表中存在多重定义入口 2018/9/18

文法G’: (0) S’ S (1) S  rD (2) D D,i (3) D  i I6: D →D,i • 文法G’: (0) S’ S (1) S  rD (2) D D,i (3) D  i I3: S → rD • D →D •,i i I1: S‘ → S • , I5: D → D,•i D S I2: S → r•D D → •D,i D → • i I0: S‘ → • S S → •rD r i I4: D → i • LR(0)分析表 2018/9/18

4.5 LR分析 如果文法 G 的规范 LR(0)项目集族中不含有移进-归约冲突和归约-归约冲突,则称文法 G 为 LR(0)文法 构造分析表时没有向前看,或者说向前看了 0 个符号 基于 LR(0)分析表的 LR 分析称为 LR(0)分析 2018/9/18

4.5 LR分析 对于规范 LR(0)项目集族中有冲突的项目集合,有的可以通过向前看一个符号(考察当前正在扫描的符号)来解决冲突 当存在冲突时才向前看一个符号,因此是一种简单的 LR(1)分析方法,称为 SLR 分析 2018/9/18

4.5 LR分析 解决方法: 假设一个LR(0)项目集规范族中有如下项目集合: {X → α·bβ,A → γ·,B → δ·} 即存在移进-归约冲突和归约-归约冲突 2018/9/18

4.5 LR分析 如果FOLLOW(A)∩ FOLLOW(B)∩ {b} =ф,则可以如下来解决冲突(假设当前符号是 a ): 1、若 a = b,则移进 2、若 a∈ FOLLOW(A),则用产生式 A → γ归约 3、若 a∈ FOLLOW(B),则用产生式 B → δ归约 4、否则,报错 2018/9/18

文法G’: (0) S’ S (1) S  rD (2) D D,i (3) D  i I0: S‘ → • S S → •rD I2: S → r•D D → •D,i D → • i I3: S → rD • D →D •,i I4: D → i • I5: D → D,•i I1: S‘ → S • I6: D →D,i • S r i D , 文法G’: (0) S’ S (1) S  rD (2) D D,i (3) D  i SLR(1)分析表 2018/9/18

4.5 LR分析 如果文法 G 的规范 LR(0)项目集族中的移进-归约冲突和归约-归约冲突可以用上述方法解决,则称文法 G 为 SLR(1)文法。 构造分析表中的归约项时,考察了产生式左边非终结符号的 FOLLOW 集,这样形成的分析表称为 SLR 分析表 基于 SLR 分析表的 LR 分析称为 SLR 分析 2018/9/18

The End! 2018/9/18