[cfe-dev] create source 2 source compiler with clang libraries

Chi c.c.chi at campus.tu-berlin.de
Sat Aug 28 01:27:27 PDT 2010


Quoting John McCall <rjmccall at apple.com>:

> On Aug 27, 2010, at 7:04 AM, Chi wrote:
>> I would like to (initially) create a src-to-src compiler to compile  
>> some language extension I thought up for parallel programming. What  
>> I had in mind was to have to extend the C grammar, and have a  
>> compiler produce legal C (gnu/c99) out of it again. So I wanted to  
>> ask if Clang could help me do this in a intuitive/easy way?
>
> Yes, definitely.
>
> I should say that if you're hoping to make a source-to-object  
> compiler in the end, you may find that it's not that much more  
> complicated to start out with one.  People often underestimate the  
> complexity of writing source-to-source compilers that do any sort of  
> interesting transformation, and it's quite easy to run into the  
> limits of the approach.  Of course, this only works if your target  
> architecture has an LLVM backend.  That said, you can use a  
> Clang-based parser with either approach.

Thanks John,

A source-to-object compiler would be indeed nicer, but I might run  
into some portability problems as we might want to use it on a  
Microblaze platform or Tilera. I see you have experimental support for  
Microblaze, is there any development in the direction of the Tilera?

>
>> I would like to create a simple program that does just a src to src  
>> transformation. As a starting point a program, that uses the Clang  
>> libraries that simply is able to lex, parse, build AST and  
>> typecheck, and generate the legal C/C++ by simply printing the AST  
>> nodes, would be great. Can you guys maybe point me in the right  
>> direction and maybe indicate the complexity of both creating the  
>> starting point and the src-to-src compiler?
>
> It's not really possible to modify Clang's parser as a library.   
> That's okay - there are several successful projects based on local  
> modifications to the Clang sources - but it does have implications  
> for your project, because it means you should use a source-control  
> system (like git) that makes it relatively painless to integrate  
> patches from trunk, or even switch to the latest release sources  
> (note that we'll be making a new release relatively soon).
>
> (You should definitely implement your parser by modifying Clang's  
> instead of trying to make your own that incidentally produces  
> Clang's ASTs.  I presume that your goal is to allow programmers to  
> decorate existing code with your language extension;  parsing  
> arbitrary C as it's accepted by typical compilers is a very  
> complicated task which many people have underestimated to their  
> peril.)
>
> The best way to familiarize yourself with how the Clang parser works  
> is to launch Clang in a debugger and just track its operation as it  
> parses some interesting bit of code.

I will =).

>
> John.






More information about the cfe-dev mailing list