# P4Dcc P4Dcc is a tiny, but self-hosted C compiler. It takes C source code and compiles it to assembly language. For assembling and linking, it deletegates to gcc as-is. This project was started to prove the hypothesis: "Could a self-hostable C compiler be built in four days, if the feature set is carefully limited?" - "P4D" stands for the ISO 8601 notation meaning "four days." However, I actually completed the project by the morning of the third day. The code is written following the instructions at https://www.sigbus.info/compilerbook, and several key design decisions were inspired by the book. ## Dependencies * gcc * [just](https://github.com/casey/just), a general-purpose task runner ## Build ``` $ just build ``` ## Test ``` $ just test $ just test-all # test all things, including binary equiality between generations ``` ## Design To meet the four-day goal, many design decisions were made to reduce complexity (ideas directly taken from https://www.sigbus.info/compilerbook are not listed): * Simplified declaration syntax * No support for `typedef` * Structs always begin with `struct` keyword * No support for array types * No stack-allocated arrays * All arrays are heap-allocated and accessed via pointers * No support for function types * Type information always precede the variable name * Minimal syntax sugar * No increment/decrement operators * ~~No compound assignment operators~~ * Implemented after self-hosting * ~~No `while`~~ * Implemented after self-hosting * No `switch` * Limited preprocessor * Supports only simple `#define` that replaces identifiers with single integer or identifier * No global variables * Including `stdin`, `stdout`, and `stderr` * Only function/struct definitions/declarations are allowed at the top level * No variable shadowing * All variables are function-scoped ## License See [LICENSE](./LICENSE).