MazuCC — минималистичный компилятор C с генерацией кода x86_64. Он предназначен для поддержки частичных функций языка C99, сохраняя при этом код как можно меньшим и простым.
Запустите make для сборки:
$ makeMazuCC поставляется с модульными тестами. Чтобы запустить тесты, укажите «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.