I need to write a tool that can take a C code and put pragmas on top of some functions. Which compiler framework is the easiest to do such a task. Also if you can provide an example, I would really appreciate it.
相关问题
- Multiple sockets for clients to connect to
- What is the best way to do a search in a large fil
- glDrawElements only draws half a quad
- Index of single bit in long integer (in C) [duplic
- Equivalent of std::pair in C
You can use regular expressions to search for the function definition.
http://en.wikipedia.org/wiki/Regular_expression
Take a look at lex/flex or yacc/bison.
great article: http://www.ibm.com/developerworks/aix/tutorials/au-lexyacc/index.html
If you want to do this reliably, you need a full C front end, and the ability to modify parsed code.
Our DMS Software Reengineering Toolkit with its C Front End can probably do what you want. DMS can parse, build ASTs, and carry out custom transformations on source text, either procedural or as a surface syntax transform.
There are some issues with macros and preprocessor directives; if you parse and retain these, it can do so in many cases but it expandis such directives where they are not "structured". Retention means you don't get a symbol table. If you expand all the directives, after parsing you can get a symbol table with the same content that a C compiler produces.
For OP's specific task, he'd like write a source to source transform something like the following:
where "my_pragma" is replace essentially by the pragma text he wants, and some_condition is custom predicate that filters matched function_headers for which the pragma should be inserted.
The pattern matches against the syntax tree, so it cannot mismatch like sed or a regex might. The secret to this is that the pattern variables reference to grammar rules in the C Front End; a pattern variable of type function_head can only match those trees that the function_head grammar rule(s) can satisfy.
One needs some trivial control logic to run this transformation just once for each encountered function definition.