in reply to extract C function body
If depth == 0, the line is tested using a regex that matches function declarations. I used the following, although I'm unsure how accurate it matches us to the actual grammar (I rolled it in my head):$depth++ while /\{/g; $depth-- while /\}/g;
my $funcrgx = '((\w+(?:\:\:\w+)*)\s*(\([^)]*\)))';
The one thing you have to be careful of using this method is preprocessor crap. It can throw the depth count off. I wrote in some fuzzy handling code to take care of that (basically always picking the first branch of the #ifdef to follow and not counting parens in the other branch)
Using established parsing modules is probably preferrable to rolling it yourself, but this is how I did it :)
|
|---|