Re[7]: Выбор
От: alex_public  
Дата: 02.12.16 16:59
Оценка: :)
Здравствуйте, vdimas, Вы писали:

_>>Ну т.е. если перевести с твоего языка на русский, то будет: "не могу". )))

V>

V>- Можешь предложить более близкий аналог Spirit'a из мира C? )

V>Тут сначала упал со стула, затем поднялся и внятно тебе ответил:
V>

V>Слава богу, редко кому в голову приходила идея реализовывать комбинаторные парсеры на С. Комбинаторные парсеры — это изобретение далёких от программирования людей, которые пользовали в ежедневной практике функциональные языки. Они не знали теорию грамматик и писали парсеры "в лоб", получая естественные тормоза и жор памяти.

V>Похоже, ты не понял ответа моего и так не слишком завуалированного ответа, поэтому, перевожу на совсем прямую речь:
V>- комбинаторные парсеры предназначены для случайных в отрасли людей;
V>- случайные в отрасли люди редко пишут на С (как минимум редко пишут генераторы парсеров на С, ы-ы-ы).
V>Тем не менее, реализаций парсеров семейства PEG на С существует более одной. Сие означает, что я-то как раз "могу" (могу привести примеры), но считаю их эээ... малость "неприличными" для приличного общества. Потому что упоминание PEG всуе, это как выйти на Красную площадь и ругаться матом. Судя по твоему ответу, ты не в курсе всех этих тонкостей, но опять и снова поторопился выступить в роли тролля. )) ИМХО, тролль должен хорошо разбираться в предмете, иначе это не тролль, а так, неудачная мимикрия из разряда "обалажался — притворись троллем".

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

Показанные тобой примеры парсеров при всей алгоритмической похожести не имеют ничего общего со Spirit'ом с точки зрения архитектуры. Они все представляю собой просто обычный парсер с кастомизируемым форматом. Он однажды собирается в приложение и потом его поведение настраивается внешними рантайм данными (строкой с грамматикой). В противоположность этому Spirit (так же как и Bison+Flex) генерирует под каждую грамматику разный код, который потом активно оптимизируется (включая глубокий инлайн) компилятором. Именно этим и обусловлена высокая эффективность всех парсеров на базе кодогенераторов. А уникальность Spirit'а заключается только в том, что это EDSL генератор, а не внешний.

Да, кстати, могу тебе сделать подсказку для дальнейших попыток найти более адекватный аналог на C (и тем самым показать что твоя придирка не была глупой). По идее единственным способом написать аналог Spirit'а на C будет построение некого страшного монстра на макросах. Сомневаюсь, что кто-то подобное делал, но если нет такого решения, то скорее всего нет и никакого другого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.