URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 87729
[ Назад ]

Исходное сообщение
"Новая версия Bison 2.7, системы для написания синтаксических..."

Отправлено opennews , 13-Дек-12 10:04 
Выпущена (http://permalink.gmane.org/gmane.org.fsf.announce/1874) новая версия пакета для написания синтаксических (yacc (http://ru.wikipedia.org/wiki/Yacc)) анализаторов - Bison 2.7 (http://www.gnu.org/software/bison/bison.html). На основании заданных правил грамматики в специальной нотации, Bison позволяет сгенерировать готовый парсер на языке Си.


В новой версии:


-  Расширены средства диагностики;
-  Изменён формат сообщений об ошибках;
-  Добавлена экспериментальная поддержка обработки исключений;
-  Улучшено графическое представление состояния, выводимого с использованием DOT и XSLT;
-  Добавлена новая %define-переменная api.location.type;
-  С опции "%language" снят гриф экспериментальной возможности.

URL: http://permalink.gmane.org/gmane.org.fsf.announce/1874
Новость: http://www.opennet.me/opennews/art.shtml?num=35585


Содержание

Сообщения в этом обсуждении
"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 10:04 
> Добавлена экспериментальная поддержка обработки исключений

Да неужели! Дожили. В XXI веке-то, наифундаментальнейшая утилита научилась генерить код с поддержкой исключений. Когда я в своё время разбирался с flex/bison и увидел код который они генерят... с глобальными переменными, malloc без проверки ошибок и т.д., не говоря уже о exception-safety, сказать что я был в шоке - ничего не сказать. На них просто нельзя написать парсер, который на ошибку внутри парсинга будет делать что-то иное, нежели завершение всего процесса, потому уж утечки памяти там будут гарантированно. И ЕМНИП нельзя написать парсер, завернуть его в класс, и использовать несколько экземпляров. Из-за глобальных переменных. П**ц их 80-х, по-другому и не скажешь.

К слову, вменяемой альтернативы я так и не нашёл и всегда писал парсеры руками. А нужно всего-лишь интегрированное (lexer+parser) решение, генерящее вменяемый код. В идеале, с поддержкой нескольких языков. Ближе всего к этому ragel, но парсера там, к сожалению, нет. Либо как лексер, либо для регулярок.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Andrey Mitrofanov , 13-Дек-12 10:26 
> вменяемой альтернативы я так и не нашёл и всегда писал парсеры руками.
> А нужно всего-лишь

Авторы бизона тоже не нашли! Может вам объединить усилия?


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Aesthetus Animus , 13-Дек-12 10:33 
> А нужно всего-лишь интегрированное (lexer+parser) решение, генерящее вменяемый код. В идеале, с поддержкой нескольких языков

Попробуйте antlr.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 10:51 
Совершенно не хочется зависеть только ради генератора парсеров от жавы (как и mono, это к совету nemerle.peg). Возможно после этой версии всё-таки можно будет юзать bison, но вообще когда я искал нормальный парсер, наткнулся на страницу где их было чуть ли не полсотни - ничего вменяемого я там тогда не нашёл, но меня не оставляет чувство что я мог в этом разнообразии что-то пропустить. Кажись, lemon выглядел вменяемо, но он емнип не был интегрированным.

"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 11:17 
>Совершенно не хочется зависеть только ради генератора парсеров от жавы

Аноним, ты не понимаешь ее силы, переходи на темную сторону.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 11:19 
> Аноним, ты не понимаешь ее силы, переходи на темную сторону.

Спасибо, я привык использовать железо под нужды решаемой задачи, а не языка.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 12:44 
Да, когда в каждом апдейте чинят по хренадцать уязвимостей - это сила...

"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 19:54 
Это проблемы пользователей и бородатых админов обновлятся, а не разработчиков.

"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено BSA , 13-Дек-12 11:12 
Попробуй boost::spirit

"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 11:18 
Пробовал, это леденящий душу п**ц. Ещё раз: нужна поддержка нескольких языков и отсутствие привязки к кускам гoвна (java, mono, boost).

"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено dq0s4y71 , 13-Дек-12 13:35 
> нужна поддержка нескольких языков

Это как?


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 12:45 
> Попробуй boost::spirit

Boost - монстрятина.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Crazy Alex , 13-Дек-12 15:31 
Буст - штука хорошая, но Spirit - странный монстр, конечно

"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено dq0s4y71 , 13-Дек-12 12:20 
> Да неужели! Дожили. В XXI веке-то, наифундаментальнейшая утилита научилась генерить код с поддержкой исключений.

Может вы не в курсе, но bison генерит исходник на С, а не на С++, если вы видите между ними разницу...

> Когда я в своё время разбирался с flex/bison и увидел код который они генерят... с глобальными переменными

Сгенерите реентерабильный (pure) парсер и глобальные переменные исчезнут, раз уж вы их так не любите. А вообще, они там по делу. Во-первых, они необходимы для взаимодействия с flex. Во-вторых, вы через них можете получить кое-какую информацию после вызова yyparse(), например, общее количество ошибок разбора и др. Ну и в третьих, для нереентнрабильных парсеров их глобальность никакого значения не имеет - они используются только во время вызова функции yyparse() и никогда более.

> malloc без проверки ошибок

Это в какой версии? Вот я сейчас смотрю парсер от 1.25, malloc() используется 1 раз:

      msg = (char *) malloc(size + 15);
      if (msg != 0)
        {

Теперь смотрю 2.4.2, там по умолчанию malloc() вообще не используется.

> На них просто нельзя написать парсер, который на ошибку внутри парсинга будет делать что-то иное, нежели завершение всего процесса

Чушь собачья. Прочитайте раздел Error Recovery в мануале и откройте для себя ключевое слово error.

> потому уж утечки памяти там будут гарантированно.

Там все стэки разбора - локальные для yyparse(), а для контроля их переполнения можно определить пользовательскую функцию yyoverflow(). Так что утечки по вине bison принципиально исключены.

> И ЕМНИП нельзя написать парсер, завернуть его в класс, и использовать несколько экземпляров.

Курите Pure Parser и C++ Parser Interface из манов.

> К слову, вменяемой альтернативы я так и не нашёл и всегда писал парсеры руками.

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


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 18:28 
> Может вы не в курсе, но bison генерит исходник на С, а не на С++, если вы видите между ними разницу...

А вы посмотрите для разнообразия в share/bison/lalr1.cc. Алсо, может вы не в курсе, но нормальный C можно обернуть в C++. Ключевое слово - нормальный.
И может вы слепой, но в новости речь идёт об исключениях, что уже далеко не C.

> Сгенерите реентерабильный (pure) парсер

Не надо всех по себе равнять, я не дебил. Разумеется именно pure парсер я и генерил.

В остальном я с вами спорить не могу, потому что щупал это гoвно на палочке слишком давно. Но факт - одно исключение и все ваши маллоки, хоть и проверками, хоть без - останутся без free.

> Чего только люди не делают, лишь бы не разбираться с хрестоматийными программами...

Высшая форма ламерства - оценивать программы по "хрестоматийности". GNU насквозь хрестоматиен, взять хотя бы autocrap. И более понятный синоним хрестоматийности тут - заскорузлое кривое устаревшее гoвнецо. Потому и дохнет, кстати.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено dq0s4y71 , 14-Дек-12 15:08 
> А вы посмотрите для разнообразия в share/bison/lalr1.cc.

Да, можно заставить Бизон генерить только таблицы, а парсер вообще написать самому. Хоть с исключениями, хоть с чатурангой и одалисками. Но вы даже этим не воспользовались, а предпочли изобретать свой собственный велосипед. Вот это и есть высшая форма ламерства.

> Алсо, может вы не в курсе, но нормальный C можно обернуть в C++.

Можно и гланды через задний проход удалять. Но не нужно.

> Ключевое слово - нормальный.

Вы, похоже, сказали новое слово в компьютерной науке. "Нормальный С - это такой С, который можно обернуть в C++" :D

> В остальном я с вами спорить не могу, потому что щупал это гoвно на палочке слишком давно.

Вы со мной спорить не можете не потому, что это было давно, а потому что вы так и не дочитали мануал.

> Но факт - одно исключение и все ваши маллоки, хоть и проверками, хоть без - останутся без free.

Может "факт" наконец-то подтвердите каким-нибудь пруфом?

> И более понятный синоним хрестоматийности тут - заскорузлое кривое устаревшее гoвнецо.

Я с вас смеюсь. "Устаревшее" - это колесо, которым люди пользуются 5 тысяч лет. Вы суть колеса понять так и не смогли, поэтому изобрели своё собственное, квадратное :)


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 14-Дек-12 20:41 
Большая часть поста - баттхерт от того что вас ткнули носом в вашу некомпетентность, не вижу смысла это комментировать.

> Может "факт" наконец-то подтвердите каким-нибудь пруфом?

Факт вообще-то изначально подтвержден новостью.

The parse function now catches exceptions, uses the %destructors to release memory (the lookahead symbol and the symbols pushed on the stack) before re-throwing the exception.

> "Устаревшее" - это колесо, которым люди пользуются 5 тысяч лет. Вы суть колеса понять так и не смогли, поэтому изобрели своё собственное, квадратное :)

Вообще-то вместо того чтобы пользоваться каменным колесом пятитысячелетней давности, люди перешли на более адекватные колеса. Сначала деревянные, потом металлические, с покрышкой. А в случае bison колесо не только тысячелетней давности, а еще и квадратное.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено dq0s4y71 , 15-Дек-12 21:09 
> Большая часть поста - баттхерт от того что вас ткнули носом в
> вашу некомпетентность, не вижу смысла это комментировать.

Бгг. Оналитег, неумеющий читать маны, обвиняет меня в некомпетентности.

>> Может "факт" наконец-то подтвердите каким-нибудь пруфом?
> Факт вообще-то изначально подтвержден новостью.
> The parse function now catches exceptions, uses the чstructors to release memory
> (the lookahead symbol and the symbols pushed on the stack) before
> re-throwing the exception.

И как из этого следует, что раньше малокки оставались без free? Примеры кода, пожалуйста.

>> "Устаревшее" - это колесо, которым люди пользуются 5 тысяч лет. Вы суть колеса понять так и не смогли, поэтому изобрели своё собственное, квадратное :)
> Вообще-то вместо того чтобы пользоваться каменным колесом пятитысячелетней давности,
> люди перешли на более адекватные колеса. Сначала деревянные, потом металлические, с
> покрышкой. А в случае bison колесо не только тысячелетней давности, а
> еще и квадратное.

Вы - неосилятор, продолжаете в этом упорствовать. Всего наилучшего.


"Новая версия Bison 2.7, системы для написания..."
Отправлено arisu , 20-Дек-12 20:47 
> но нормальный C можно обернуть в C++. Ключевое слово —
> нормальный.


char *c = malloc(64);

это, чтобы ты знал, *нормальный* си. а то, что цпп тут кричит о типах — это специфика цпп, который не полностью с си совместим. и костыль вида (char *)malloc(64) — это и есть костыль, который для си — не нужен, а для цпп — ломает и без того дурацкую проверку типов.

расскажи мне ещё про «нормальный C», пожалуйста.


"Новая версия Bison 2.7, системы для написания..."
Отправлено arisu , 20-Дек-12 20:49 
> Но факт - одно исключение и
> все ваши маллоки, хоть и проверками, хоть без - останутся без
> free.

что совершеннейшим образом не важно, потому что для парзера всё равно удобней применять zone allocator. и выкидывать потом всю зону целиком.


"Новая версия Bison 2.7, системы для написания синтаксических..."
Отправлено Аноним , 13-Дек-12 10:39 
nemerle peg?

"Новая версия Bison 2.7, системы для написания..."
Отправлено arisu , 20-Дек-12 20:50 
> nemerle peg?

мона? нет, благодарствуем, уносите.