Lua Balanced |
|
Balanced 提供函數,可搭配字串中分隔的 Lua 程式碼片段。首頁: https://lua-users.dev.org.tw/wiki/LuaBalanced (此頁面)
此模組可以搭配 Lua 字串、Lua 註解或 Lua 運算式等。它特別適用於來源濾波或剖析內嵌於其他語言中的 Lua 程式碼片段。它的靈感來自於 Damian Conway 的 Perl 中的 Text::Balanced [1]。此實現的獨特特點在於它並未嚴格依循 Lua 語法進行詞彙分析和剖析。它沒有必要這麼做。它假設剖析期間 Lua 程式碼正確符合語法(可使用 loadstring
在稍後驗證)。藉由這樣的假設,雖然能簡化分隔順序的萃取,卻仍能保有穩健性,且它支援 Lua 語法的超集。這段完全以 Lua 編寫的程式碼,不到 200 行的 Lua 程式碼(可拿來與 MetaLua 中使用的 Yueliang 相較,單是詞彙分析器就需要數百行)。
使用這個模組的計畫: ListComprehensions
local lb = require "luabalanced" -- Extract Lua expression starting at position 4. print(lb.match_expression("if x^2 + x > 5 then print(x) end", 4)) --> x^2 + x > 5 16 -- Extract Lua string starting at (default) position 1. print(lb.match_string([["test\"123" .. "more"]])) --> "test\"123" 12 -- Break Lua code into code types. lb.gsub([[ local x = 1 -- test print("x=", x) ]], function(u, s) print(u .. '[' .. s .. ']') end) --[[output: e[ local x = 1 ] c[-- test ] e[ print(] s["x="] e[, x) ] ]]
可從 [github] 下載。
此模組很新,可能仍然有些 bug。