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

StackOverflow https://stackoverflow.com/questions/2370153

Вопрос

Мне нужен инструмент для анализа табличных выражений 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, поэтому я написал небольшую библиотеку:

https://github.com/mutantbob/jluadata

Непроверенный код.И я просто следую по ссылке Sbk здесь, так что я вообще не заслуживаю уважения.

родовое слово

Могу ли я указать, что Lua не поддерживает регулярные выражения, а только заменяет текст по шаблону.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top