编译原理:语法分析(自顶向下)

发布于:2022-11-13 ⋅ 阅读:(996) ⋅ 点赞:(0)

一、最左推导与最右规约

是对产生式来进行操作的,通过产生式中元素的替换,完成非终结符向目标句子的生成:
在这里插入图片描述
每一次都替换最左边的非终结符,称为最左推导,它的逆过程称为最右规约。

二、文法转换

文法转换的过程是构建新的与原来文法等价的文法的过程。

1.消除直接左递归

在这里插入图片描述
在这里插入图片描述

2.消除间接左递归

在这里插入图片描述

3.处理多个替换式

在这里插入图片描述

三、LL(1)文法

1.含义

第一个“ L”表示从左向右扫描输入。
第二个“ L”表示产生最左推导。
“1”表示在每一步中只需要向前看一个输入符号来决定语法分析动。

2.内容

在这里插入图片描述

四、FIRST集,FOLLOW集与SELECT集

1.FIRST集

在这里插入图片描述
FIRST集为非终结符能推出的句型的首部为终结符的终结符的集合。

2.FOLLOW集

FOLLOW集为非终结符后面可以接的终结符的集合。
在这里插入图片描述

  • 首先将能出现在最右侧的元素的FOLLOW集都加入$,发现这五个都可以。
  • 产生式最左端的元素的FOLLOW集都是产生式最右端的FOLLOW集(反之不成立)。进行更新。
  • 看每一个产生式的右边,E’在T右边,E’的FIRST集就是T的FOLLOW集。T’在F的右边,T’的FIRST集就是F的FOLLOW集。依次类推,遍历完一遍。

按照这个顺序循环进行更新,直到表不再更新了为止,得到的就是FOLLOW集。

3.SELECT集

在这里插入图片描述
首先将|符号拆成两个产生式,当右侧不是空的时候,SELECT集就是左侧的FIRST集,如果为空则SELECT集就是左侧的FALLOW集。
根据SELECT可以生成分析表,这个表在非递归方法中使用:
在这里插入图片描述

五、递归与非递归分析方法

1.递归的方法

在这里插入图片描述
使用递归的方式进行写程序,无论递归和非递归都要求SELECT集,其中右侧第一个为终结符就很容易看出FIRST集了,同时也是SELECT集,右侧为空的时候就看FOLLOW集,从而生成该产生式的SELECT集。

2.非递归方法

在这里插入图片描述

3.非递归方法错误处理

在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到