MazuCC

A minimalist C compiler with x86_64 code generation

Github stars Tracking Chart

MazuCC

MazuCC is a minimalist C compiler with x86_64 code generation.
It is intended to support partial C99 language features while keeping the code
as small and simple as possible.

Build

Run make to build:

$ make

MazuCC comes with unit tests. To run the tests, give "check" as an argument:

$ make check

MazuCC is known to work on both GNU/Linux and macOS.

Use MazuCC to compile C source:

$ ./mzcc  sample/nqueen.c

Alternatively, MazuCC accepts the stream from standard input. The equivalent
form for the above command is:

$ cat sample/nqueen.c, ./mzcc -

You will get the generated x86_64 assembly in AT&T syntax. The output can be
assembled and linked into a valid executable:

$ ./mzcc -o sample/nqueen.s sample/nqueen.c
$ gcc -no-pie -o sample/nqueen sample/nqueen.s

If MazuCC is compiled and executed on macOS, the above argument -no-pie
should be eliminated.

Reference output of MazuCC-compiled sample/nqueen:

Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .

Alternatively, you can dump internal abstract syntax tree:

echo 'struct {int x; char y; struct { int t; } z; } a;', ./mzcc --dump-ast -

The expected output in S-expression form:

(decl (struct (int)
              (char)
              ((struct (int)))) a)

Acknowledge

MazuCC is heavily inspired by 8cc.

License

MazuCC is freely redistributable under the BSD 2 clause license. Use of
this source code is governed by a BSD-style license that can be found in the
LICENSE file.

Main metrics

Overview
Name With Ownerjserv/MazuCC
Primary LanguageC
Program languageMakefile (Language Count: 4)
Platform
License:BSD 2-Clause "Simplified" License
所有者活动
Created At2019-04-21 19:45:22
Pushed At2020-10-09 03:11:18
Last Commit At2020-10-09 11:11:17
Release Count0
用户参与
Stargazers Count528
Watchers Count32
Fork Count66
Commits Count49
Has Issues Enabled
Issues Count10
Issue Open Count5
Pull Requests Count14
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private