Lua Balanced

lua-users home
wiki

LuaBalanced 提供了在字符串中匹配分隔的 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] 下载。

作者

DavidManura

状态

此模块是新的,可能仍然存在一些错误。


最近更改 · 偏好设置
编辑 · 历史记录
上次编辑于 2010 年 9 月 11 日下午 6:11 GMT (差异)