首先要构造FIRST集合和FOLLOW集合

例题

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA

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

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_02


LL表分析器JAVA ll1分析表构造_开始符号_03


上面两个的FIRST集合非常好计算

直接提取候选式最开始的终结符即可

答案

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_04


LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_05

接着构造它的FIRST集合

LL表分析器JAVA ll1分析表构造_开始符号_06


我们去找F的fist集合

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_07


由于F的fist集合里面没有空字,所以我们不去看 T’ 的 fist集合

而将F的first认为是T的first集合

同理

LL表分析器JAVA ll1分析表构造_开始符号_08


T的集合也没有空字,故T的first集合就是E的first集合

LL表分析器JAVA ll1分析表构造_开始符号_09

接着构造FOLLOW集合

LL表分析器JAVA ll1分析表构造_开始符号_10

我们首先在文法开始符号E加入#

注意FOLLOW集合里面没有空字

即FOLLOW(E) = { # }

接着我们开始一个一个构造

LL表分析器JAVA ll1分析表构造_开始符号_11

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

2、E的follow也是E’的FOLLOW(如果T的候选式没有空字,那么E的follow不是T的follow)

3、由于

LL表分析器JAVA ll1分析表构造_开始符号_12


first(E’)含空字,故E的follow也是T的follow接着我们来考虑

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_13


1、E’的FIRST是T的FOLLOW

2、看E’的first有没有空字,有的话E‘的follow也是T的follow

依次类推

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_14

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

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

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

然后根据上面的表格填写,首先填写First部分

LL表分析器JAVA ll1分析表构造_开始符号_15


如果产生式的右端直接以终结符开头例如

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_16


LL表分析器JAVA ll1分析表构造_开始符号_17


那么只在这个终结符所对应的非终结符那一个格子把产生式填写上

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_18


像这个式子两边都要填写,就是F对应的那一行以及( 和 i对应的两个列都要把这个式子写上

接着写follow集合

哪个式子可以产生空字,就把产生空字那一部分式子写在对应的格子上本题只有

LL表分析器JAVA ll1分析表构造_LL表分析器JAVA_19


LL表分析器JAVA ll1分析表构造_开始符号_20


这两个式子可以产生空字,那么就把他写在对应的格子上最后答案

LL表分析器JAVA ll1分析表构造_开始符号_21