/c500

a single pass c compiler in 500 lines of python

Primary LanguagePython

c500

This is a single-pass C→WebAssembly compiler in 500 lines of (nicely formatted, non-comment, non-docstring) Python:

$ sloccount compiler.py | grep python:
python:         500 (100.00%)

It currently supports:

  • Arithmetic
  • Pointers
  • int, char, and string constants (no floating point)
  • if, while, do while, for
  • Functions
  • Typedefs
  • (Single dimensional) arrays
  • Some other stuff

Notably, it does not support preprocessor directives or structs.

Running code

You can use the ./run-test script to compile and run C code. Simply run ./run-test <c file> after running mkdir scratch. You'll need bat, wabt, and wasmer installed.

Running tests

You will need to clone the c-testsuite into the repo: https://github.com/c-testsuite/c-testsuite You'll also need all the tools listed in the Running Code section above. Then you can ./run-all. It currently passes 34/220 test cases.