Трябва да анализирам и разделя функциите на 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>
s са за лесно извличане на групите.
Чудя се дали има стандартен регулярен израз за анализиране на всички функции или как да подобря моята, за да се справя със странните изключения?
typedef
). FWIW, никога не съм виждал имена на класове с предшествие отclass
. Накратко, вероятно е законно, но няма да го видите. - person David Thornley   schedule 05.08.2010class
в тип, това би било незаконно, но това всъщност не е от заглавки, а от списък с функции, които друга програма изплюва (което показва класове, enums и т.н., като ги префиксира със съответната ключова дума). Събличам ги по-късно. - person ssube   schedule 05.08.2010