• 沒有找到結果。

建立 tree automaton 的每個狀態

第二章 相關研究

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

statementASSIGN [LOCAL32] reg32

(3)closure

statement ASSIGN LOCAL32 [reg32]

reg32INEG32 [reg32]

reg32IADD32 [reg32] reg32

reg32IADD32 reg32 [reg32]

reg32ISUB32 [reg32] reg32

reg32ISUB32 reg32 [reg32]

reg32IADD32 [reg32] INEG32 reg32

reg32IADD32 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

reg32IADD32 reg32 [INEG32 reg32]

(3)closure

statement ASSIGN LOCAL32 [reg32]

reg32INEG32 [reg32]

reg32IADD32 [reg32] reg32

reg32IADD32 reg32 [reg32]

reg32ISUB32 [reg32] reg32

reg32ISUB32 reg32 [reg32]

reg32IADD32 [reg32] INEG32 reg32

reg32IADD32 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]

reg32INEG32 [reg32]

reg32IADD32 [reg32] reg32

reg32IADD32 reg32 [reg32]

reg32ISUB32 [reg32] reg32

reg32ISUB32 reg32 [reg32]

reg32IADD32 [reg32] INEG32 reg32

reg32IADD32 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]

reg32INEG32 [reg32]

reg32IADD32 [reg32] reg32

reg32IADD32 reg32 [reg32]

reg32ISUB32 [reg32] reg32

reg32ISUB32 reg32 [reg32]

reg32IADD32 [reg32] INEG32 reg32

reg32IADD32 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]

reg32INEG32 [reg32]

reg32IADD32 [reg32] reg32

reg32IADD32 reg32 [reg32]

reg32ISUB32 [reg32] reg32

reg32ISUB32 reg32 [reg32]

reg32IADD32 [reg32] INEG32 reg32

reg32IADD32 reg32 INEG32 [reg32]

Figure 2.14 狀態 6 的內容

在建立好tree automaton 的每個狀態後,就可以開始針對每個 terminal 建立

其狀態轉移表。以下就來說明建立狀態轉移表的過程。

相關文件