第五章 LR(0)方法.ppt_第1页
第五章 LR(0)方法.ppt_第2页
第五章 LR(0)方法.ppt_第3页
第五章 LR(0)方法.ppt_第4页
第五章 LR(0)方法.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章自底向上的语法分析 5 1自底向上的语法分析方法概述5 2LR 0 分析的有限自动机5 3LR 0 分析5 4SLR 1 分析5 5LR 1 分析5 6LALR 1 分析5 7LALR 1 语法分析器的自动生成器 YACC 内容回顾 自底向上的分析过程LR分析机制LR分析的关键问题 自底向上语法分析的例子 P Z ABb 2 A a 3 A b 4 B b 5 B c 6 B bB abcb 输入 符号栈 动作 abcb 移入 a bcb 归约 2 A bcb 移入 Ab cb 移入 Abc b 归约 5 AbB b 归约 6 AB b 移入 归约 1 ABb Z 成功 自底向上分析过程是从所给输入串出发 对其进行最左归约的过程 LR分析机制 分析栈 输入 a LR驱动程序 shift 移入 移入型规范活前缀 reduce 归约 可归约规范活前缀 LR分析表 规范活前缀 LR分析的关键问题 如何判定规范活前缀 如何判定移入型规范活前缀 如何判定归约规范活前缀以及用哪一个产生式归约 如何判定分析结束 LR k 自动机可以解决这些问题 5 2LR 0 分析的有限自动机 构造LR 0 自动机的依据 派生定理应用派生定理的例子LR 0 自动机LR 0 item 项 LR 0 automata构造LR 0 自动机的过程 构造LR 0 自动机的依据 派生定理 派生定理 给出了对任意一个CFG构造归约规范活前缀的方法 1 把CFG扩展为增广文法 Z S 2 文法开始符Z或S是归约规范活前缀 3 如果 A 是一个归约规范活前缀 且有产生式A 那么 也是一个归约规范活前缀 和 是由终极符和非终极符构成的符号串 也可以是空串 4 任何一个归约规范活前缀都是按照 3 方式派生出来的 证明略 派生定理应用例1 1 S 2 S和S aAc产生 aAc 3 aAc和A Abb产生 aAbb 4 aAc和A b产生 ab 5 aAbb和A Abb产生 aAbb 6 aAbb和A b产生 ab 7 最后 合起来得到 S aAc aAbb ab VT a b c VN S A S SP S aAcA AbbA b 派生定理应用例2 1 S 2 S和S aAc产生 aAc 3 aAc和A ABb产生 aABb 4 aAc和A a产生 aa 5 aABb和B bB产生 aAbB 6 aABb和B b产生 aAb 7 aAbB和B bB产生 aAbbB 8 aAbB和B b产生 aAbb VT a b c VN S A B S SP S aAcA ABbA aB bBB b LR 0 自动机 LR 0 项目 带圆点的产生式 圆点只能出现在产生式的右部符号串的任意位置 产生式S aAc LR 0 项目 S aAcS a AcS aA cS aAc 特别地 空产生式 S 对应LR 0 项目S LR 0 自动机 LR 0 项目集合IS关于符合X的投影IS是一个LR 0 项目的集合 X是一个符号 终极符或非终极符 IS X 表示项目集IS关于符号X的投影 IS X S X S X IS X VT VN IS x 只对IS中圆点后面是X的项目起作用 所起的作用就是将圆点从X的前面移到X的后面 IS A A Bb B a B b B Z cB X BIS B A AB b B bB LR 0 自动机 LR 0 项目集合的闭包IS是LR 0 项目的集合 CLOSURE IS 也是一个LR 0 项目集合 按照下面的步骤计算 1 初始 CLOSURE IS IS 2 对于CLOSURE IS 中没有处理的LR 0 项目 如果该项目的圆点后面是一个非终极符A 而且A的全部产生式是 A 1 A n 则增加如下LR 0 项目到CLOSURE IS A 1 A n 3 重复 2 直到CLOSURE IS 收敛 LR 0 自动机 VT a b c VN S A B S SP S aAcA ABbA BaB b IS S aAc CLOSURE IS S aAc IS S a Ac CLOSURE IS S a Ac A ABb A Ba B b LR 0 自动机 goto函数IS是LR 0 项目集合 X是一个符号 VTorVN终极符或非终极符 goto IS X CLOSURE IS x LR 0 自动机 CFGG VT VN S P 的LR 0 自动机 SS S0 TS 是否需要增广产生式Z S VT VN S0 CLOSURE Z S SSTS 构造LR 0 自动机的过程中逐步生成的 构造LR 0 自动机的过程 1 增广产生式Z S 2 VT VN 3 S0 CLOSURE Z S 4 SS S0 5 对于SS中的每一个项目IS 和每个符号X 计算IS goto IS X 如果IS 不为空 则建立ISIS 如果IS 不为空且IS 不属于SS 则把IS 加入SS 6 重复 5 直到SS收敛 7 终止状态 包含形如A 项目的项目集合 X 构造LR 0 自动机的过程 VT a b c VN S A B S SP S aAcA ABbA BaB b Z S S aAc Z S S a S a Ac A ABbA Ba B b A S aA cA A Bb B b b B A B a a A Ba B b S aAc c B A AB b b A ABb b 0 构造LR自动机的过程 VT a b c VN S A B S SP S aAcA ABbA BaB Z S S aAc Z S S a S a Ac A ABbA Ba B A S aA cA A Bb B B A B b b A Bb S aAc c B A AB b A ABb b 0 1 S 2 S和S aAc产生 aAc 3 aAc和A Abb产生 aAbb 4 aAc和A b产生 ab 5 aAbb和A Abb产生 aAbb 6 aAbb和A b产生 ab 7 最后 合起来得到 S aAc aAbb ab VT a b c VN S A S SP S aAcA AbbA b VT a b c VN S A S SP S aAcA AbbA b Z SS aAc S Z S a S a AcA AbbA b A S aA cA A bb b A b c S aAc b A Ab b b A Abb LR 0 自动机接受的语言恰好是归约规范活前缀的集合 S aAc aAbb ab VT a b c VN S A B S SP S aAcA ABbA aB bBB b 1 S 2 S和S aAc产生 aAc 3 aAc和A ABb产生 aABb 4 aAc和A a产生 aa 5 aABb和B bB产生 aAbB 6 aABb和B b产生 aAb 7 aAbB和B bB产生 aAbbB 8 aAbB和B b产生 aAbb S aAc aa aABb aAb B aAb VT a b c VN S A B S SP S aAcA ABbA aB bBB b Z SS aAc S Z S a S a AcA ABbA a A S aA cA A BbB bBB b a A a c S aAc b B b BB b B bBB b B B bB B A AB b b A ABb b 结论 一个CFG的LR 0 自动机接受的是该CFG的所有LR0归约规范活前缀 第五章自底向上的语法分析 5 1自底向上的语法分析方法概述5 2LR 0 分析的有限自动机5 3LR 0 分析5 4SLR 1 分析5 5LR 1 分析5 6LALR 1 分析5 7LALR 1 语法分析器的自动生成器 YACC 5 3LR 0 分析 LR 0 自动机的相关概念LR 0 文法LR 0 语法分析方法LR 0 分析表LR 0 分析的驱动程序LR 0 分析过程 LR 0 自动机的相关概念 移入项目 A a a VT归约项目 A 接受项目 Z S Z S是增广产生式 移入状态 包含移入项目的状态归约状态 包含归约项目的状态冲突状态 同一个状态中 包含不同的归约项目 则称该状态存在归约 归约冲突 既包含移入项目 又包含归约项目 则称该状态存在移入 归约冲突 LR 0 文法 给定一个上下文无关文法GLR0是G的LR 0 自动机如果LR0的任意一个状态都不存在冲突 归约 归约冲突 移入 归约冲突 则G称为LR 0 文法 可以推知 在LR 0 文法中 任意状态或者是移入状态 或者是归约状态如果是归约状态 一定存在一个唯一的归约项目 该归约项目对应一个产生式p 因此 该归约状态称为p 归约状态 LR 0 分析方法 Stack Input a LR驱动程序 shift 移入 移入型规范活前缀 reduce 归约 归约规范活前缀 LR分析表 规范活前缀 状态栈 action表 goto表 LR 0 驱动程序 LR 0 文法 VT a b c VN S A B S SP 1 S aAc 2 A ABb 3 A Ba 4 B b Z S S aAc Z S S a S a Ac A ABbA Ba B b A S aA cA A Bb B b b B A B a a A Ba B b S aAc c B A AB b b A ABb b 0 1 2 3 5 6 7 8 9 4 LR 0 分析的例子 P 0 Z S 1 S aAc 2 A ABb 3 A Ba 4 B b abac LR 0 分析的例子 P 0 Z S 1 S aAc 2 A ABb 3 A Ba 4 B b abac LR 0 分析表 action表goto表 LR 0 分析表 action表 action Si a Sj 如果Si到Sj有a输出边action Si c Rp 如果Si是p 归约状态 c Vt action Si accept 如果Si是接受状态action Si a error 其他情形 LR 0 分析表 goto表 goto Si A Sj 如果Si到Sj有A输出边goto Si A error 如果Si没有A输出边 LR 0 分析表的例子 VT a b c VN S A B S SP 1 S aAc 2 A ABb 3 A Ba 4 B b Z S S aAc Z S S a S a Ac A ABbA Ba B b A S aA cA A Bb B b b B A B a a A Ba B b S aAc c B A AB b b A ABb b 0 1 2 3 5 6 7 8 9 4 LR 0 分析驱动程序 符号约定 S0 开始状态Stack 状态栈Stack top 栈顶元素P 产生式 P 产生式P右部符号个数 PA 产生式P左部非终极符 Push S 把状态S压入stack Pop n 从st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论