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/ |