首先要构造FIRST集合和FOLLOW集合
例题
【编译原理】LL1分析表的构造

首先构造比较简单的FIRST集合

【编译原理】LL1分析表的构造
【编译原理】LL1分析表的构造
上面两个的FIRST集合非常好计算
直接提取候选式最开始的终结符即可
答案

【编译原理】LL1分析表的构造
【编译原理】LL1分析表的构造

接着构造它的FIRST集合
【编译原理】LL1分析表的构造
我们去找F的fist集合
【编译原理】LL1分析表的构造
由于F的fist集合里面没有空字,所以我们不去看 T’ 的 fist集合
而将F的first认为是T的first集合
同理
【编译原理】LL1分析表的构造
T的集合也没有空字,故T的first集合就是E的first集合
【编译原理】LL1分析表的构造

接着构造FOLLOW集合

【编译原理】LL1分析表的构造

我们首先在文法开始符号E加入#
注意FOLLOW集合里面没有空字
即FOLLOW(E) = { # }
接着我们开始一个一个构造
【编译原理】LL1分析表的构造

由它我们知道
1、E’ 的fist集合一定是T的FOLLOW,因为E’跟在T的后面

2、E的follow也是E’的FOLLOW(如果T的候选式没有空字,那么E的follow不是T的follow)
3、由于【编译原理】LL1分析表的构造
first(E’)含空字,故E的follow也是T的follow

接着我们来考虑【编译原理】LL1分析表的构造
1、E’的FIRST是T的FOLLOW
2、看E’的first有没有空字,有的话E‘的follow也是T的follow
依次类推
【编译原理】LL1分析表的构造

构造完之后开始构造分析表

竖列是文法出现的所有的非终结符

横行是文法出现的所有的终结符加结束标志#

然后根据上面的表格填写,首先填写First部分
【编译原理】LL1分析表的构造
如果产生式的右端直接以终结符开头例如
【编译原理】LL1分析表的构造
【编译原理】LL1分析表的构造
那么只在这个终结符所对应的非终结符那一个格子把产生式填写上
【编译原理】LL1分析表的构造
像这个式子两边都要填写,就是F对应的那一行以及( 和 i对应的两个列都要把这个式子写上
接着写follow集合
哪个式子可以产生空字,就把产生空字那一部分式子写在对应的格子上

本题只有【编译原理】LL1分析表的构造
【编译原理】LL1分析表的构造
这两个式子可以产生空字,那么就把他写在对应的格子上

最后答案
【编译原理】LL1分析表的构造

相关文章: