* MCS: The Ximian C# compiler MCS began as an experiment to learn the features of C# by writing a large C# program. MCS is currently able to parse C# programs and create an internal tree representation of the program. MCS can parse itself. Work is progressing quickly on various fronts in the C# compiler. Recently I started using the System.Reflection API to load system type definitions and avoid self-population of types in the compiler and dropped my internal Type representation in favor of using the CLI's System.Type. ** Phases of the compiler The compiler has a number of phases: ** Current pending tasks Simple tasks: Critical tasks: Interesting tasks: ** Questions and Answers Q: Why not write a C# front-end for GCC? A: I wanted to learn about C#, and this was an exercise in this task. The resulting compiler is highly object-oriented, which has lead to a very nice, easy to follow and simple implementation of the compiler. I found that the design of this compiler is very similar to Guavac's implementation. Targeting the CIL/MSIL byte codes would require to re-architecting GCC, as GCC is mostly designed to be used for register machines. The GCC Java engine that generates Java byte codes cheats: it does not use the GCC backend; it has a special backend just for Java, so you can not really generate Java bytecodes from the other languages supported by GCC. Q: If your C# compiler is written in C#, how do you plan on getting this working on a non-Microsoft environment. We will do this through an implementation of the CLI Virtual Execution System for Unix (our JIT engine). Q: Do you use Bison? A: No, currently I am using Jay which is a port of Berkeley Yacc to Java that I later ported to C#. This means that error recovery is not as nice as I would like to, and for some reason error productions are not being caught. In the future I want to port one of the Bison/Java ports to C# for the parser. You might also want to look at the GCC section on the main FAQ