LINUX.ORG.RU

Посоветуйте парсер

 


0

2

Есть текстовый файл вида

метка

оператор операнд операнд (...) значение

[повторить N раз]

метка

нужно его распарсить. Посоветуйте статью где написано, как это добрые люди делают или готовую библиотеку.

★★★★★

А не проще написать свой? Читаешь строки между метками и сплитишь их по пробелу.

IvS ()

Ничего не понял. Не знаю таких парсеров, но думаю, на коленке пишется быстро.

Можно поподробнее - метка - это просто строка особого вида? Оператор и операнд понятно, наверное, в качестве оператора +,-, а операнды - это, например, числа (но необязательно).

А вот «значение» и «повторить N раз» - это для чего? Или операндами могут являться не только числа, но и переменные?..

BattleCoder ★★★★★ ()
Последнее исправление: BattleCoder (всего исправлений: 1)

Может пример покажешь, из описания не совсем понятно.

В простых случаях достаточно работы со строками. Читаешь файл по строкам, разбиваешь по разделителям (по пробелам например) в массив и анализируешь, что там получилось. Регулярные выражения тоже помогают зачастую.

В сложных обычно используют генераторы кода вида antlr. Описывается синтаксис разбираемого языка на специальном языке, потом из этого синтаксиса генерируется код на Java (или другом языке), который парсит.

В совсем сложных пишутся свои парсеры (или генераторы парсеров).

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 1)

ANTLR, мануалов по нему достаточно.

encyrtid ★★★★★ ()
Ответ на: комментарий от sdio

Понять понять какой оператор и какие операнды, позвать соответствующую функцию в коде.

Shaman007 ★★★★★ ()
Ответ на: комментарий от IvS

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

Shaman007 ★★★★★ ()
Ответ на: комментарий от Shaman007

GPSS

Ох щи. Делали по нему лабы, и он мне вынес мозг своим синтаксисом, особенно в отношении объявления переменных.

kravich ★★★★ ()
Ответ на: комментарий от kravich

Да он говно, собственно. Но я (если я тогда все правильно спроектировал) могу присобачить любой фронт-энд к движку симуляции (там типа переводится модель из GPSS во внутреннее представление, с которым потом уже идет симуляция). Для этого хотелось бы нормально присобачить GPSS, а не так как я тогда это сделал.

Shaman007 ★★★★★ ()

human readable - шутка

вообще так: метка === '<tag>', далее уже проще...

swwwfactory ★★ ()
Ответ на: комментарий от pylin

Задачи, которые в дипломе решались уже неактуальны лет 8. Основное в дипломе было все-таки в самом имитаторе, который бы мог жевать модели неограниченной сложность с неограниченным количеством транзактов за линейное время. Планировалось потом этот имитатор как-то использовать где-то на кафедре, но это дела давно минувших дней. Хочется все-таки чтоб код (хоть они и говнокод) не пропал, терпеть не могу проекты «для мусорной корзины».

Shaman007 ★★★★★ ()
Ответ на: комментарий от Shaman007

терпеть не могу проекты «для мусорной корзины».

К сожалению, таковых 99% так называемых «дипломов». Чувствую, мой тоже далеко не уйдёт. :(

BattleCoder ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.