ByteMap 是一個 key-value => cascaded 的分析器,bytemap 本身不能做什麼,其中一個應用就是用來編程序源碼吧。畢竟這是我寫簡繁轉換器洐生出來的東西,我能想到的大概就是可以用在 AI 的決策方案上?
如何編寫 bytemap compiler
跟據不同的 Compiler class ,ByteMap 可以輸出不同的格式,如 xml、yaml、css,甚至可以像我一樣直接輸出 C++ 源碼。
例:SimpleExample.php ( $level = 0 )參考本文上圖,輪出:Head Branch a
Head Branch c a
value: 10
Closed
Branch a
Head Branch b
value: 4
Closed
Branch a
value: 3
Closed
wholeByte value: 2
Closed
wholeByte value: 1
Closed
如果截掉「new ByteMap( function() {} )」裹面的「function() {}」的話,會輸出以下的 log,可以窺見 ByteMap 是如何運作的:
Sorting sequence...done
Level: 0
Group: START 0, END 5 (5)
Matching Index: 0
| (61)
| (61) 63 61
| (61) 61
| (61) 61 62
| (61) 61 61
Index: 1 Len: 1
Whole byte-sequence at level: 0
Level: 1
Group: START 1, END 2 (1)
Matching Index: 1
| 61 (63) 61
Index: 3 Len: 3
Group: START 2, END 5 (3)
Matching Index: 1
| 61 (61)
| 61 (61) 62
| 61 (61) 61
Index: 2 Len: 2
Whole byte-sequence at level: 1
Level: 2
Group: START 3, END 4 (1)
Matching Index: 2
| 61 61 (62)
Index: 3 Len: 3
Group: START 4, END 5 (1)
Matching Index: 2
| 61 61 (61)
Index: 3 Len: 3
interface ByteMapCompiler
interface ByteMapCompiler {
function branchOpen($level, \Branch $b);
function branchValue($level, $isHead, $byteSequence, $wholeByte, $indexByte);
function branchClose($level, $isHead);
}
首先我們得先做寫一個 Complier 讓 bytemap 使用,Compiler 就只有三個步䮕,分別是 Open / Value / Close
branchOpen( $level, \Branch $b )
Branch $b - 上例 branchOpen 於 SimpleExample ,這個 function 會跟據 Branch $b 的屬性「$b->isHead」而分別輸出「Head Branch a」、「Head branch c a」和「Branch a」。
int $level - 就是當前所在層級
Boolean $wholeByte - 定義 $byteSequence 是不是 whole byte-sequence。分支包含子分支,而分支本身也有一個值。也就是說「a」本身有一個值,而「a」有很多子分支(aa, aaa⋯),那麼「a」就是一個「whole byte-sequence」
$isHead - 是不是字元組的首個支點
branchValue( $level, $isHead, $byteSequence, $wholeByte, $indexByte )
$level - 當前層級
$byteSequence - 當前的 byte sequence ( a, aa, aaa ... )
$wholeByte -
$indexByte - byte squence 的 index,簡單來說就是上面的 log 裹面,括住的數字的位置。
branchClose( $level, $isHead )
同上
斟酌 鵬兄
Tue Oct 20 2015 14:38:17 GMT+0000 (Coordinated Universal Time)
Last modified: Fri Mar 11 2016 14:59:27 GMT+0000 (Coordinated Universal Time)