c# - 用于解析 C/C++ 函数声明的正则表达式

标签 c# c++ regex function header

我需要将 C 和 C++ 函数解析并拆分为主要组件(返回类型、函数名称/类和方法、参数等)。

我正在使用 header 或签名采用以下形式的列表:

public: void __thiscall myClass::method(int, class myOtherClass * )

我有以下正则表达式,适用于大多数函数:

(?<expo>public\:|protected\:|private\:) (?<ret>(const )*(void|int|unsigned int|long|unsigned long|float|double|(class .*)|(enum .*))) (?<decl>__thiscall|__cdecl|__stdcall|__fastcall|__clrcall) (?<ns>.*)\:\:(?<class>(.*)((<.*>)*))\:\:(?<method>(.*)((<.*>)*))\((?<params>((.*(<.*>)?)(,)?)*)\)

有一些函数它不想解析,但看起来与模式匹配。我现在不担心匹配不是类成员的函数(稍后可以处理)。该表达式在 C# 程序中使用,因此 <label> s 用于轻松检索组。

我想知道是否有一个标准的正则表达式来解析所有函数,或者如何改进我的正则表达式来处理奇怪的异常?

最佳答案

众所周知,C++ 很难解析;不可能编写一个捕获所有情况的正则表达式。例如,可以有无限数量的嵌套括号,这表明即使是 C++ 语言的这个子集也是不规则的。

但您似乎是在追求实用性,而不是理论上的正确性。只需不断改进您的正则表达式,直到它捕捉到它需要捕捉的情况,并尝试使其尽可能严格,这样您就不会得到任何错误的匹配。

不知道它没有捕捉到的“奇怪的异常”,很难说如何改进正则表达式。

关于c# - 用于解析 C/C++ 函数声明的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409210/

相关文章:

c++ - 简单数组导致异常

c++ - QProgressBar::setValue(int) 导致内存泄漏?

c - C中目录和文件列表的正则表达式

regex - 使用正则表达式排除字符串的前 3 个字符

c# - 依赖属性 : PropertyChangedCallBack only called once

c# - Volatile.Write新鲜度保证

c# - Bootstrap 模态弹出 C# 代码隐藏

c++ - 是否可以使用 clang-cl 在 Windows 上生成 .lib 文件?

c# - C#中的printf是什么

regex - 如何从绑定(bind)标量变量的文件输出中过滤特定行?