First(A) 为A的开始符或者首符号集
Follow(A) 指的是在某些句型中紧跟在A右边的终结符号的集合
求下列右递归语法的First集和Follow集
第一行:Expr → Term Expr '
第二行:Expr ' → + Term Expr ' | - Term Expr ' | ∈
第三行:Term → Factor Term '
第四行:Term ' → * Factor Term ' | / Factor Term ' | ∈
第五行:Factor → ident | num | ( Expr )
First(Factor) = {
ident num ( } //Factor → ident | num | ( Expr ) 以什么开始显而易见
First(Term ') = {
* / ∈} //同理看上面Term ‘所在语法行就好了
First(Term) = {
ident num ( } //Term是Factor为首 那么Factor又以ident num ( 为首
First(Expr ') = {
+ - ∈ }
First(Expr) = {
ident num ( } //Expr以Term为首 Term以Factor为首 Factor又以ident num ( 为首
//Expr作为起始位置永远包含eof 同时语法最后一行Expr可以跟 )
Follow(Expr) = {
eof ) }
//第一行Expr '可以作为Expr结尾 那么Expr ’包含Expr所有follow集
//第二行右边的Expr '作为Expr '结尾 Expr ‘ 包含 Expr ’自身 所以无用
Follow(Expr ') = {
eof ) }
//第一行Term出现在Expr ’前面 所以Follow(Term)包含First(Expr ')
//同时因为Expr ‘可能为∈ 那么说明Term可以作为Expr的最后出现 所以要包含Follow(Expr)
Follow(Term) = {
+ - eof ) }
//第三行可以发现Term ‘可以作为Term的最后 所以要包含Follow(Term)
//第四行右边的Term '作为Term '结尾 Term ‘ 包含 Term ’自身 所以无用
Follow(Term ')