无法用Python语法解析函数声明

时间:2016-07-27 23:23:29

标签: python pypeg

我使用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是唯一找到的符号?

1 个答案:

答案 0 :(得分:0)

因为name()必不可少的是将匹配的Symbol附加到班级的name attr。在您的情况下,b的附件会覆盖a

官方文件列出以下内容:

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

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

此处每个Parameter都有一个nameParameters会查找匹配的name的{​​{1}}属性,并将其放入内部Parameter