OberonCore
https://forum.oberoncore.ru/

Ad-hoc-разбор без разделения уровней?
https://forum.oberoncore.ru/viewtopic.php?f=61&t=3778
Страница 1 из 1

Автор:  Peter Almazov [ Суббота, 21 Январь, 2012 09:26 ]
Заголовок сообщения:  Ad-hoc-разбор без разделения уровней?

Второй пример ужасен, но не ЦД, а тем, что представляет собой смесь из лексического и синтаксического разбора. "Evolvability" у таких решений минимальная.

(модератор) выделено из viewtopic.php?f=82&t=3770

Автор:  Илья Ермаков [ Суббота, 21 Январь, 2012 13:18 ]
Заголовок сообщения:  Re: Пара примеров на цикл Дейкстры

По поводу второго.
Вы делаете оценки, не зная контекста.

Эта штука - часть HTTP-робота определённого назначения. Точнее, часть библиотеки для создания нескольких таких роботов.
Во-первых, там не правильный XML, а произвольный HTML. Применение XML-парсеров отпадает хотя бы поэтому (да и без этого - использовать что-то типа DOM в нагруженных приложениях - ужасная нагрузка по производительности, в частности, из-за динамического мусора; ad-hoc разбор здесь рулит). Т.е. максимум, что возможно - написание какого-то HTML-сканера и уже работа над ним. Ввиду "порнографичности" неправильных HTML-ей я не вижу преимуществ от такого сканера по сравнению с непосредственной "смесью" синтаксического и лексического разбора.
В итоге, от библиотеки требуется: 1) возможность лёгко написать сценарии выковыривания нужных мест из неправильных HTML-ей; 2) быстродействие. Эти задачи решаются на 5 с минимальным набором вот таких функций.

Теперь переоцените решение в данном контексте, если хотите.

Автор:  Peter Almazov [ Суббота, 21 Январь, 2012 14:44 ]
Заголовок сообщения:  Re: Пара примеров на цикл Дейкстры

Мне многократно приходилось писать "наколеночные" решения для разбора каких-нибудь данных. Почти всегда возникал соблазн схалтурить, не делать отдельный лексический разбор. В 100% случаев это приводило к тому, что в итоге получалась какая-то дрянь. Поэтому я стал придерживаться правила всегда выделять лексический анализатор. Ну не должен парсер заниматься пробелами. Или, скажем, используется рекурсивный разбор, а файл преждевременно кончился.
Вот такие личные предпочтения.

Мне в этом вопросе непонятно вот что. В примерах использования Parsec на Haskell, похоже спокойно обходятся без лексического анализатора и хорошо живут. К сожалению, не было ресурсов углубиться в этот вопрос и разобраться, в чем там дело.

Автор:  Илья Ермаков [ Понедельник, 23 Январь, 2012 11:48 ]
Заголовок сообщения:  Re: Ad-hoc-разбор без разделения уровней?

Нет, ну, вообще-то, можно смотреть на сами эти функции "бегания между тегами" как на лексический анализатор.

Синтаксический уровень - это уже извлечение информации из страницы, и сценарии его пишутся в виде:
IMPORT Tp := TagsParser;
Tp.SkipPair(rd, 'div'); Tp.SkipPair(rd, 'div'); Tp.FindTag(rd, 'div'); Tp.FindTag(rd, 'div');
Tp.SkipTag(rd);
beg := rd.Pos();
Tp.FindCloseTag(rd, 'div');
end := rd.Pos();
- и [beg, end) - интервал искомого блока.
Приведённый сценарий - это эквивалент XPath:
/html/body/div[3]/div[1]
Сначала предполагалось ввести подмножество XPath, потом поняли, что нафиг надо, если можно обойтись такой библиотечкой и сценариями с этими командами.
Может, обёрточка ещё какая-то появится. Но библиотечные решения мне стали нравится однозначно больше, чем клепание каких-то DSL. Многословность - не проблема в большинстве случаев... Зато меняй библиотеку как хочешь. Это не DSL скорректировать.

Автор:  Илья Ермаков [ Понедельник, 23 Январь, 2012 11:51 ]
Заголовок сообщения:  Re: Ad-hoc-разбор без разделения уровней?

По поводу Parsec...
Я стал экспериментировать со "смешением уровней" когда-то в своём Рефале-0 и его трансляторе. Это мне Parsec напоминает некоторыми моментами.
http://oberoncore.ru/bbcc/subs/rocot/start (PDF со статьёй там есть в архиве).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/