c4 README

The project's README from github.com/rswier/c4. As one markdown file: README.md.

c4 - C in four functions

An exercise in minimalism.

Try the following:

gcc -o c4 c4.c
./c4 hello.c
./c4 -s hello.c

./c4 c4.c hello.c
./c4 c4.c c4.c hello.c

c4 (rswier/c4)

Searching Database…

10.8K ·GitHub
Что это?C4 — крошечный самохостящийся компилятор и интерпретатор для небольшого подмножества языка C, написанный всего в четырёх функциях как упражнение в предельном минимализме.
Это компилятор или интерпретатор?И то и другое: c4 разбирает исходный код C и затем исполняет его напрямую через собственную встроенную виртуальную машину, а не порождает отдельный бинарник. Он даже способен компилировать и запускать собственный исходный код.
Как его запустить?Скомпилируйте единственный исходный файл командой 'gcc -o c4 c4.c', затем запустите его на C-файле, например './c4 hello.c'.
Нужно что-то ещё, кроме компилятора C?Нет, достаточно стандартного компилятора C вроде gcc, чтобы собрать единственный файл c4.c; других зависимостей нет.
Он поддерживает весь язык C?Нет, c4 реализует лишь небольшое подмножество C, нужное для компиляции самого себя (char, int, указатели, базовый поток управления), а не полный стандарт C.
Он работает на Linux, macOS и Windows?Поскольку это просто стандартный исходный файл на C, собираемый с помощью gcc, он работает везде, где доступен компилятор C, включая Linux, macOS и Windows.
Что именно делают эти четыре функции?Весь компилятор организован в виде токенизатора, парсера выражений, парсера инструкций и главной управляющей функции; вместе они выполняют лексический анализ, разбор, генерацию кода и исполнение.
Что делает флаг '-s'?Запуск './c4 -s hello.c' печатает сгенерированные инструкции виртуальной машины вместе с исходником, позволяя увидеть, как именно c4 транслирует ваш код.
Зачем запускать './c4 c4.c c4.c hello.c'?Так c4 интерпретирует сам себя, который интерпретирует сам себя ради запуска программы, — демонстрация того, что c4 самохостящийся и может компилировать и исполнять собственный исходный код.
Для кого этот проект?Он для тех, кому интересно, как компиляторы и интерпретаторы устроены внутри, а не для написания настоящих программ на C.
Creator
rswier
Size
<0.1 MB
Stars
10.8K
Updated
CommitMar 14
Age
11y
Commits · 90 Days