我遇到了一個小問題,這個問題現在已經困擾我很長一段時間了,我一直沒能在網上找到合適的答案。手動計算FIRST集
給定一個語法:
S = Sc | Eab | Db | b
D = EDcD | ca | ɛ
E = dE | DY
Y = Ed | Dad | ɛ
找到的第一套說Y,那麼FIRST(Y),我在假設它是這樣糾正這個:
FIRST(Y)
= FIRST(Ed) ∪ FIRST(Dad) ∪ FIRST(ɛ)
= FIRST(E) ∪ (FIRST(D)\{ɛ}) ∪ FIRST(ad) ∪ {ɛ}
= FIRST(E) ∪ (FIRST(D)\{ɛ}) ∪ {a, ɛ}
現在的問題是我怎麼找FIRST(E)和FIRST(d)?
這種計算FIRST的方法是否總會給我們每個非終結符的正確FIRST集?或者我們應該只在這樣的情況下使用這種方法,當兩個非終端互相引用時? – Zohaib 2012-10-28 04:42:13
如果沒有兩個非終結者互相引用(直接或間接),那麼相同的過程起作用,並且它更加明顯:它工作:-)。想象一下,從每個符號(終端或不是)繪製箭頭到依賴於它的每個其他事物。如果你沒有依賴的「循環」,那麼會發生什麼是正確的FIRST集合沿着箭頭傳播出去,並且在一段有限的時間之後,你已經遵循了每個箭頭,並且一切都停止了變化,並且你完成了。 – 2012-10-29 14:44:24