Lua 令牌剖析 |
|
由於完整的令牌剖析概念在目前為止是很實驗性質的,因此在此並未提供任何解決方案。如果您想提供這些問題的解決方案,請建立您自己的頁面,並在此提供一個連結。請隨時將您自己的使用範例新增到此清單中。
列舉對於將值分組很有用。列舉可在 Lua 中透過下列方式進行,效率很高
local SHAPE_SQUARE, SHAPE_CIRCLE, SHAPE_STAR = 0, 1, 2 -- etc. foo(SHAPE_STAR) -- usage
問題
概念:僅存在於編譯階段的列舉關鍵字和值資料表。
enum ShapeType { SQUARE, CIRCLE, STAR, NUM_TYPES } print(ShapeType.CIRCLE) -- usage
ShapeType.LINE
),應出現編譯時期警告。
C 函式可向 Lua 註冊(int MyLuaFunc(lua_State*)
)。此註冊涉及傳遞函式指標和字串函式名稱至 Lua(這會重複使用該字串)。若要呼叫函式,您可以使用函式字串名稱執行全域性查詢,然後呼叫傳回的物件。較具說明性的資料請參閱:[2]。
問題
概念:在 Lua 編譯階段,一組導出的函式(十分類似 C 中的連結函式庫)可以傳遞至剖析模組。當我們攔截對命名函式的呼叫時,便可以插入函式指標或函式列舉,以便在執行階段呼叫函式。
注意事項
從某種程度上來說,Lua 並不需要 SwitchStatement,但它可能是對 ltokens 所進行的有趣測試。例如(歡迎變更語法)
switch (value) do case 1 do print('one') end case 2 do print('two') end default do print('default') end end
Lua 支援異常,但其介面功能性強,而且層級較低,導致其不易使用。或許在此處進行 tokens 的微調會有所幫助。
呼叫 C 繫結或其他 Lua 函數時,通常物件必須為特定類型。Lua 不支援類型檢查,但對於此類情況而言,類型檢查會很有幫助。例如,假設我們繫結一個 C 函數,
void foo(int arg1, const char* arg2);
注意事項