Я пытаюсь разобрать немного языка с апострофами в нем, используя pyparsing, все шло хорошо, пока вдруг я не начал получать таинственные ошибки, которые я не могу отладить.
Я вырубил свой парсер для минимальной вещи, которая вызывает ошибку:
В качестве примера того, что я пытаюсь сделать, рассмотрим язык с таковыми и вложенные списки из них.
например 1(11)1(1((11)1))
, который может быть проанализирован так:
from pyparsing import *
sound=Regex(r"1")
beat=sound ^ nestedExpr(content=sound)
tune=OneOrMore(beat)
print(tune.parseString("1"))
print(tune.parseString("11"))
print(tune.parseString("(1)"))
print(tune.parseString("(1(1))"))
Но если я попытаюсь добавить апостроф, то вместо этого основной единицей будет '1
:
например '1('1'1)'1('1(('1'1)'1))
sound=Regex(r"'1")
beat=sound ^ nestedExpr(content=sound)
tune=OneOrMore(beat)
#These all work as expected
print(tune.parseString("'1"))
print(tune.parseString("'1'1"))
print(tune.parseString("('1)"))
#but
print(tune.parseString("('1('1))"))
вызывает исключение
pyparsing.ParseException: Expected {Re:("'1") ^ nested () expression}, found '1' (at char 5), (line:1, col:6)
Может кто-нибудь сказать мне, как заставить второй пример работать так же, как первый, чтобы любая строка, принятая первым, была принята первый после замены каждого 1
на '1
?