计算FIRST和FOLLOW(P101)
FIRST
对于文法G的每个非终结符的所有候选式α,其首符号集FIRST,定义如下:
FIRST(α):从α可能推导出的所有开头终结符号或ε
举例
总结(看例题,我总结的你们可能看不懂,为了方便自己看的)
FIRST意思是求左边某一个字母对应右边的第一个出现的终结符号。最重要的是要考虑空串,如果某个字母可以为空串,就把该字母跳过,把其后面一个元素的FIRST集中去掉空串,加入到该FIRST中;如果不是空串,就把该字母的FIRST加入到左边的FIRST集合中。
FOLLOW
对于文法G的非终结符的后跟符号集FOLLOW定义如下:
FOLLOW(A):是所有句型中紧接A之后的终结符号或#
举例
总结(看例题,我总结的你们可能看不懂,为了方便自己看的)
需要注意该字母的FOLLOW集合,看的是右边的式了,看该元素所有的右边无素的右边那一个。
该式子对应左边的字母的FOLLOW为该元素的FOLLOW的一部分
再观察该式右边的字母是否为空串,如果可以为空串就把右边的字母的FOLLOW集加入到该字母的FOLLOW集合中,如果不为空串,就把右边字母的FIRST集合去掉空串加入到该字母的FOLLOW集合中。如果右边的字母即可以是空串,又可以不是空串,则FIRST和FOLLOW集合都加入到该字母的FOLLOW集合中。
构造LL(1)分析表(P102)(自己多看几遍)
以所有终结符为列坐标,所有非终结符为行坐标先把表格画出来。(注意把空串去掉)
把给出来的文法中的式子都列出来,其中有两个以上的式子都折开。
把FIRST集合里面,左边的字母对应行,右边的元素对应列所对应的式子填入对应表中。直到把所有的都填完。
观察FIRST集合里面有空串式了,观察该元素的FOLLOW集合,看FOLLOW集合对应哪些FIRST集合中没有的元素,把式子填入表中。