《編譯原理》求 FIRSTVT 集和 LASTVT 集的步驟 - 例題解析


《編譯原理》求 FIRSTVT 集和 LASTVT 集的步驟 - 例題解析

算符優先關系表的構造中涉及到求 FIRSTVT 集和 LASTVT 集。

表示及含義:

FIRSTVT(T) 非終結符T的最左終結符集合
LASTVT(T) 非終結符T的最右終結符集合

定義:

定義解釋:

FIRSTVT(T) 非終結符T經過1步或多步推導,得到的最左端終結符,以及左端第二個終結符的集合
LASTVT(T) 非終結符T經過1步或多步推導,得到的最右端終結符,以及倒數第二個終結符的集合

求 FIRSTVT 集的步驟:

(1)若有產生式 T→a 或者 T→Ra...,則 a ∈ FIRSTVT(T)

(2)若 a ∈ FIRSTVT(R),且有產生式 T→R...,則 a ∈ FIRSTVT(T)

​ 就是說如果 a 是非終結符 R 的 FIRSTVT 集,且 T 可以推出以非終結 R 帶頭的右部,則 a 也是非終結符 T 的 FIRSTVT 集。

注: 省略號 ... 可以為空,就是沒有

求 LASTVT 集的步驟:

(1)若有產生式 T→...a 或者 T→...aR,則 a ∈ LASTVT(T)

(2)若 a ∈ LASTVT(R),且有產生式 T→...R,則 a ∈ LASTVT(T)

例題:

已給文法:
G[S]:
S→a|b|(B)
A→S, A|S
B→A

求所有非終結符的 FIRSTVT,LASTVT 集

解析:

(1)只要是讓求 FIRSTVT,LASTVT 集,則該文法就隱含條件為算符優先文法。

(2)算符優先文法的特點是:不會出現兩個相鄰的非終結符,即兩個非終結符中間夾着一個終結符。如果第一個是終結符則第二個是非終結符。

結果:

FIRSTVT 集 LASTVT 集
S {a, b, ( } {a, b, ) }
A {a, b, (, 逗號 } {a, b, ), 逗號}
B {a, b, (, 逗號 } {a, b, ), 逗號}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM