标签: parsimonious

为什么Parsimonious会使用IncompleteParseError拒绝我的输入?

我一直试图找出我设计的语言的基本骨架,并且我正在尝试使用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 }":

print(grammar.parse("{ do-something some-argument }"))
Run Code Online (Sandbox Code Playgroud)

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, …
Run Code Online (Sandbox Code Playgroud)

python parsing peg python-2.7 parsimonious

14
推荐指数
1
解决办法
789
查看次数

简约解析器-尝试解析分配语法时出错

我正在使用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)

python parsing peg parsimonious

5
推荐指数
1
解决办法
1022
查看次数

标签 统计

parsimonious ×2

parsing ×2

peg ×2

python ×2

python-2.7 ×1