Разбор повторяющихся символов - PullRequest
2 голосов
/ 10 апреля 2011

Я новичок в разборе (очевидно).Я использую библиотеку LEPL для анализа какого-либо языка разметки.

У меня проблема с этим кодом (для ясности я пропустил детали).

from lepl import *

a = Literal('a')[0:,...] # 0 or more, join the result
b = Literal('b')

c = (a | b)[0:]

print c.parse("abaabaaab")

Последняя строка должна дать мне ['a', 'b', 'aa', 'b', 'aaa', 'b']

Нет ошибки, но она зависает (возможно бесконечная рекурсия?).Может ли кто-нибудь указать мне правильное направление?

Редактировать

Я мог бы сделать это следующим образом

from lepl import *

a = Literal('a')
b = Literal('b')

c = (a | b)[0:]

print c.parse("abaabaaab")

Но a не будет сгруппирован.

1 Ответ

7 голосов
/ 10 апреля 2011

Я почти уверен, что в вашем первом примере вы хотите

a = Literal('a')[1:]

С двумя [0:] повторениями в вашей грамматике парсер действительно столкнется с практически бесконечным возвратом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...