8cc — компилятор языка C
4К открытий4К показов
8cc — это компилятор для языка С. Он поддерживает все особенности С11 и вместе с тем его код настолько небольшой и простой, насколько это возможно. Исходный код есть на GitHub, или вот прямая ссылка на загрузку.
Компилятор может скомпилировать сам себя. Его код можно рассматривать одновременно и как реализацию языка С, и как пример того, что с помощью этой реализации можно скомпилировать.
Код 8cc писался специально так, чтобы быть наиболее лаконичным и простым для чтения, так что его можно использовать как хорошее учебное пособие. Тут есть и лексический анализатор, и препроцессор, и синтаксический анализатор. Всё это полезно при изучении того, какие стадии проходит код программы в процессе сборки.
Оптимизация кода не выполняется. Результат работы 8сс будет приблизительно раза в 2 медленнее, чем аналогичный для GCC. Однако автор планирует добавить некоторые базовые возможности по оптимизации в ближайшем будущем.
На текущий момент поддерживается только x86-64 Linux. Портирование на другие платформы пока что не значится в ближайших планах автора. При разработке использовалась Ubuntu 14, однако всё должно работать и на других дистрах x86-64 Linux.
На данный момент этот блок не поддерживается, но мы не забыли о нём!Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
Не ждите слишком многого от этого компилятора. Если натравить его на что-то отличное от его же собственного кода, то могут возникнуть ошибки. Данный проект реализован всего одним человеком за несколько месяцев его свободного времени.
Сборка
Запустите make для сборки:
В комплекте есть набор юнит-тестов, чтобы их запустить:
Следующая команда собирает 8сс трижды, чтобы убедится, что первая стадия компилятора может сама собрать вторую стадию, а вторая — третью. Затем сравниваются результаты второй и третьей стадии, чтобы убедится, что всё хорошо.
Автор
Rui Ueyama rui314@gmail.com
Ссылки на материалы по разработке компиляторов языка С
Кроме широко известной Dragon Book автор также рекомендует следующее для изучения:
- LCC: A Retargetable C Compiler: Design and Implementation http://www.amazon.com/dp/0805316701, https://github.com/drh/lcc
- TCC: Tiny C Compiler http://bellard.org/tcc/, http://repo.or.cz/w/tinycc.git/tree
- C99 standard final draft http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
- C11 standard final draft http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
- Dave Prosser’s C Preprocessing Algorithm http://www.spinellis.gr/blog/20060626/
- The x86-64 ABI http://www.x86-64.org/documentation/abi.pdf
Перевод с GitHub rui314/8cc
4К открытий4К показов