8cc — компилятор языка C

8cc — это компилятор для языка С. Он поддерживает все особенности С11 и вместе с тем его код настолько небольшой и простой, насколько это возможно. Исходный код есть на GitHub, или вот прямая ссылка на загрузку.

Компилятор может скомпилировать сам себя. Его код можно рассматривать одновременно и как реализацию языка С, и как пример того, что с помощью этой реализации можно скомпилировать.

Код 8cc писался специально так, чтобы быть наиболее лаконичным и простым для чтения, так что его можно использовать как хорошее учебное пособие. Тут есть и лексический анализатор, и препроцессор, и синтаксический анализатор. Всё это полезно при изучении того, какие стадии проходит код программы в процессе сборки.

Оптимизация кода не выполняется. Результат работы 8сс будет приблизительно раза в 2 медленнее, чем аналогичный для GCC. Однако автор планирует добавить некоторые базовые возможности по оптимизации в ближайшем будущем.

На текущий момент поддерживается только x86-64 Linux. Портирование на другие платформы пока что не значится в ближайших планах автора. При разработке использовалась Ubuntu 14, однако всё должно работать и на других дистрах x86-64 Linux.

Примечание Не ждите слишком многого от этого компилятора. Если натравить его на что-то отличное от его же собственного кода, то могут возникнуть ошибки. Данный проект реализован всего одним человеком за несколько месяцев его свободного времени.

Сборка

Запустите make для сборки:

В комплекте есть набор юнит-тестов, чтобы их запустить:

Следующая команда собирает 8сс трижды, чтобы убедится, что первая стадия компилятора может сама собрать вторую стадию, а вторая — третью. Затем сравниваются результаты второй и третьей стадии, чтобы убедится, что всё хорошо.

Автор

Rui Ueyama rui314@gmail.com

Ссылки на материалы по разработке компиляторов языка С

Кроме широко известной Dragon Book автор также рекомендует следующее для изучения:

Перевод с GitHub rui314/8cc