Lua 令牌剖析

lua-users home
wiki

Lua 的語法可透過中斷令牌剖析模組和修改輸出進行變更。LHF 提供了一個實驗性質的函式庫 ltokens,(「直接基於 Lua 詞法分析器分析 Lua 程式碼的函式庫」),網址為 [1]。以下頁面包含此程式碼的一些使用範例,有助於開發這個概念。這些問題可能有很多種不同的解決方案,但是有些使用範例對於確保實用應用程式問題的解決方案為可行的方法是必要的。

由於完整的令牌剖析概念在目前為止是很實驗性質的,因此在此並未提供任何解決方案。如果您想提供這些問題的解決方案,請建立您自己的頁面,並在此提供一個連結。請隨時將您自己的使用範例新增到此清單中。

列舉

列舉對於將值分組很有用。列舉可在 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
注意事項

C 函式呼叫

C 函式可向 Lua 註冊(int MyLuaFunc(lua_State*))。此註冊涉及傳遞函式指標和字串函式名稱至 Lua(這會重複使用該字串)。若要呼叫函式,您可以使用函式字串名稱執行全域性查詢,然後呼叫傳回的物件。較具說明性的資料請參閱:[2]

問題

概念:在 Lua 編譯階段,一組導出的函式(十分類似 C 中的連結函式庫)可以傳遞至剖析模組。當我們攔截對命名函式的呼叫時,便可以插入函式指標或函式列舉,以便在執行階段呼叫函式。

注意事項

switch 敘述

從某種程度上來說,Lua 並不需要 SwitchStatement,但它可能是對 ltokens 所進行的有趣測試。例如(歡迎變更語法)

switch (value) do
    case 1 do print('one') end
    case 2 do print('two') end
    default do print('default') end
end

Try-except 敘述

Lua 支援異常,但其介面功能性強,而且層級較低,導致其不易使用。或許在此處進行 tokens 的微調會有所幫助。

類型檢查

呼叫 C 繫結或其他 Lua 函數時,通常物件必須為特定類型。Lua 不支援類型檢查,但對於此類情況而言,類型檢查會很有幫助。例如,假設我們繫結一個 C 函數,

void foo(int arg1, const char* arg2);
然後透過 Lua 來呼叫這個函數,我們只能在執行期間得知呼叫引數類型是否錯誤。最好能夠新增選用引數類型,如此一來,若能辨識繫結函數,就能檢查其參數類型。

注意事項

另請參閱


RecentChanges · 偏好設定
編輯 · 歷程記錄
最近編輯時間為 2009 年 3 月 14 日上午 12:53 (GMT) (diff)