저는 스스로에게 도전 과제를 설정했습니다. 10시간 안에 자체 호스팅 C 컴파일러를 작성하는 것입니다. 이는 많은 정리 작업이 추가된 결과입니다(10시간 버전의 경우 "릴리스" 확인).
구현:
언어:
if
, while
, do``while
, return
.=
, ?:
(삼항), ||
, &&
, ==
, !=
, <
, >=
, +
, -
, *
, ++
, --
(작업 후), !
, -
(단항), []
, ()
true
및 false
리터럴. 자동 연결이 포함된 문자열 리터럴입니다. 일반적인 철학은 전체 코드 크기를 줄이는 경우에만 기능을 포함하는 것입니다. 이는 insane
분야에서 극단으로 치닫습니다.
git clone http://github.com/Fedjmike/mini-c
cd mini-c
make selftest
먼저 GCC로 mini-c를 컴파일하여 cc
생성합니다. 그런 다음 cc
로 mini-c를 컴파일하여 ccself
만듭니다. 마지막으로 ccself
사용하여 test/triangular
만들고 결과를 확인합니다. 다음과 같은 결과를 얻어야 합니다:
$ make selftest
gcc -std=c11 -Werror -Wall cc.c -o cc
cc cc.c
gcc -m32 a.s -o ccself
ccself tests/triangular.c
gcc -m32 a.s -o triangular; triangular 5; [ $? -eq 15 ]
Windows를 사용하는 경우 windows
분기를 체크아웃해야 합니다. 64비트 Linux에서는 32비트 코드를 컴파일하고 실행하려면 sudo apt-get install gcc-multilib
실행해야 할 수도 있습니다.
또 다른 미세한 C 컴파일러는 rswier
의 c4입니다. 그는 더 많은 C를 구현했지만 내 것이 더 간단하다고 말하고 싶습니다 :). 또한 c4는 자체 VM에 대한 코드를 생성하는 반면 내 VM은 x86 어셈블리 및 cdecl로 작업하는 데 상당한 어려움이 있습니다.
나는 훨씬 더 발전된 또 다른 C 컴파일러를 작성했습니다. 확인해 보세요. 이것도 자체 호스팅이지만 훨씬 더 완전한 기능 세트와 람다와 같은 일부 실험적인 추가 기능도 포함되어 있습니다.
저작권 (c) 2015 샘 닙스
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.