0

我正在使用pyPEG来解析函数的声明。目前我有这个写:

from pypeg2 import attr, \
                   optional, \
                   csl, \
                   name, \
                   List, \
                   Namespace


class Parameters(Namespace):
    grammar = optional(csl(name()))


class Function(List):
    grammar = "def", name(), \
              "(", attr("params", Parameters), "):"

例如,如果我这样做:

>>> import pypeg2
>>> f = pypeg2.parse("def f(a, b):", Function)

我希望f.params包含ab作为参数。反而:

>>> f.params
Parameters([], name=Symbol('b'))

只有b被发现。为什么是b唯一发现的符号?

4

1 回答 1

0

因为name()必须附加一个匹配Symbolname类的属性。b在您的情况下,覆盖的附件a

官方文档列出了以下内容:

class Parameter(object):
    grammar = attr("typing", Type), name()

class Parameters(Namespace):
    grammar = csl(Parameter)

这里每个Parameter都有一个nameParameters查找name匹配的属性并将Parameter其放入是 internal dict

于 2016-10-07T17:35:55.423 回答