Hi, I'm looking for a skeleton C parser. I've done C parsers before and I know to do a real parse, you need to have a symbol table so that you can keep track of typedefs. I'm wanting to write a tool that will take existing C source (after the preprocessor) and, for example, tell me when a particular function is called (what source line and from within what function) and tell me the arguments to it. I don't need a full cross reference. And, in fact, my particular needs today are just a sample. I'm looking for a parser that is easy to tie in to. With the standard Ruby source, there is something called "ripper" which they call an "event-based style parser" (for Ruby). It has a number of hooks that are called as the source is parsed -- e.g. start of function, start of statement, etc. This is really easy to tie into. This is one possibility. The other possibility is for the parser to give me back a parse tree (or sequence of trees perhaps). I'm willing to use most any language but assumed it would be C based. I'm comfortable using Ruby, Python, Perl, etc if necessary. I can also work with YACC / Bison if necessary. I'm hoping this project would have either exactly what I'm looking for or major pieces to help me build what I'm looking for. Thank you for your time, Perry
On Mon, Feb 20, 2012 at 11:09 AM, Perry Smith <pedzsan at gmail.com> wrote:> Hi, > > I'm looking for a skeleton C parser. I've done C parsers before and I know to do a real parse, you need to have a symbol table so that you can keep track of typedefs. > > I'm wanting to write a tool that will take existing C source (after the preprocessor) and, for example, tell me when a particular function is called (what source line and from within what function) and tell me the arguments to it. I don't need a full cross reference. And, in fact, my particular needs today are just a sample. I'm looking for a parser that is easy to tie in to. > > With the standard Ruby source, there is something called "ripper" which they call an "event-based style parser" (for Ruby). It has a number of hooks that are called as the source is parsed -- e.g. start of function, start of statement, etc. This is really easy to tie into. This is one possibility. The other possibility is for the parser to give me back a parse tree (or sequence of trees perhaps).Using clang's libraries, you can generate a complete AST for C code, find all the call expressions, and do whatever analysis of them is necessary. See http://clang.llvm.org/ . Please direct further questions to the cfe-dev mailing list. -Eli