编译原理---(预测分析first,follow)

时间:2021-09-01 03:53:23
	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 为开始符号 , 所以后面一定是 ”$” 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’)