我试图用pyparsing解析visualbasic(VBA)函数声明,将它们转换为Python语法。你知道吗
通常的VBA函数头不是一个大问题,这对我来说很好。但我对论点列表有困难:
Public Function MyFuncName(first As Integer, Second As String) As Integer
参数由一个逗号分隔的列表组成,其中包含0到多个部分,如:
VarName
VarName As VarType
Optional VarName As VarType = InitValue
ByVal VarName As VarType
其中“Optional”、“ByVal”和“ByRef”以及类型声明是完全可选的。你知道吗
我的想法是通过
allparams = Regex('[^)]*').setResultsName('params')
然后分别解析它们。这与单个参数匹配:
variablename = Word(alphas + '_', alphanums + '_')
typename = variablename.setResultsName('type')
default_value = Word(alphanums)
optional_term = oneOf('Optional', True)
byval_term = oneOf('ByRef ByVal', True)
paramsparser = Optional(optional_term) \
+Optional(byval_term) \
+variablename.setResultsName('pname', True) \
+Optional('As' + typename) \
+Optional('=' + default_value)
但即使有delimitedList(paramsparser)
,我也只能得到第一个。你知道吗
AssertionError: 'def test(one):\n\tpass' != 'def test(one, two):\n\tpass'
- def test(one):
+ def test(one, two):
? +++++
你有什么办法得到这个吗?你知道吗
我像你发布的一样使用了你的代码,并将其包装在
delimitedList
中,得到了两个参数:印刷品:
但由于每个param都有这么多字段,我建议为每个字段指定一个单独的结果名称并包装在组中,以防止param相互重叠。下面是我对解析器的修改(非常有帮助的是,您为不同的可选声明字段发布了各种表单):
然后,我不再使用正则表达式获取参数,然后在单独的步骤中重新解析,而是将其包含在整个函数表达式定义中:
印刷品:
相关问题 更多 >
编程相关推荐