Lua Balanced |
|
Balanced 提供了在字符串中匹配分隔的 Lua 代码片段的功能。
主页: https://lua-users.lua.ac.cn/wiki/LuaBalanced(此页面)
例如,此模块可以匹配 Lua 字符串、Lua 注释或 Lua 表达式。它特别适用于源代码过滤器或解析嵌入在其他语言中的 Lua 代码片段。它受到 Damian Conway 的 Text::Balanced [1] 在 Perl 中的启发。此实现的独特之处在于它没有严格地词法分析和解析 Lua 语法。它不需要这样做。它在解析过程中假设 Lua 代码在语法上是正确的(这可以在稍后使用 loadstring
验证)。通过假设这一点,分隔序列的提取得到了显著简化,但仍然可以保持健壮,并且它还支持 Lua 语法的超集。代码完全用 Lua 编写,只有不到 200 行 Lua 代码(与 MetaLua 中使用的 Yueliang 相比,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] 下载。
此模块是新的,可能仍然存在一些错误。