LINUX.ORG.RU

flex+bison, как погасить вывод пустого правила в stdout?

 , ,


1

1

Пишу код для разбора чего-то json-подобного, со вложенными блоками.
Лексика - http://pastebin.com/7Gdqy7iK
Грамматика - http://pastebin.com/drDCsPZq
Полезной нагрузки нет, только заглушки для отладочной печати.

Проблема в чём - правило:

[\s\t\n]                    {;}
в лексере, риводит к тому, что все пробельные символы отправляются в stdout.

Как отучить заразу от этого?


Ответ на: комментарий от quiet_readonly

Спасибо, работает.
Только тогда я немного не понимаю... Точнее совсем.
Если [\s\t\n] захватывает пробельные символы и отправляет их в stdout, то "." должен захватывать любые символы и... отправлять туда же? Непонятно.

knkd ()
Ответ на: комментарий от knkd

Если [\s\t\n] захватывает пробельные символы и отправляет их в stdout,

что-то не припомню я у lex/flex «\s»

[ \t\n\r]+               /* eat whitespace */

то "." должен захватывать любые символы и... отправлять туда же? Непонятно.

кто раньше встал — того и тапки. т.е. порядок правил не произвольный.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

что-то не припомню я у lex/flex «\s»

Хм.. Обычный символ пробела. По крайней мере те версии, что в кУбунте и MinGW принимают.
Я обычно предпочитаю писать «\s», а не " ", для пущей ясности.

кто раньше встал — того и тапки. т.е. порядок правил не произвольный.

Про порядок понял. Не понял, что "." в данном случае делает.
Почему [\s\t\n] не съедает захваченных символов, а "." съедает?

knkd ()
Ответ на: комментарий от knkd

Хм.. Обычный символ пробела.

да в том то и дело, что нет. эта байда из perl'а. так что это ещё под большим вопросом. по крайней мере ни man flex ни man regexp про это ничего не знают.

Почему [\s\t\n] не съедает захваченных символов, а "." съедает?

любой символ, незахваченный предидущими правилами.

beastie ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.