我一直试图找出我设计的语言的基本骨架,并且我正在尝试使用Parsimonious来为我解析.截至目前,我已经宣布了以下语法:
grammar = Grammar(
"""
program = expr*
expr = _ "{" lvalue (rvalue / expr)* "}" _
lvalue = _ ~"[a-z0-9\\-]+" _
rvalue = _ ~".+" _
_ = ~"[\\n\\s]*"
"""
)
Run Code Online (Sandbox Code Playgroud)
当我尝试输出简单输入字符串的结果AST时"{ do-something some-argument }":
Run Code Online (Sandbox Code Playgroud)print(grammar.parse("{ do-something some-argument }"))
Parsimonious决定拒绝它,然后给我这个有点神秘的错误:
Run Code Online (Sandbox Code Playgroud)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, …
我正在使用Python Parsimonious Parser尝试为我正在设计的一种简单语言构建解释器。我观看了本教程视频,该视频非常有帮助,现在我正在慢慢修改代码以符合我自己的规则。我受困于最初定义为的分配规则:
def assignment(self, node, children):
'assignment = lvalue "=" expr'
lvalue, _, expr = children
self.env[lvalue] = expr
return expr
Run Code Online (Sandbox Code Playgroud)
我使用以下语法对规则进行了少许修改:
def assignment(self, node, children):
'assignment = "SET" lvalue "," expr'
_, lvalue, _, expr = children
self.env[lvalue] = expr
return expr
Run Code Online (Sandbox Code Playgroud)
我希望解析器进行评估SET a, 7,例如,与解析器相同,a = 7并将值绑定7到name a。但是,当我尝试解析它时,我从Parsimonious库中得到了以下错误:
parsimonious.exceptions.IncompleteParseError: Rule 'program' matched in its
entirety, but it didn't consume all the text. The non-matching portion …Run Code Online (Sandbox Code Playgroud)