OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 24 Январь, 2019 05:20

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 21 Январь, 2012 09:26 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 525
Откуда: Москва
Второй пример ужасен, но не ЦД, а тем, что представляет собой смесь из лексического и синтаксического разбора. "Evolvability" у таких решений минимальная.

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


Последний раз редактировалось Илья Ермаков Понедельник, 23 Январь, 2012 11:40, всего редактировалось 2 раз(а).
разделение темы


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пара примеров на цикл Дейкстры
СообщениеДобавлено: Суббота, 21 Январь, 2012 13:18 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9072
Откуда: Россия, Орёл
По поводу второго.
Вы делаете оценки, не зная контекста.

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

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


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

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 525
Откуда: Москва
Мне многократно приходилось писать "наколеночные" решения для разбора каких-нибудь данных. Почти всегда возникал соблазн схалтурить, не делать отдельный лексический разбор. В 100% случаев это приводило к тому, что в итоге получалась какая-то дрянь. Поэтому я стал придерживаться правила всегда выделять лексический анализатор. Ну не должен парсер заниматься пробелами. Или, скажем, используется рекурсивный разбор, а файл преждевременно кончился.
Вот такие личные предпочтения.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 23 Январь, 2012 11:48 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9072
Откуда: Россия, Орёл
Нет, ну, вообще-то, можно смотреть на сами эти функции "бегания между тегами" как на лексический анализатор.

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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9072
Откуда: Россия, Орёл
По поводу Parsec...
Я стал экспериментировать со "смешением уровней" когда-то в своём Рефале-0 и его трансляторе. Это мне Parsec напоминает некоторыми моментами.
http://oberoncore.ru/bbcc/subs/rocot/start (PDF со статьёй там есть в архиве).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB