Skip to content

nsfisis/P4Dcc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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, 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
      • Partially implemented after self-hosting
    • 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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published