简洁解析器 - 试图解析赋值语法的错误

问题描述:

我使用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' 

吝啬似乎喜欢好了很多。

+3

注意:_是另一个规则,定义为“_ =〜”\ s *“'(即不确定的空格)。 –