How to extend Internal C representation

Dear Clang developers,

I’m André and I’m a college student from Brazil, UFSC (Santa Catarina Federal University) and in my work of graduation conclusion I pretend to do a C extension for parallelism and game programming. What I would like to know is which classes and documentation would be more suitable to read for accomplishing that, i.e, what tips can you give me if I’m to use Clang as a the base of my implementation. I prefer that rather than using gcc C frontend for obvious reasons (antiquate code and logarithmical learning curve) and the use of an automatic parser generation tool like YACC/FLEX doesn’t seem fine since I don’t want to do a compiler frontend and backend from scratch. LLVM and Clang seem like my best shot for an innovative and interesting work.

Thanks for your atention.

Atentiously,

Dear Clang developers,

I'm André and I'm a college student from Brazil, UFSC (Santa Catarina Federal University) and in my work of graduation conclusion I pretend to do a C extension for parallelism and game programming. What I would like to know is which classes and documentation would be more suitable to read for accomplishing that, i.e, what tips can you give me if I'm to use Clang as a the base of my implementation. I prefer that rather than using gcc C frontend for obvious reasons (antiquate code and logarithmical learning curve) and the use of an automatic parser generation tool like YACC/FLEX doesn't seem fine since I don't want to do a compiler frontend and backend from scratch. LLVM and Clang seem like my best shot for an innovative and interesting work.

Thanks for your interest in using clang for your work. Here are some brief comments...

Many language extensions require adding a new type. As a result, it might be useful for you to look at existing extensions to the C type system. See AST nodes VectorType and ExtVectorType for a couple fairly small, self-contained examples.

If you plan on adding new declaration constructs, you can look at the "DeclObjC.h" header for many examples. Adding Types/Decls are usually more complex than adding Stmts/Exprs.

I also recommend looking at how we added "Blocks" to C. The AST nodes are BlockPointerType, BlockDecl, BlockExpr, and BlockDeclRefExpr.

See http://clang.llvm.org/docs/LanguageExtensions.html for more info...

Regards,

snaroff