Как я могу заставить синтаксический анализатор YACC-типа останавливаться на самом коротком подходящем входе? - PullRequest
1 голос
/ 17 ноября 2011

Вот контекст: у меня есть файл (или поток), и я хочу обработать его заголовок, остановить, а затем по-разному обработать остальные данные.То есть предположим, что у меня есть поток типа BEGIN GOOD GOOD GOOD GOOD GOOD DONE JUNK JUNK JUNK JUNK ....Первая часть (BEGIN GOOD+ DONE) соответствует моей грамматике, и я хочу остановиться, как только увижу DONE.

AFAIK, YACC и друзья хотят продолжать потреблять токены, пока их больше нет, поэтому янужно написать больше грамматики, чтобы соответствовать всем JUNK.Это можно обойти?

Я использую PLY (реализацию Lex и Yacc для Python), но я открыт для общих ответов здесь.

1 Ответ

1 голос
/ 17 ноября 2011

В обычном yacc вы можете использовать макрос yacc YYACCEPT в действии, чтобы немедленно вернуть успешный анализ, не читая больше токенов. Однако я не знаю, поддерживает ли PLY это.

...