文章目录
一、最左推导与最右规约
是对产生式来进行操作的,通过产生式中元素的替换,完成非终结符向目标句子的生成:
每一次都替换最左边的非终结符,称为最左推导,它的逆过程称为最右规约。
二、文法转换
文法转换的过程是构建新的与原来文法等价的文法的过程。
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 后查看