Preciso de uma ferramenta para analisar tabelas Lua, preferencialmente em Ruby ou Java

Eu preciso de uma ferramenta para analisar as expressões da tabela Lua. Se tudo mais falhar, acabarei codificando apenas um pequeno módulo Lua para converter tabelas em XML, mas, por enquanto, estou interessado em uma biblioteca Ruby fazer isso, mas, na falta disso, aceitaria a ferramenta em qualquer idioma, desde que eu pode olhar para a sua fonte.

Aqui está um exemplo de trecho (é uma saída do complemento 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,
        },
...

A idéia básica é matrizes associativas aninhadas. Qualquer ajuda ou ponteiro será examinada, qualquer idéia será apreciada.

EDIT #1

Devido às disputas, deixe-me esclarecer o que tentei. Eu complementei a cadeia de substituição de string / regex fornecida por um dos participantes, da seguinte forma:

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

Eu (1) adicionei a remoção dos comentários de Lua, (2) substituí um dos substituidores de regex: quando você tem o último elemento em um objeto / matriz, ele ainda possui uma vírgula depois, de modo que deve ser coberto e a vírgula removida corretamente .

Você percebe ocintas de abertura dupla? JSON não gosta de ter objetos anônimos. Parece que:

"xxx" = {
  {
    ["aaa"} = {
      ["bbb"] = {
        "ccc" = 7
        "ddd" = "a string"
        "eee" = "a date/time pattern"
      }
    },
    ["qqq"} = {
      "hm" = "something"
    }
  },
  {
    ["aaa"] = {
    -- ...
    },
    ["qqq"] = {
    -- ...
    }
  }
}

Basicamente, no nível raiz, na verdade, temos uma lista / matriz de objetos semelhantes, ambos com as seções "aaa" e "qqq", para seguir o exemplo. No entanto, em Lua isso é obviamente permitido, enquanto em JSON não é. Como as chaves de abertura são tratadas como "iniciar um objeto", mas esse objeto não tem um nome.

Tentei detectar esse caso com regex e substituir chaves com pares "[]". Enquanto o regex resultante funcionava, o problema era o mesmo: OK, em vez disso, definimos uma matriz de objetos semelhantes, mas a declaração da matriz ainda não tem nome.

Uma solução possível seria, em vez de detectar e substituir esses aparelhos por [], para batizar os objetos com índices, como:"0" = { "aaa" = {...} }, "1" = { "aaa" = {... } }, etc. Essa (provavelmente final) solução alternativa provavelmente fará com que ela funcione ... Irá relatar novamente. ;)

questionAnswers(9)

yourAnswerToTheQuestion