1.1, Аноним (-), 10:04, 13/12/2012 [ответить] [﹢﹢﹢] [ · · · ]
| –2 +/– |
> Добавлена экспериментальная поддержка обработки исключений
Да неужели! Дожили. В XXI веке-то, наифундаментальнейшая утилита научилась генерить код с поддержкой исключений. Когда я в своё время разбирался с flex/bison и увидел код который они генерят... с глобальными переменными, malloc без проверки ошибок и т.д., не говоря уже о exception-safety, сказать что я был в шоке - ничего не сказать. На них просто нельзя написать парсер, который на ошибку внутри парсинга будет делать что-то иное, нежели завершение всего процесса, потому уж утечки памяти там будут гарантированно. И ЕМНИП нельзя написать парсер, завернуть его в класс, и использовать несколько экземпляров. Из-за глобальных переменных. П**ц их 80-х, по-другому и не скажешь.
К слову, вменяемой альтернативы я так и не нашёл и всегда писал парсеры руками. А нужно всего-лишь интегрированное (lexer+parser) решение, генерящее вменяемый код. В идеале, с поддержкой нескольких языков. Ближе всего к этому ragel, но парсера там, к сожалению, нет. Либо как лексер, либо для регулярок.
| |
|
2.2, Andrey Mitrofanov (?), 10:26, 13/12/2012 [^] [^^] [^^^] [ответить]
| +3 +/– |
> вменяемой альтернативы я так и не нашёл и всегда писал парсеры руками.
> А нужно всего-лишь
Авторы бизона тоже не нашли! Может вам объединить усилия?
| |
2.3, Aesthetus Animus (ok), 10:33, 13/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
> А нужно всего-лишь интегрированное (lexer+parser) решение, генерящее вменяемый код. В идеале, с поддержкой нескольких языков
Попробуйте antlr.
| |
|
3.5, Аноним (-), 10:51, 13/12/2012 [^] [^^] [^^^] [ответить]
| +1 +/– |
Совершенно не хочется зависеть только ради генератора парсеров от жавы (как и mono, это к совету nemerle.peg). Возможно после этой версии всё-таки можно будет юзать bison, но вообще когда я искал нормальный парсер, наткнулся на страницу где их было чуть ли не полсотни - ничего вменяемого я там тогда не нашёл, но меня не оставляет чувство что я мог в этом разнообразии что-то пропустить. Кажись, lemon выглядел вменяемо, но он емнип не был интегрированным.
| |
|
4.7, Аноним (-), 11:17, 13/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
>Совершенно не хочется зависеть только ради генератора парсеров от жавы
Аноним, ты не понимаешь ее силы, переходи на темную сторону.
| |
|
5.9, Аноним (-), 11:19, 13/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Аноним, ты не понимаешь ее силы, переходи на темную сторону.
Спасибо, я привык использовать железо под нужды решаемой задачи, а не языка.
| |
5.11, Аноним (-), 12:44, 13/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
Да, когда в каждом апдейте чинят по хренадцать уязвимостей - это сила...
| |
|
6.18, Аноним (-), 19:54, 13/12/2012 [^] [^^] [^^^] [ответить]
| –1 +/– |
Это проблемы пользователей и бородатых админов обновлятся, а не разработчиков.
| |
|
|
|
|
|
3.8, Аноним (-), 11:18, 13/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
Пробовал, это леденящий душу п**ц. Ещё раз: нужна поддержка нескольких языков и отсутствие привязки к кускам гoвна (java, mono, boost).
| |
|
2.10, dq0s4y71 (??), 12:20, 13/12/2012 [^] [^^] [^^^] [ответить]
| +9 +/– |
> Да неужели! Дожили. В 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 из манов.
> К слову, вменяемой альтернативы я так и не нашёл и всегда писал парсеры руками.
Сочувствую :) Чего только люди не делают, лишь бы не разбираться с хрестоматийными программами...
| |
|
3.17, Аноним (-), 18:28, 13/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Может вы не в курсе, но bison генерит исходник на С, а не на С++, если вы видите между ними разницу...
А вы посмотрите для разнообразия в share/bison/lalr1.cc. Алсо, может вы не в курсе, но нормальный C можно обернуть в C++. Ключевое слово - нормальный.
И может вы слепой, но в новости речь идёт об исключениях, что уже далеко не C.
> Сгенерите реентерабильный (pure) парсер
Не надо всех по себе равнять, я не дебил. Разумеется именно pure парсер я и генерил.
В остальном я с вами спорить не могу, потому что щупал это гoвно на палочке слишком давно. Но факт - одно исключение и все ваши маллоки, хоть и проверками, хоть без - останутся без free.
> Чего только люди не делают, лишь бы не разбираться с хрестоматийными программами...
Высшая форма ламерства - оценивать программы по "хрестоматийности". GNU насквозь хрестоматиен, взять хотя бы autocrap. И более понятный синоним хрестоматийности тут - заскорузлое кривое устаревшее гoвнецо. Потому и дохнет, кстати.
| |
|
4.19, dq0s4y71 (??), 15:08, 14/12/2012 [^] [^^] [^^^] [ответить]
| –1 +/– |
> А вы посмотрите для разнообразия в share/bison/lalr1.cc.
Да, можно заставить Бизон генерить только таблицы, а парсер вообще написать самому. Хоть с исключениями, хоть с чатурангой и одалисками. Но вы даже этим не воспользовались, а предпочли изобретать свой собственный велосипед. Вот это и есть высшая форма ламерства.
> Алсо, может вы не в курсе, но нормальный C можно обернуть в C++.
Можно и гланды через задний проход удалять. Но не нужно.
> Ключевое слово - нормальный.
Вы, похоже, сказали новое слово в компьютерной науке. "Нормальный С - это такой С, который можно обернуть в C++" :D
> В остальном я с вами спорить не могу, потому что щупал это гoвно на палочке слишком давно.
Вы со мной спорить не можете не потому, что это было давно, а потому что вы так и не дочитали мануал.
> Но факт - одно исключение и все ваши маллоки, хоть и проверками, хоть без - останутся без free.
Может "факт" наконец-то подтвердите каким-нибудь пруфом?
> И более понятный синоним хрестоматийности тут - заскорузлое кривое устаревшее гoвнецо.
Я с вас смеюсь. "Устаревшее" - это колесо, которым люди пользуются 5 тысяч лет. Вы суть колеса понять так и не смогли, поэтому изобрели своё собственное, квадратное :)
| |
|
5.20, Аноним (-), 20:41, 14/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
Большая часть поста - баттхерт от того что вас ткнули носом в вашу некомпетентность, не вижу смысла это комментировать.
> Может "факт" наконец-то подтвердите каким-нибудь пруфом?
Факт вообще-то изначально подтвержден новостью.
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 колесо не только тысячелетней давности, а еще и квадратное.
| |
|
6.21, dq0s4y71 (??), 21:09, 15/12/2012 [^] [^^] [^^^] [ответить]
| –1 +/– |
> Большая часть поста - баттхерт от того что вас ткнули носом в
> вашу некомпетентность, не вижу смысла это комментировать.
Бгг. Оналитег, неумеющий читать маны, обвиняет меня в некомпетентности.
>> Может "факт" наконец-то подтвердите каким-нибудь пруфом?
> Факт вообще-то изначально подтвержден новостью.
> 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 колесо не только тысячелетней давности, а
> еще и квадратное.
Вы - неосилятор, продолжаете в этом упорствовать. Всего наилучшего.
| |
|
|
4.22, arisu (ok), 20:47, 20/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
> но нормальный C можно обернуть в C++. Ключевое слово —
> нормальный.
char *c = malloc(64);
это, чтобы ты знал, *нормальный* си. а то, что цпп тут кричит о типах — это специфика цпп, который не полностью с си совместим. и костыль вида (char *)malloc(64) — это и есть костыль, который для си — не нужен, а для цпп — ломает и без того дурацкую проверку типов.
расскажи мне ещё про «нормальный C», пожалуйста.
| |
4.23, arisu (ok), 20:49, 20/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Но факт - одно исключение и
> все ваши маллоки, хоть и проверками, хоть без - останутся без
> free.
что совершеннейшим образом не важно, потому что для парзера всё равно удобней применять zone allocator. и выкидывать потом всю зону целиком.
| |
|
|
|
|