⑴ 關於編譯原理first follow 和select
首先要明白這三個集的作用和用途,知道了他們是用來做什麼的之後,理解起來就簡單一些
First(A)集的作用是標示在替換非終結符A的時候,替換後的文法的首字母集合,語法分析程序根據這個來判斷給定的語言是否是合法的,是符合規則的。
Follow(A)的作用是標示那些可以出現在A之後的字元,語法分析程序根據這個,在A可以被替換為e(空)的時候來進行判斷,看當前的文法是否是合法的。
這里簡單說明下,比如A->b,A->e(空) 當給定的語言是 bXXXXX的時候,根據第一句文法就可以判定句子合法,但是如果給的語言是cXXXXX的時候,因為A->可以替換為空,這時候就需要一句A的follow集來進行判斷,若A的follow集裡面含有c 則語言是合法的
Select集的作用是將first集和follow集進行合並,如果兩個文法的左端都是A,若他們的select集交集為空,表明他們是兩個無關的,不會產生不確定性的文法,反之,則表明文法不是LL(1)文法
計算的公式很繁雜,理解了意思之後,看就能看出來。。。。
⑵ 編譯原理四元式
四元式的一般形式為(op, arg1, arg2, result),其中:op為一個二元(也可以是零元或一元)運算符。arg1和arg2為兩個運算對象,可以是變數、常數或者系統定義的臨時變數名。result為運算結果。
第一步:T1=a*b,
第二步:T2=c*d,
第三步:T3=T2/e,
第四步:T4=T1-T3,
第五步:f=T4.
⑶ 編譯原理文法可以定義為四元集G(S)={Vn ,Vt,P,S},那麼Vn* ,Vt*和Vn+ ,Vt+,即右上角加*或+是什麼意思
右上角加*是集合的閉包,也稱為克林閉包(Kleene Closure),右上角加+是集合的正閉包
Vn* 是非終結符集的閉包,Vn+是非終結符集的正閉包
Vt* 是終結符集的閉包,Vt+是終結符集的正閉包
⑷ 急求!怎麼求編譯原理的FOLLOW集合在線等~
follow集合是針對非終結符而言的;follow(U)所表達的是句型中非終結符U的所有可能的後隨終結符號的集合,特別注意一點:「#」是識別符號的後隨附。
直接收取:形如「……Ua」的組合,直接把啊收入到follow(U)中
直接收取:形如「……UP……」的組合,(P是非終態符);把firth(P)除去ε直接收入到follow(U)中。
反復傳遞:形如「P-……U」的產生式,
follow(P)的全部內容傳遞到follow(U)中,或者說是P-……UB且first(B)包含ε,則把first(B)除去ε直接收入到follow(U)中,同時吧follow(P)的全部內容傳送到follow(U)中...