LL(1)文法
遍历所有表达式,取具有相同左部的表达式的select集合,将这些具有相同左部表达式的select集合取交集。
只要有一组相同左部表达式交集不为空,则该文法非LL1文法。
只有所有相同左部表达式交集都不为空,则为LL1文法。
FIRST
S->AB|bC
A->ε|b
B->ε|aD
C->AD|b
D->aS|c
|
|
|
|
|
|
|
|
|
|
|
|
两个非终结符的要看是不是他们两个同时能推出ε,能就有ε;要是有一个不能推出ε,那First集就没有ε。
FOLLOW
从开始符号S开始推导,开始符号的follow里面一定要有#。
所以开始符号的S的follow集要有#。
follow是找->后面的。123比如找S的follow,就要看谁的->后面有S。D->aS里面有S,然后再看D->aS的S后面有没有别的符号,没有就加上D的follow集。如果有,就加上后面那个字母的first集里面除了ε以外的符号,再看这个字母能不能推出ε,如果能,就再加上->左边的那个字母的follow。Follow(S)->Follow(D)={#}
|
|
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|