2016-07-27 65 views
0

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

回答

0

因爲name()必須附加匹配的Symbol到類的name屬性。在你的情況下,b的附件將覆蓋a

官方文檔列表如下:

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

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

這裏每個ParameternameParameters查找匹配的Parametername屬性,並將其放入內部dict