无法使用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
包含a
和b
作为参数。相反:
>>> 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)
这里每个Parameter
有name
。 Parameters
查找匹配的Parameter
的name
属性,并将其放入内部dict
。