我需要一个工具来解析Lua表,最好用Ruby或Java

dim*_*rvp 4 ruby java lua parsing lua-table

我需要一个工具来解析Lua表表达式.如果所有其他方法都失败了,我最终只会编写一个小的Lua模块来将表转换为XML,但目前我对Ruby库感兴趣,但是如果不这样做,我会接受任何语言的工具,前提是我可以看看它的来源.

这是一个示例代码段(它是一个WoW插件输出):

CT_RaidTracker_RaidLog = {
{
    ["PlayerInfos"] = {
        ["Nyim"] = {
            ["race"] = "Orc",
            ["guild"] = "Excubitores Noctae",
            ["sex"] = 2,
            ["class"] = "HUNTER",
            ["level"] = 70,
        },
        ["Zyrn"] = {
            ["race"] = "BloodElf",
            ["guild"] = "Excubitores Noctae",
            ["sex"] = 2,
            ["class"] = "WARLOCK",
            ["level"] = 70,
        },
...
Run Code Online (Sandbox Code Playgroud)

基本思想是嵌套关联数组.任何帮助或指针都将被检查,任何想法都值得赞赏.

EDIT #1

由于争议,让我澄清我尝试了什么.我补充了其中一个参与者提供的字符串/正则表达式替换链,如下所示:

str.gsub(/--.+$/, "").gsub("=", ":").gsub(/[\[\]]/,"").gsub('" :','":').gsub(/,\s*\n(\s*)}/, "\n\\1}")
Run Code Online (Sandbox Code Playgroud)

我(1)添加了Lua注释的删除,(2)替换了一个正则表达式替换器:当你有一个对象/数组中的最后一个元素时,它后面仍然有一个逗号,所以必须覆盖并且正确删除逗号.

你注意到双开口花括号吗?JSON不喜欢拥有匿名对象.它看起来像这样:

"xxx" = {
  {
    ["aaa"} = {
      ["bbb"] = {
        "ccc" = 7
        "ddd" = "a string"
        "eee" = "a date/time pattern"
      }
    },
    ["qqq"} = {
      "hm" = "something"
    }
  },
  {
    ["aaa"] = {
    -- ...
    },
    ["qqq"] = {
    -- ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

基本上在根级别上,我们实际上有一个类似对象的列表/数组,两者都有"aaa"和"qqq"部分,以跟随这个例子.然而,在Lua中显然是允许的,而在JSON中它不是.因为开口花括号被视为"启动对象",但该对象没有名称.

我试图用正则表达式检测这种情况,并用"[]"对替换花括号.虽然生成的正则表达式工作,但问题是相同的:好的,我们定义了一个类似对象的数组,但数组的声明仍然是无名的.

一个可能的解决方案是使用[]来检测和替换那些大括号,而不是用索引命名对象,例如:"0" = { "aaa" = {...} }, "1" = { "aaa" = {... } }等等.(希望是最终的)解决方法可能会使它工作......将再次报告.;)

sbk*_*sbk 5

我可能会说明显而已,但Lua当然可以解析Lua表.你可以将Lua"嵌入"几乎任何主流语言,包括Java和Ruby(向下滚动Java和Ruby绑定的链接).通过嵌入,我的意思是解析源文件,调用Lua函数和探索表,甚至可以调用Lua用宿主语言编写的函数.这些绑定库可能比将表导出到XML/JSON更有用,但至少值得关注它们.

编辑:70级?这是过去十年;)