MazuCC — минималистичный компилятор C с генерацией кода x86_64. Он предназначен для поддержки частичных функций языка C99, сохраняя при этом код как можно меньшим и простым.
Запустите make для сборки:
$ make
MazuCC поставляется с модульными тестами. Чтобы запустить тесты, укажите «check» в качестве аргумента:
$ make check
Известно, что MazuCC работает как с GNU/Linux, так и с macOS.
Используйте MazuCC для компиляции исходного кода C:
$ ./mzcc sample/nqueen.c
Альтернативно, MazuCC принимает поток со стандартного ввода. Эквивалентная форма приведенной выше команды:
$ cat sample/nqueen.c | ./mzcc -
Вы получите сгенерированную сборку x86_64 в синтаксисе AT&T. Вывод можно скомпилировать и связать в действительный исполняемый файл:
$ ./mzcc -o sample/nqueen.s sample/nqueen.c
$ gcc -no-pie -o sample/nqueen sample/nqueen.s
Если MazuCC компилируется и выполняется в macOS, приведенный выше аргумент -no-pie
следует исключить.
Эталонный вывод sample/nqueen
скомпилированного MazuCC:
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .
Альтернативно вы можете выгрузить внутреннее абстрактное синтаксическое дерево:
echo ' struct {int x; char y; struct { int t; } z; } a; ' | ./mzcc --dump-ast -
Ожидаемый результат в форме S-выражения:
(decl (struct (int)
(char)
((struct (int)))) a)
MazuCC во многом вдохновлен 8cc.
MazuCC распространяется свободно в соответствии с лицензией BSD 2. Использование этого исходного кода регулируется лицензией в стиле BSD, которую можно найти в файле LICENSE.