Мне нужно разобрать и разделить функции C и C ++ на основные компоненты (тип возвращаемого значения, имя функции / класс и метод, параметры и т. Д.).
Я работаю либо из заголовков, либо из списка, где подписи принимают форму:
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>
предназначены для простого извлечения групп.
Мне интересно, есть ли стандартное регулярное выражение для разбора всех функций или как улучшить мое для обработки нечетных исключений?