编译原理第4章1.ppt_第1页
编译原理第4章1.ppt_第2页
编译原理第4章1.ppt_第3页
编译原理第4章1.ppt_第4页
编译原理第4章1.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

第四章语法分析 本章讨论程序语言的语法分析方法 以及语法分析程序的设计原理和实现技术 第四章语法分析 语法分析程序的功能和语法分析方法 自顶向下语法分析法 自底向上算符优先分析法 LR分析法 4 1语法分析程序的功能 语法分析程序的功能 或错误表 4 1语法分析程序的功能 语法分析的方法 自顶向下语法分析法 自上而下语法分析法 自底向上语法分析法 自下而上语法分析法 4 1语法分析程序的功能 1 自上而下的分析法 从文法的开始符号出发 根据文法规则正向推导出给定句子的一种方法 或者说 从树根开始 往下构造语法树 直到建立每个叶的分析方法 4 1语法分析程序的功能 2 自下而上的分析法 从给定的输入串开始 根据文法规则逐步进行归约 直至归约到文法开始符号的一种方法 或者说 从语法树的未端开始 步步向上归约 直至根结点的分析方法 4 2自上而下语法分析法 非确定的自上而下分析法的基本思想是 对任何输入串W试图用一切可能的办法 从文法的开始符号出发 自上而下地为它建立一棵语法树 或者说 为输入串寻找一个最左推导 如果试探成功 则W为相应文法的一个句子 否则W就不是文法句子 4 2 1非确定的自上而下分析法的思想 也就是说 这种分析过程本质上是一种穷举试探过程 是反复使用不同规则 谋求匹配输入串的过程 试探发生回溯 4 2 1非确定的自上而下分析法的思想 例设有文法G S S aAbA de d 输入串W adb 匹配失败 这时应回溯 选择A的其它可能的规则重新匹配 4 2 1非确定的自上而下分析法的思想 匹配成功 S aAbA de d 输入串W adb 4 2 1非确定的自上而下分析法的思想 上述自上而下为输入串W建立语法树的过程 实际也是设法为输入串建立一个最左推导序列 S aAb adb 由于对输入串从左向右进行扫描 使用最左推导 才能保证按从左到右扫描顺序匹配输入串 4 2 1非确定的自上而下分析法的思想 根据以上分析 不难看出 非确定的自上而下分析法即是带回溯的自上而下分析法 实际上是一种穷举的试探方法 其分析效率极低 代价很高 在实用的编译程序中是不常用的 我们通常使用确定的自上而下分析法进行语法分析 4 2 1非确定的自上而下分析法的思想 但确定的自上而下分析法对语言的文法有一定的限制条件 那就是要求描述语言的文法是无左递归的和无回溯的 4 2 2文法的左递归性和回溯的消除 文法左递归的消除 当一个文法是左递归文法时 采用自上而下分析法会使分析过程进入无穷循环之中 文法左递归是指文法中的某个非终结符A存在推导 4 2 2文法的左递归性和回溯的消除 用非终结符A去匹配输入串时 使当前句型的最左非终结符仍然为A 也就是说 在没有读进任何输入符号的情况下 又重新要求A去进行新的匹配 于是 造成无穷循环 4 2 2文法的左递归性和回溯的消除 对含直接左递归的规则进行等价变换 消除左递归 引进一个新的非终结符 把含左递归的规则改写成右递归 设关于非终结符A的直接左递归的规则为 4 2 2文法的左递归性和回溯的消除 对A的规则可改写成如下右递归形式 A A A A A A 其中 是任意的符号串 不等于 不以A开头 4 2 2文法的左递归性和回溯的消除 改写以后的形式和原来形式是等价的 也就是说 从A推出的符号串的集合是相同的 4 2 2文法的左递归性和回溯的消除 一般情况下 设文法中关于A的规则为 A A 1 A 2 A m 1 2 n 其中每个 都不等于 而每个 都不以A开头 消除直接左递归后改写为 A 1A 2A mA A 1A 2A nA 4 2 2文法的左递归性和回溯的消除 例1设有文法G E E E T E T TT T F T F FF E id 消去非终结符E T的直接左递归后 文法G E 改写为 F E id E TE E TE TE T FT T FT FT 4 2 2文法的左递归性和回溯的消除 例2设有文法G A A Ac Aad bd e 消去直接左接左递归后文法G A 改写为 A cA adA A bdA eA 4 2 2文法的左递归性和回溯的消除 2 采用扩充BNF表示法改写含直接左递归的规则 在扩充的BNF表示中 使用花括号 表示符号串 的出现可0次或多次 即表示 4 2 2文法的左递归性和回溯的消除 例如定义标识符的文法 b 使用方括号 表示 的出现可有可无 它用来表示可供选择的符号串 l l d 使用扩充BNF表示可改写成 l l d 4 2 2文法的左递归性和回溯的消除 例如 定义C语言中条件语句的文法是 if if else 用扩充BNF表示可改写成如下形式 if else 4 2 2文法的左递归性和回溯的消除 c 使用圆括号可在规则中提因子 例如 A x 1 x 2 x m 可写为 A x 1 2 m 4 2 2文法的左递归性和回溯的消除 例3对下列文法用扩充BNF表示法对其进行改写 E E T E T TT T F T F FF E id 分析规则E E T E T T表示了E所生成的符号串是T开头的后面跟0个或多个 T或 T组成 对T规则类似 4 2 2文法的左递归性和回溯的消除 文法G E 可以改写为 E T T T T F F F F E id 4 2 2文法的左递归性和回溯的消除 例4对下列文法用扩充BNF表示法对其进行改写 A Ac Aad bd e 分析 4 2 2文法的左递归性和回溯的消除 所以原文法可以改写成如下形式 A bd e c ad 4 2 2文法的左递归性和回溯的消除 2 回溯的消除 在自上而下分析过程中 由于回溯 需要推翻前面的分析 包括已做的一大堆语义工作 重新去进行试探 这样大大降低了语法分析器的工作效率 因此 需要消除回溯 4 2 2文法的左递归性和回溯的消除 我们分析发现引起回溯的原因是 在文法中 当某个非终结符A有多个候选式时 遇到用A去匹配当前输入符号a时 无法确定选用唯一的一个候选式 而只能逐一进行试探 从而引起回溯 具体表现在下面两种情况 A 1 2 3 n 4 2 2文法的左递归性和回溯的消除 第一种情况 文法中相同左部的规则 其右部左端第一个符号相同而引起回溯 S aAbA de d 例设有文法G S 4 2 2文法的左递归性和回溯的消除 第二种情况 文法中相同左部的规则 其中某一右部能推出 串 例如 文法G A BxB x 其非终结符B有两个右部 第二个右部能推导出 串且两个右部左端第一个符号不相同 但在分析符号串W x时出现回溯 4 2 2文法的左递归性和回溯的消除 试探分析过程如下图所示 A BxB x W x 匹配失败 匹配成功 4 2 2文法的左递归性和回溯的消除 综上所述 在自上而下分析过程中 为了避免回溯 对描述语言的文法有一定的要求 对文法的某个非终结符A 当它有多个侯选式时 若用A匹配输入串时 能根据当前读到的输入符号a唯一地选择一条规则去匹备输入串 或者说 能唯一地选择一条规则进行推导 4 2 2文法的左递归性和回溯的消除 A 1 2 3 n 这也就是说 在自上而下分析过程中 为了避免回溯 要求描述语言的文法是LL 1 文法 4 2 2文法的左递归性和回溯的消除 LL 1 文法的判断条件 为了建立LL 1 文法的判断条件 需引进三个相关的集合 FIRST集 FOLLOW集 SELECT集 LL 1 文法的判断条件 设 是文法G的任一符号串 定义文法符号串 的首符号集合 LL 1 文法的判断条件 例设有文法G S S Ap Bq A cA a B dB b FIRST Ap c a AP cAp AP ap FIRST Bq Bq bq b d Bq dBq LL 1 文法的判断条件 2 设文法G的开始符号为S 对于G的任何非终结符A 定义非终结符A的后继符号的集合 则规定 FOLLOW A LL 1 文法的判断条件 换句话说FOLLOW A 是G的所有句型中紧接在A之后出现的终结符或 这里我们用 作为输入串的结束符 例如 输入串 也可以用 作为输入串的结束符 例如 输入串 LL 1 文法的判断条件 例设有文法G A FOLLOW B A aB A aB abBA abBd A aB abBA abBaB d a A aB d B bBA LL 1 文法的判断条件 3 定义规则的选择集合SELECT 设A 是文法G的任一条规则 其中A VN VN VT 定义 SELECT A FIRST FIRST FOLLOW A 若 LL 1 文法的判断条件 例设有文法G A A aB d B bBA SELECT A aB FIRST aB a SELECT A d FIRST d d LL 1 文法的判断条件 b SELECT B bBA FIRST bBA d a FOLLOW B SELECT B FIRST A aB d B bBA LL 1 文法的判断条件 LL 1 文法定义 一个上下文无关文法G是LL 1 文法 当且仅当对G中每个非终结符A的任何两个不同的规则A 满足 SELECT A SELECT A 其中 中至多只有一个能推出 串 LL 1 文法的判断条件 LL 1 中的第一个L表明自上而下的分析是从左到右扫描输入串 第二个L表明分析过程中使用最左推导 1表示分析时每一步只需向前看一个符号即可决定所选用的规则 而且这种选择是准确无误的 LL 1 文法的判断条件 例1设有文法G S S aAbA de d SELECT A de FIRST de d SELECT A d FIRST d d SELECT A de SELECT A d 由LL 1 文法定义可知 该文法不是LL 1 文法 因此对输入串不能进行确定的自上而下分析 LL 1 文法的判断条件 例2设有文法G A A aB dB bBA 则SELECT A aB FIRST aB a SELECT A d FIRST d d SELECT B bBA FIRST bBA b SELECT B FIRST FOLLOW B a d LL 1 文法的判断条件 所以SELECT A aB SELECT A d SELECT B bBA SELECT B 由定义可知 G A 是LL 1 文法 对任何输入串W可进行确定的分析 LL 1 文法的判断条件 例3设有文法G S S aABA bB dA B a e SELECT A bB FIRST bB b SELECT A dA FIRST dA d SELECT A FIRST FOLLOW A a e 试判断该文法是否LL 1 文法 LL 1 文法的判断条件 SELECT B a FIRST a a SELECT B e FIRST e e SELECT A bB SELECT A dA SELECT A bB SELECT A SELECT A dA SELECT A SELECT B a SELECT B e S aABA bB dA B a e 该文法为LL 1 文法 LL 1 文法的判断条件 例4设有文法G S S AB bCA b B aD C AD D aS c 试判断该文法是否LL 1 文法 分析对文法某个非终结符 当有多个候选式时 求规则的SELECT集合 LL 1 文法的判断条件 SELECT S AB FIRST AB FOLLOW S a b SELECT S bC FIRST bC b SELECT S AB SELECT S bC S AB bCA b B aD C AD D aS c FIRST AB FIRST A FIRST B a b FOLLOW S 该文法不为LL 1 文法 LL 1 文法的判断条件 由定义可知 文法G S 是LL 1 文法 对任何的输入串可进行确定的自上而下分析 LL 1 文法的判断条件 综合上面的讨论 我们可知对LL 1 文法 若当前非终结符A面临输入符号a时 可根据a属于哪一个SELECT集 唯一地选择一条相应规则去准确地匹配输入符号a 也就是说 当描述语言的文法是LL 1 文法时 可对其进行确定的自上而下的分析 4 2 3某些非LL 1 文法到LL 1 文法的改写方法 某些非LL 1 文法到LL 1 文法的改写 前面已经指出 构造确定的自上而下分析程序要求对给定语言的文法必须是LL 1 文法 但是 并不是每个语言都有LL 1 文法 由LL 1 文法定义可知 若文法中含有左递归或含有公共左因子 则该文法不是LL 1 文法 因此 对某些非LL 1 文法而言 可通过消除左递归和反复提取公共左因子对文法进行等价变换 可能将其改造为LL 1 文法 消除文法左递归的方法见4 2 2 4 2 3某些非LL 1 文法到LL 1 文法的改写方法 提取公共左因子 当文法中含有形如 A 1 2 n的规则 不满足LL 1 文法条件 则其右部的FIRST集交不空 即 SELECT A i SELECT A j 4 2 3某些非LL 1 文法到LL 1 文法的改写方法 提取公共左因子将文法改写成 A A 若在 1 2 3中仍含有公共左因子 这时可再次提取 这样反复进行提取 直到引进新非终结符的有关规则再无公共左因子为止 A 1 2 n的规则 A 1 2 n 4 2 3某些非LL 1 文法到LL 1 文法的改写方法 例1设有文法G S 该文法是非LL 1 文法 该文法有公共左因子 利用提取公共左因子的方法对其进行改写 我们得到 S aAbA de d 4 2 3某些非LL 1 文法到LL 1 文法的改写方法 不难验证

温馨提示

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

评论

0/150

提交评论