Я пытаюсь разработать основной скелет для языка, который я разрабатывал, и я пытаюсь использовать Parsimonious сделать синтаксический анализ для меня. На данный момент я провозгласил следующую грамматику:
grammar = Grammar(
"""
program = expr*
expr = _ "{" lvalue (rvalue / expr)* "}" _
lvalue = _ ~"[a-z0-9\\-]+" _
rvalue = _ ~".+" _
_ = ~"[\\n\\s]*"
"""
)
Когда я пытаюсь вывести полученный AST простой строки ввода, например "{ do-something some-argument }"
:
print(grammar.parse("{ do-something some-argument }"))
Parsimonious решает отказаться от него, а затем дает мне эту довольно загадочную ошибку:
Traceback (most recent call last): File "tests.py", line 13, in <module> print(grammar.parse("{ do-something some-argument }")) File "/usr/local/lib/python2.7/dist-packages/parsimonious/grammar.py", line 112, in parse return self.default_rule.parse(text, pos=pos) File "/usr/local/lib/python2.7/dist-packages/parsimonious/expressions.py", line 109, in parse raise IncompleteParseError(text, node.end, self) parsimonious.exceptions.IncompleteParseError: Rule 'program' matched in its entirety, but it didn't consume all the text. The non-matching portion of the text begins with '{ do-something some-' (line 1, column 1).
Сначала я подумал, что это может быть проблема, связанная с моим правилом пробелов, _
, но после нескольких неудачных попыток удаления правила пробелов в определенных местах я все еще сталкивался с той же ошибкой.
Я пробовал поиск в Интернете, но все, что я нашел, похоже, удаленно связано с этим вопросом, что никоим образом не помогло мне.
Я делаю что-то неправильно с моей грамматикой? Разве я не разбираю ввод правильно? Если у кого-то есть возможное решение этого, было бы весьма полезно.