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

问题描述:

我正在使用pyPEG来解析函数的声明。目前,我有这样的记载:无法使用Python语法解析函数声明

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

因为name()必须附加匹配的Symbol到类的name属性。在你的情况下,b的附件将覆盖a

官方文档列表如下:

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

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

这里每个ParameternameParameters查找匹配的Parametername属性,并将其放入内部dict