digitalmars.D - Off subject
- Vincent Richomme (19/19) Jan 06 2009 Hi,
- Ary Borenszweig (12/39) Jan 06 2009 I'm sure you can do this with CDT (the Eclipse plugin for C/C++). The
- Jussi Jumppanen (14/16) Jan 06 2009 One option would be to use a regular expression within a search
- Vincent Richomme (6/32) Jan 07 2009 Hul doesn't work because it matches some typedef struct like this :
- Jussi Jumppanen (25/31) Jan 07 2009 That's what I meant when I said the regexp will almost certainly
Hi, sorry to ask my question here but since people are motivated by new language, source code, ... I thought it was a good place to ask my question about source code analysis. I would like to know if there are some parsers/scripts that could parse some C/C++ language and that could insert printf in each function. Actually I am trying to understand a huge program and debugging step by step would take me ages. What I want is something like : void myfunc(int aFoo) { ... } I want a parser that could add void myfunc(int aFoo) { fprintf(stderr, "myfunc(int aFoo)"); ... }
Jan 06 2009
Vincent Richomme wrote:Hi, sorry to ask my question here but since people are motivated by new language, source code, ... I thought it was a good place to ask my question about source code analysis. I would like to know if there are some parsers/scripts that could parse some C/C++ language and that could insert printf in each function. Actually I am trying to understand a huge program and debugging step by step would take me ages. What I want is something like : void myfunc(int aFoo) { ... } I want a parser that could add void myfunc(int aFoo) { fprintf(stderr, "myfunc(int aFoo)"); ... }I'm sure you can do this with CDT (the Eclipse plugin for C/C++). The API is here: http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/overview-summary.html I haven't worked with that API but more or less you'll need to: 1. Get an ITranslationUnit, which represents a source file. 2. From it, invoke getAST(). 3. Implement an IASTVisitor to traverse all the nodes and print them, with the exception of function bodies, where you'll add an pfritf. You could even make it a plugin and then just open the file in Eclipse, select an action from the menu and have it done for a whole project or a bunch of source files.
Jan 06 2009
Vincent Richomme Wrote:I would like to know if there are some parsers/scripts that could parse some C/C++ language and that could insert printf in each function.One option would be to use a regular expression within a search and replace. Just as a simple test I came up regexp that does seems do the trick: Search string: (^[_a-z0-9]+[ &*\t]+[_a-z0-9 &*\t]*[_a-z0-9]+[ \t]*[(]+.*[^;]+)(\n{\n) Replace String: \0fprintf(stderr, ("\1") Any regexp enabled text editor should be able to handle the search and replace. It worked just fine in the Zeus IDE ;) You could also use SED or AWK to do a batch mode regexp search and replace. NOTE: The regexp was only tested for the function declaration that you posted, so it will almost certainly need to be tweaked for other variations of function definitions.
Jan 06 2009
Jussi Jumppanen a écrit :Vincent Richomme Wrote:Hul doesn't work because it matches some typedef struct like this : typedef struct c_parser GTY(()) { ... } c_parser;I would like to know if there are some parsers/scripts that could parse some C/C++ language and that could insert printf in each function.One option would be to use a regular expression within a search and replace. Just as a simple test I came up regexp that does seems do the trick: Search string: (^[_a-z0-9]+[ &*\t]+[_a-z0-9 &*\t]*[_a-z0-9]+[ \t]*[(]+.*[^;]+)(\n{\n) Replace String: \0fprintf(stderr, ("\1") Any regexp enabled text editor should be able to handle the search and replace. It worked just fine in the Zeus IDE ;) You could also use SED or AWK to do a batch mode regexp search and replace. NOTE: The regexp was only tested for the function declaration that you posted, so it will almost certainly need to be tweaked for other variations of function definitions.
Jan 07 2009
Vincent Richomme Wrote:Hul doesn't work because it matches some typedef struct like this : typedef struct c_parser GTY(()) { ... } c_parser;That's what I meant when I said the regexp will almost certainly need to be tweaked ;) For example this new 'tweaked' regexp search string: (^[_a-z0-9]+[ &*\t]+[_a-z0-9 &*\t]*[_a-z0-9]+[ \t]*\({0,1}[^\]+.(.*[^;]+)(\n{\n) will distinguish bettween these two case: void myfunc(int aFoo) { ... } typedef struct c_parser GTY(()) { ... } c_parser; Obviously for each new case some extra tweaking of the repexp might be required. But if you used something like SED you can make the searching a hell of a lot smarter. SED allows you to define rules where by you can take the result of one search, run a second test against it and then accept or reject the result based on the result of this second test. http://www.zeusedit.com/forum/viewtopic.php?t=1229 Using this approach you could define rules to filter out these exceptions.
Jan 07 2009