Мне нужен инструмент для анализа таблиц Lua, желательно в Ruby или Java
Вопрос
Мне нужен инструмент для анализа табличных выражений Lua. Если все остальное не поможет, я в конечном итоге просто закодирую небольшой модуль Lua для преобразования таблиц в XML, но на данный момент я заинтересован в библиотеке Ruby, делающей это, но в противном случае я бы принял инструмент на любом языке, при условии, что я можете посмотреть его источник.
Вот пример фрагмента (это результат надстройки WoW):
родовое словоОсновная идея - вложенные ассоциативные массивы. Любая справка или указатель будут рассмотрены, любая идея приветствуется.
EDIT #1
В связи с разногласиями позвольте пояснить, что я пробовал. Я дополнил цепочку замены строки / регулярного выражения, предоставленную одним из участников, вот так:
родовое словоЯ (1) добавил удаление комментариев Lua, (2) заменил один из заменителей регулярных выражений: когда у вас есть последний элемент в объекте / массиве, он все еще имеет запятую после него, так что это должно быть закрыто, а запятая удалена правильно.
Вы заметили двойные открывающиеся фигурные скобки ? JSON не любит анонимные объекты. Выглядит это так:
родовое словоВ основном на корневом уровне у нас фактически есть список / массив похожих объектов, у обоих есть разделы «aaa» и «qqq», чтобы следовать примеру. Однако в Lua это явно разрешено, а в JSON - нет. Поскольку открывающие фигурные скобки обрабатываются как «начало объекта», но у этого объекта нет имени.
Я попытался определить этот случай с помощью регулярного выражения и заменить фигурные скобки парами «[]». Хотя получившееся регулярное выражение работало, проблема была той же: ОК, вместо этого мы определяем массив похожих объектов, но объявление массива по-прежнему безымянно.
Возможным решением было бы вместо обнаружения и замены этих фигурных скобок на [] окрестить объекты индексами, например: "0" = { "aaa" = {...} }, "1" = { "aaa" = {... } }
и т. д. Этот (надеюсь, окончательный) обходной путь, вероятно, заставит его работать ... Сообщу снова . ;)
Решение
Пропуск первой строки, а затем специальное преобразование в JSON.
родовое словоДругие советы
Я, наверное, заявляю очевидное, но Lua определенно может анализировать таблицы Lua.И вы можете "встроить" Lua практически в любой основной язык , включая Java и Ruby (прокрутите внизссылка для привязок Java и Ruby).Под встраиванием я подразумеваю синтаксический анализ исходных файлов, вызов функций Lua и изучение таблиц, возможно, даже вызов функций, написанных на вашем основном языке, из Lua.Возможно, эти библиотеки привязки сложнее, чем экспорт ваших таблиц в XML / JSON, но хотя бы на них стоит взглянуть
Изменить: уровень 70?Это так в последнее десятилетие;)
Написать программу Lua, выводящую таблицы в XML, просто, но это зависит от того, как вы хотите отформатировать XML.См. Также LuaXML , в котором есть xml.save (но написано на C) и этот вопрос .
Вероятно, в этом случае будет проще использовать JSON , чем xml.
Преобразование из таблиц lua почти 1 к 1 (измените= на: и удалите [и] из ключей).Это JSON-эквивалент вашего примера:
родовое слово...
Кроме того, в Rails есть встроенный анализатор JSON (через JSON :: parse).
Чтобы прочитать его из приложения Ruby, вам нужно будет сделать что-то похожее на это:
родовое словоТогда информация о плеере будет доступна по адресу:
родовое словоЕсть также парсер java JSON, но у меня нет опыта работы с ним.
Попробуйте этот код
родовое словоВы упомянули, что можете использовать только Java, Ruby или PHP для анализа этого.Можно использовать такой инструмент, как ANTLR, чтобы сгенерировать для вас небольшой анализатор.
Грамматика ANTLR:
родовое словогенерирует синтаксический анализатор, который может принимать следующие данные:
родовое словои преобразовать его в:
альтернативный текст http://img59.imageshack.us/img59/7112/treef.png
(щелкните здесь , чтобы увидеть полное разрешение изображения)
Написание XML из этой древовидной структуры - детская игра.
Но, как я уже сказал, таблицы Lua могут сильно отличаться от грамматики, которую я опубликовал выше: строки могут выглядеть так:
родовое слово, а ключи и значения могут состоять из выражений.Но если деревья всегда выглядят так, как вы их разместили, это может быть для вас вариантом.
Удачи!
Мне нужно было сделать это на Java, поэтому я написал небольшую библиотеку:
Непроверенный код.И я просто следую по ссылке Sbk здесь, так что я вообще не заслуживаю уважения.
родовое словоМогу ли я указать, что Lua не поддерживает регулярные выражения, а только заменяет текст по шаблону.