E --> TE' E' --> +TE'|ε T --> FT' T ' --> *FT'|ε F --> ( E ) | id 1) first(F)={ (, id }因为F的两个产生式以"(""id"开头 2) first(E)=first(T)=first(F)={ (, id }因为E的产生式为TE',故first(E)=first(T) 3) first(E')={ +,ε }因为E'的产生式体以+开头,和ε开头 4) first(T)=first(F)={ (, id }因为T只有一个产生式,而该产生式的体以F开头,又因为F不能推倒出ε,所以first(T)与first(F)必然相同. 5) first(T')={ *, ε }因为T'的产生体以"*" 和 "ε"开头 6) follow(E) = { ), $}.因为F --> ( E ) | id 在E 的右边是 “)’,又因为E为开始符号,所以后面一定是”$” 7) Follow(E’) = { ), $ }因为follow(E’)等于follow(E),因为产生式E --> TE' 8) Follow(T) = { +, ), $} 因为产生式E --> TE'推导出T的后面是E’,first(E’)={+,ε},所以follow(T)==follow(E’)除了ε 9) Follow(T’) = Follow(T) = { +, ), $ } 因为T’只出现在T的产生式的尾部,因此必然有follow(T’)==follow(T) 10) Follow(F) = { *, +, ), $ }因为产生式T --> FT',说明first(T’)={*,ε},这个因为存在ε所以follow(F)==follow(T’)
编译原理---(预测分析first,follow)
最新推荐文章于 2021-09-07 21:22:17 发布