鉴于书上的文法过于高深,我特总结了以下方法,保证你一学就会!
特此鸣谢:张飞庆同学,没有你的帮助也就没有我的今天,哈哈!!
例4.6 对于文法G(E)
E→TE'
E'→+TE¢ | eε
T→FT'
T→*FT'¢ | eε
F→(E) | i
构造每个非终结符的FIRST和FOLLOW集合:
FIRST(E) ={(,i}
FIRST(E')={+, ε}
FIRST(T) ={(,i}
FIRST(T')={*, ε}
FIRST(F) ={(,i}
FOLLOW(E) ={),#}
FOLLOW(E¢)={),#}
FOLLOW(T) ={+,),#}
FOLLOW(T¢)={+,),#}
FOLLOW(F) ={*,+,),#}
下面开始了!
首先是FIRST集:
这个比较简单,就是一直推导直到找到一个终结符就OK了!需要注意的也就是只用看每 个产生式右部的第一个字符就行了。
重点是FOLLOW集:
首先要知道求Folllow集是在产生式的右部进行的。
1:在产生式的右部寻找要求FOLLOW集的非终结符。
2:看看要求的非终结符是不是开始符,如果是就把#加入FOLLOW集中。
2:找找这个终结符后面还有没有字符,找了没?不找不讲了!
3:下面是个if条件判断
If (后面没有字符)
{
将产生式右部的非终结符的FOLLOW集加入到所求集中;
}
Else(有字符)
{
先对这个字符求First集;
If(这个字符可以推导出ε)
{
再求这个字符的FOLLOW集;
}
}
4:完成!
哈哈,第一次学习心得竟然是学的最烂的编译原理,晕。