编译原理中LL(1)文法求FIRST集和FOLLOW集的方法
2013-12-08 16:21
501 查看
一、求FIRST集
1、右部首个字符是终结符则加入左部字符的FIRST集中,比如对形如U->a…的产生式(其中a是终结符),把a收入到FIRST(U)中。
2、右部首个字符是非终结符,
若此非终结符能推出空字符,则把它的FIRST集传送到左部字符的FIRST集中,*
若此非终结符后是终结符,则把此终结符加入到左部字符的FIRST集中,同时推导结束;
若此非终结符后是非终结符,则回到(*)。
若此非终结符不能推出空字符,则把它的FIRST集传送到左部字符的FIRST集中,同时推导结束。
二、求FOLLOW集
1、FOLLOW集合是从开始符号S开始推导,把#加入FOLLOW(S)中。
2、左部是S的产生式,右部末尾是非终结符,则把#加入此非终结符的FOLLOW集中。
3、右部中若某非终结符的后面是终结符,则把此终结符加入到非终结符的FOLLOW集中。
4、右部中若某非终结符的后面是非终结符,
若后非终结符能推出空字符,则把后非终结符的FIRST集(去掉空字符)传送到前非终结符的FOLLOW集中,同时把左部非终结符的FOLLOW集传送到后非终结符的FOLLOW集中。
若后非终结符不能推出空字符,则把后非终结符的FIRST集传送到前非终结符的FOLLOW集中。
1、右部首个字符是终结符则加入左部字符的FIRST集中,比如对形如U->a…的产生式(其中a是终结符),把a收入到FIRST(U)中。
2、右部首个字符是非终结符,
若此非终结符能推出空字符,则把它的FIRST集传送到左部字符的FIRST集中,*
若此非终结符后是终结符,则把此终结符加入到左部字符的FIRST集中,同时推导结束;
若此非终结符后是非终结符,则回到(*)。
若此非终结符不能推出空字符,则把它的FIRST集传送到左部字符的FIRST集中,同时推导结束。
二、求FOLLOW集
1、FOLLOW集合是从开始符号S开始推导,把#加入FOLLOW(S)中。
2、左部是S的产生式,右部末尾是非终结符,则把#加入此非终结符的FOLLOW集中。
3、右部中若某非终结符的后面是终结符,则把此终结符加入到非终结符的FOLLOW集中。
4、右部中若某非终结符的后面是非终结符,
若后非终结符能推出空字符,则把后非终结符的FIRST集(去掉空字符)传送到前非终结符的FOLLOW集中,同时把左部非终结符的FOLLOW集传送到后非终结符的FOLLOW集中。
若后非终结符不能推出空字符,则把后非终结符的FIRST集传送到前非终结符的FOLLOW集中。
相关文章推荐
- 编译原理FIRST集、FOLLOW集、SELECT集求法通俗解释 & LL(1)文法判定
- 编译原理 LL1文法First集算法实现
- 编译原理:求First集与Follow集的方法
- 编译原理 First集和Follow集的求法
- 「编译原理」“根据LL(1)求FIRST集” 书本算法的解析及改进
- 【编译原理】LL1文法语法分析器
- 编译原理LL1文法Follow集算法实现
- 编译原理LL(1)文法实验报告
- 编译原理 FIRST集和FOLLOW集的求法
- 编译原理 First集 Follow集 select集 通俗易懂的讲解 + 实例
- 【编译原理】求First集和Follow集
- 【编译原理】LL(1)文法分析全过程(FIRST/FLLOW/SELECT集等)实现(c++语言)
- 编译原理之--FIRST集、FOLLOW集 和 SELECT集
- 编译原理:LL(1)文法 语法分析器(预测分析表法)
- 编译原理 FIRST集和FOLLOW集的求法
- 【编译原理】语法分析LL(1)分析法的FIRST和FOLLOW集
- 编译原理中的first集,follow集和selec集的小解
- LL1文法分析(First集,Follow集,Select集,ll分析表,语句分析)
- 【编译原理】First集和Follow集
- 编译原理之ll(1)文法判断和左递归问题