简洁解析器 - 试图解析赋值语法的错误
问题描述:
我使用Python Parsimonious Parser试图为我设计的简单语言构建解释器。我看了这个非常有用的tutorial video,现在我正在慢慢修改代码以符合我自己的规则。我卡上的分配规则最初定义为:简洁解析器 - 试图解析赋值语法的错误
def assignment(self, node, children):
'assignment = lvalue "=" expr'
lvalue, _, expr = children
self.env[lvalue] = expr
return expr
我用下面的语法修改规则略有:
def assignment(self, node, children):
'assignment = "SET" lvalue "," expr'
_, lvalue, _, expr = children
self.env[lvalue] = expr
return expr
我想解析器评估SET a, 7
例如,同作为a = 7
并将值7
绑定到名称a
。然而,当我尝试分析它,我从图书馆吝啬得到这个错误:
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 'SET a, 7' (line 1, column 1).
我是相当新的解析/文法和我完全不知道我是否正确定义的规则。希望有更多解析/练习经验的人能够帮助我正确定义规则并解释我出错的地方。也许也可以解释一下Parsimonious的错误吗?
答
当我试图解析SET a, 7
时,我的lvalue
规则没有考虑到SET
和左值a
之间的空格。这是因为我将我的lvalue
规则定义为'lvalue = ~"[A-Za-z]+" _'
,该规则没有考虑名称之前的空格。我重新定义了我的分配规则如下,以占GET
与名称之间的空白:
'setvar = "SETVAR" _ lvalue _ "," _ expr'
吝啬似乎喜欢好了很多。
注意:_是另一个规则,定义为“_ =〜”\ s *“'(即不确定的空格)。 –