【发布时间】:2011-07-31 10:47:55
【问题描述】:
所以我在这个 python 脚本中做错了,但它变得令人费解,我忘记了我做错了什么。
我想要一个脚本遍历一个文件,找到所有的函数定义,然后拉出函数的名称、返回类型、参数,输出一个“doxygen”风格的注释,如下所示:
/******************************************************************************/
/*!
\brief
Main function for the file
\return
The exit code for the program
*/
/******************************************************************************/
但是我在尝试解析参数时对正则表达式做错了......这是到目前为止的脚本:
import re
import sys
f = open(sys.argv[1])
functions = []
for line in f:
match = re.search(r'([\w]+)\s+([\S]+)\(([\w+\s+\w+])+\)',line)
if line.find("\\fn") < 0:
if match:
returntype = match.group(1)
funcname = match.group(2)
print '/********************************************************************'
print " \\fn " + match.group()
print ''
print ' \\brief'
print ' Function description for ' + funcname
print ''
if len(match.groups()) > 2:
params = []
count = len(match.groups()) - 2
while count > 0:
matchingstring = match.group(count + 2)
if matchingstring.find("void") < 0:
params.append(matchingstring)
count -= 1
for parameter in params:
print " \\param " + parameter
print ' Description of ' + parameter
print ''
print ' \\return'
print ' ' + returntype
print '********************************************************************/'
print ''
任何帮助将不胜感激。谢谢
【问题讨论】:
-
出了什么问题?有什么症状?
-
你不应该为此使用解析器吗?
-
C++ 源代码不能很好地与正则表达式配合使用。尝试查看返回指向成员函数类型的函数的签名。为什么不直接使用 doxygen?它是可定制的。
-
嗯,是的。我想用doxygen。我只想编写一个脚本,它会为我完成并爆出一些 doxygen cmets 的模板。就问题的“症状”而言,它只是没有正确获取参数,这可能是因为我开始遇到问题并且表达式变得复杂。我想我不太明白如何将多个参数提取到 match.group() 中。无论如何,感谢任何人都可以提供的任何帮助
-
如果有人有更好的方法建议,也很感兴趣。
标签: c++ python regex parsing doxygen