Мне нужен инструмент для разбора таблиц Lua, желательно в Ruby или Java

Мне нужен инструмент для разбора табличных выражений 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,
        },
...

Основная идея - вложенные ассоциативные массивы. Любая помощь или указатель будут рассмотрены, любая идея приветствуется.

EDIT #1

Из-за споров, позвольте мне уточнить, что я пытался. Я дополнил цепочку замены строк / регулярных выражений, предоставленную одним из участников, примерно так:

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

Я (1) добавил удаление комментариев Lua, (2) заменил один из заменителей регулярных выражений: когда у вас есть последний элемент в объекте / массиве, после него все еще стоит запятая, так что его необходимо закрыть и правильно удалить запятую ,

Вы замечаетефигурные скобки с двойным открытием? JSON не нравится иметь анонимные объекты. Это выглядит так:

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

В основном на корневом уровне у нас фактически есть список / массив похожих объектов, оба из которых имеют разделы "aaa" и "qqq", чтобы следовать примеру. Однако в Lua это явно разрешено, а в JSON - нет. Потому что открывающиеся фигурные скобки обрабатываются как «начать объект», но у этого объекта нет имени.

Я попытался обнаружить этот случай с помощью регулярных выражений и заменить фигурные скобки на пары «[]». В то время как полученное регулярное выражение работало, проблема была та же: хорошо, мы вместо этого определяем массив похожих объектов, но объявление массива все еще безымянно.

Возможное решение было бы вместо обнаружения и замены этих фигурных скобок на [], чтобы окрестить объекты с индексами, например:"0" = { "aaa" = {...} }, "1" = { "aaa" = {... } }и т. д. Этот (возможно, окончательный) обходной путь, вероятно, заставит его работать ... Отчитается снова. ;)

Ответы на вопрос(9)

Ваш ответ на вопрос