gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:31:49 25 4
gpt4 key购买 nike

我需要将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com