Мне нужно разобрать и разделить функции C и C++ на основные компоненты (тип возвращаемого значения, имя/класс и метод функции, параметры и т. д.).
Я работаю либо с заголовками, либо со списком, где подписи имеют форму:
общественность: недействительным __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>
используются для простого извлечения групп.
Мне интересно, есть ли стандартное регулярное выражение для анализа всех функций или как улучшить мое для обработки странных исключений?
typedef
). FWIW, я никогда не видел, чтобы имена классов начинались сclass
. На первый взгляд, это, вероятно, будет законным, но вы этого не увидите. - person David Thornley   schedule 05.08.2010class
в типе, это было бы недопустимо, но на самом деле это не из заголовков, а из списка функций, выплевываемых другой программой (который указывает на классы, перечисления и т. д., добавляя к ним соответствующее ключевое слово). Я их потом выкину. - person ssube   schedule 05.08.2010