Need help with wgtcc?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

wgtdkp
587 Stars 112 Forks MIT License 403 Commits 16 Opened issues

Description

A small C11 compiler

Services available

!
?

Need anything else?

Contributors list

# 58,633
Google
Shell
assembl...
cpp11
378 commits
# 409,190
Shell
assembl...
cpp11
preproc...
4 commits
# 499,366
Shell
assembl...
cpp11
preproc...
1 commit
# 20,500
Shell
assembl...
cpp11
graphsa...
1 commit
# 70,564
Shell
syntax-...
webfram...
julia-l...
1 commit

wgtcc Build Status codecov

A small C11 compiler in C++11.

Environment

  1. x86-64
  2. linux 4.4.0
  3. clang 3.8.0 (or any version supports C++11)

Build

  cmake . -Bbuild
  cd build && make && make test

Install

  make install

Then you can play with the examples:

  wgtcc example/heart.c
  wgtcc example/chinese.c

Without Install

Try this:

  ./wgtcc -no-pie -I../include ../example/heart.c

Notice

As wgtcc doesn't support PIC/PIE, if you are using gcc >= 6.2.0, specify -no-pie explicitly:

wgtcc -no-pie example/heart.c
wgtcc -no-pie example/chinese.c

Goal

wgtcc is aimed to implement the full C11 standard with some exceptions:

  1. Some features are supported only in grammar level(like keyword register).
  2. Features that disgusting me are removed (like default int type without type specifier).
  3. Some non standard GNU extensions are supported, but you should not rely on wgtcc of a full supporting.

Front End

A basic recursive descent parser.

Back End

wgtcc generates code from AST directly. The algorithm is TOSCA (top of stack caching). It is far from generating efficient code, but at least it works and generates code efficently.

Memory Management

Through wgtcc was written in C++, I paid no effort for memory management except for a simple memory pool to accelerate allocations. only new is preferred because wgtcc runs fast and exits immediately after finishing parsing and generating code.

Reference

  1. Compilers Principles, Techniques and Tools. Second Edition.
  2. N1548, C11 standard draft
  3. 64-ia-32-architectures-software-developer-manual-325462
  4. 8cc
  5. 9c
  6. macro expansion algorithm

Todo

  • [ ] support GNU extensions (e.g. keyword __attribute__)
  • [ ] support variable length array
  • [ ] optimization (e.g. register allocation)
  • [x] support type qualification

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.