simple-c icon indicating copy to clipboard operation
simple-c copied to clipboard

A very simple C compiler written in C#

SimpleC

This is a very simple C compiler written in C# by Niklas Rother.

Inspiration for this project came from the lecture "Programmiersprachen und Übersetzer" at the Leibniz University Hannover with I visit this semester.

The main design of the compiler follows the examples given in the lecture. Most important the compiled code is no machine-code, but code for the a virtual machine (VM). There is an interpreter for this code included.

The compiler compiles a small subset of the C syntax. Important exception: There is no need to declare functions bevore using them, so no header files :) (see below)

Current state

The project is currently in an early state:

  • The tokenizer is complete and works
  • The parser is in a early state, currently under heavly development
  • The code generator is not even started
  • The interpreter is no even started

Currently the parser seems to be the most complicated thing of the whole project. I know that normally yacc/Bison is used to generate the parser, but I'll try to implement it on my own (note that this is my first try in writing a parser...).

The code generator should be doable (the lectures script has a nice chapter about it), and the interpreter should be really easy...

Limitations

The following limitations are currently active, to simplify the whole thing:

  • No nested variable scopes in if/while/etc. That means, you can not override a name of a variable inside a loop etc. There are only two scopes: Global or function-local
  • You may use functions before declaring them (no header files!). This may not be a limitation...
  • Variables may be used before declared (must must be declared somewhere). This means you should declare all local vairables inside a funtion on top of it, otherwise the compiler will behave as if you did. Maybe this will emit a error later.

Licence

MIT License