第二章 相關研究
2.4 BURS 理論
2.4.1 建立 BURS tree automaton
2.4.1.1 建立 tree automaton 的每個狀態
在建造狀態1 時,會先考慮維度是零的 terminal,而在此零維的就只有 LOCAL32,也就是要考慮「LOCAL32」。能夠和「LOCAL32」達成完全比對的 就是「reg32: LOCAL32」這條規則,達成部分比對的則是「statement: ASSIGN LOCAL32 reg32」這條規則,此外,因為「reg32: LOCAL32」是完全比對規則,
其左半部的non-terminal 是 reg32,因此可以根據包覆運算將右半部含有 reg32 這 個標誌的規則給涵蓋進來。Figure 2.9 顯示了狀態 1 所包含的相關資訊。
State 1
(1)full match rule
reg32[LOCAL32]
(2)partial match rule
statementASSIGN [LOCAL32] reg32
(3)closure
statement ASSIGN LOCAL32 [reg32]
reg32INEG32 [reg32]
reg32IADD32 [reg32] reg32
reg32IADD32 reg32 [reg32]
reg32ISUB32 [reg32] reg32
reg32ISUB32 reg32 [reg32]
reg32IADD32 [reg32] INEG32 reg32
reg32IADD32 reg32 INEG32 [reg32]
Figure 2.9 狀態 1 的內容
在建造狀態2 時,因為維度是零的 terminal 已經處理完了,所以考慮維度是 1 的 terminal,而在此一維的就只有 INEG32,也就是要考慮「INEG32 reg32」。
能夠和「INEG32 reg32」達成完全比對的就是「reg32: INEG32 reg32」這條規則,
達成部分比對的則是「reg32: IADD32 reg32 INEG32 reg32」這條規則,此外,因 為「reg32: INEG32 reg32」是完全比對規則,其左半部的 non-terminal 是 reg32,
因此又可以根據包覆運算將右半部含有reg32 這個標誌的規則給涵蓋進來。
Figure 2.10 顯示了狀態 2 所包含的相關資訊。
State 2
(1)full match rule
reg32[INEG32 reg32]
(2)partial match rule
reg32IADD32 reg32 [INEG32 reg32]
(3)closure
statement ASSIGN LOCAL32 [reg32]
reg32INEG32 [reg32]
reg32IADD32 [reg32] reg32
reg32IADD32 reg32 [reg32]
reg32ISUB32 [reg32] reg32
reg32ISUB32 reg32 [reg32]
reg32IADD32 [reg32] INEG32 reg32
reg32IADD32 reg32 INEG32 [reg32]
Figure 2.10 狀態 2 的內容
在建造狀態3 時,因為維度是一的 terminal 已經處理完了,所以考慮維度是 二的terminal,而在此二維的就有 IADD32、ISUB32 和 ASSIGN,因此分別考慮 這三個terminal的情況。在此先處理IADD32,也就是要考慮「IADD32 reg32 reg32」。能夠和「IADD32 reg32 reg32」達成完全比對的就是「reg32: IADD32 reg32 reg32」這條規則,但卻沒有任何規則可以達成部分比對,此外,因為「reg32:
IADD32 reg32 reg32」是完全比對規則,其左半部的 non-terminal 是 reg32,因此 又可以根據包覆運算將右半部含有reg32 這個標誌的規則給涵蓋進來。Figure 2.11 顯示了狀態3 所包含的相關資訊。
State 3
(1)full match rule
reg32[IADD32 reg32 reg32]
(2)partial match rule (3)closure
statement ASSIGN LOCAL32 [reg32]
reg32INEG32 [reg32]
reg32IADD32 [reg32] reg32
reg32IADD32 reg32 [reg32]
reg32ISUB32 [reg32] reg32
reg32ISUB32 reg32 [reg32]
reg32IADD32 [reg32] INEG32 reg32
reg32IADD32 reg32 INEG32 [reg32]
Figure 2.11 狀態 3 的內容
在建造狀態4 時,就來考慮 ISUB32 這個二維的 terminal,因此考慮「ISUB32 reg32 reg32」。能夠和「ISUB32 reg32 reg32」達成完全比對的就是「reg32: ISUB32 reg32 reg32」這條規則,但也如同狀態 3 一般沒有任何規則可以達成部分比對,
此外,因為「reg32: ISUB32 reg32 reg32」是完全比對規則,其左半部的 non-terminal 是reg32,因此又可以根據包覆運算將右半部含有 reg32 這個標誌的規則給涵蓋 進來。Figure 2.12 顯示了狀態 4 所包含的相關資訊。
State 4
(1)full match rule
reg32 [ISUB32 reg32 reg32]
(2)partial match rule (3)closure
statement ASSIGN LOCAL32 [reg32]
reg32INEG32 [reg32]
reg32IADD32 [reg32] reg32
reg32IADD32 reg32 [reg32]
reg32ISUB32 [reg32] reg32
reg32ISUB32 reg32 [reg32]
reg32IADD32 [reg32] INEG32 reg32
reg32IADD32 reg32 INEG32 [reg32]
Figure 2.12 狀態 4 的內容
在建造狀態5 時,則是處理 ASSIGN 這個二維的 terminal,因此考慮「ASSIGN
LOCAL32 reg32」。能夠和「ASSIGN LOCAL32 reg32」達成完全比對的就是「reg32:
ASSIGN LOCAL32 reg32」這條規則,但也如同狀態 3 和狀態 4 一般沒有任何規 則可以達成部分比對,此外,因為「reg32: ASSIGN LOCAL32 reg32」是完全比 對規則,其左半部的non-terminal 是 statement,因此又可以根據包覆運算將右半 部含有statement 這個標誌的規則給涵蓋進來,但並未有這樣的規則存在。Figure 2.13 顯示了狀態 5 所包含的相關資訊。
State 5
(1)full match rule
statement[ASSIGN LOCAL32 reg32]
(2)partial match rule (3)closure
Figure 2.13 狀態 5 的內容
這時候就剩規則6 還沒被處理,所以考慮 IADD32 另外一個子樣式:[IADD32 reg32 INEG32 reg32]。能夠和「IADD32 reg32 INEG32 reg32」達成完全比對的就 是「reg32: IADD32 reg32 INEG32 reg32」這條規則,但也如同狀態 3、狀態 4 和 狀態5 一般沒有任何規則可以達成部分比對,此外,因為「reg32: ASSIGN LOCAL32 reg32」是完全比對規則,其左半部的 non-terminal 是 reg32,因此又可 以根據包覆運算將右半部含有reg32 這個標誌的規則給涵蓋進來。Figure 2.14 顯 示了狀態6 所包含的相關資訊。
State 6
(1)full match rule
reg32[IADD32 reg32 INEG32 reg32]
(2)partial match rule (3)closure
statement ASSIGN LOCAL32 [reg32]
reg32INEG32 [reg32]
reg32IADD32 [reg32] reg32
reg32IADD32 reg32 [reg32]
reg32ISUB32 [reg32] reg32
reg32ISUB32 reg32 [reg32]
reg32IADD32 [reg32] INEG32 reg32
reg32IADD32 reg32 INEG32 [reg32]
Figure 2.14 狀態 6 的內容
在建立好tree automaton 的每個狀態後,就可以開始針對每個 terminal 建立
其狀態轉移表。以下就來說明建立狀態轉移表的過程。