Closure of an item set
by thinker
關鍵字:
最後更新時間:
2007-09-19 02:18:58 CST |
引用
查詢:
COMMENTS:
on 2007-09-19 15:05:25 CST
Lu, Jye said ..
這可能要討論到如何表達 epsilon 了...
照一般 YACC 的寫法,
epsilon 是用另一條 rule 來表示,
這樣自然會引入一個 non-terminal 來表示 epsilon,
連帶可以解決這問題.
我覺得這是無法 inline 表示 epsilon 的前題下,
所做的簡化吧.
還請各位先進賜教.
on 2007-09-19 16:09:04 CST
Thinker said ..
Jye 的建議倒是不錯。我回過頭看 ϵ ,一直都是當作一個 terminal ,因此會有這個問題。另一個解決方法,就是在開始 construct parsing table 前,先將 grammar 裡面所有的 ϵ 都移除,當作不存在。仔細想想,其實 ϵ 從一開始就代表著 empty string ,所以也不需要存在,只是單純的方便表達。另一方面,在計算 first() 時,卻需要 ϵ 的存在,以方便記錄 non-terminal 可能是 empty string 的事實。
Jye 提供的建議,卻引起另一個問題。雖然表面上沒有 ϵ ,但在計算 first() 時,卻必需引入。
on 2007-09-20 13:44:11 CST
Lu, Jye said ..
是的.
因為語法沒有變動, 只是表示方式不同,
所以計算結果一定是同構的.
這也是原先命題:
C -> α . ε β
同時要考慮:
C -> α ε . β
這個 closure 的 first/follow 一樣.