Lua Balanced

lua-users home
wiki

LuaBalanced 提供用于匹配字符串中 Lua 代码分隔符的函数。

主页: https://lua-users.lua.ac.cn/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] 下载。

作者

DavidManura

状态

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


RecentChanges · preferences
编辑 · 历史
最后编辑于 2010 年 9 月 11 日,格林威治标准时间 12:11 (差异)