специалист по lex/yacc (ищется)

Werdna

Нужен. Очень. Для консультации.
Не мне. :o
Пишите товарищу Шетухину, великому аффтору шаблонизатора ctpp: qip.ru (джаббер, аська соотв.).

Yulka-MOl

Я не специалист, но хотя бы можно узнать, в чём суть вопроса?

Werdna

в чём суть вопроса?
Сейчас — банально парсить чанками. Почему-то не получается заставить.
Т. е. там читается ответ из сокета (не блокирубщего и отправляется на парсер. Надо заставить чтобы он работал потоково, если это реально.

Maurog

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

Maurog

вот маны почитал еще
In addition to these routines, Lex also permits access to the I/O routines it uses. They are:
1) input which returns the next input character;
2) output(c) which writes the character c on the output; and
3) unput(c) pushes the character c back onto the input stream to be read later by input.
By default these routines are provided as macro definitions, but the user can override them and supply private versions. These routines define the relationship between external files and internal characters, and must all be retained or modified consistently. They may be redefined, to cause input or output to be transmitted to or from strange places, including other programs or internal memory; but the character set used must be consistent in all routines;
то есть кое-что переопределить можно, только push-ить не получится, потому что движок pop делает

Dasar

парсер можно сделать потоковым, если как-то ограничить backtracking.
можно, например, размечать грамматику спец. аттрибутами, которые указывают, что если пройдено определенное правило, то backtracking будет только после него, а до него не будет.
и соответственно, что весь предыдущий кусок можно отдавать наружу

tokuchu

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

Werdna

с трудом представляю как можно матчинг регулярным выражениям сделать потоково
да очень просто. например, при достижении конца выходить из парсящей функции, говоря "дальше хочу".
если дальше совсем нету (последний чанк) — кормить пустую строку.

Anturag

я, конечно, не силен в этих парсерах, но с трудом представляю как можно матчинг регулярным выражениям сделать потоково

Если это не шутка, то нужно провести ликбез...
* лексер (aka лексический анализатор) - это такая программа, которая преобразует поток символов в поток токенов.
* lex/flex - генератор лексеров.
Оставить комментарий
Имя или ник:
Комментарий: