ELVM에 구축 된 8CC의 VIM 스크립트 포트입니다. 다시 말해, 이것은 VIM 스크립트로 작성된 완전한 C 컴파일러입니다.
8CC는 X86_64 Linux 용으로 잘게 작성된 작은 C 컴파일러입니다. C11- 인식 및 자조입니다.
Elvm은 an ang v irtual m achine입니다. ELVM은 8CC를 재사용하여 자체 중간 표현 인 EIR을 방출합니다. ELVM은 C 코드를 Retargeted 8CC를 프론트 엔드로 EIR로 컴파일합니다. 그런 다음 백엔드에서 EIR을 다양한 대상 (Python, Ruby, C, Brainfxxk, Piet, Befunge, Emacs Lisp, ...)으로 변환합니다. 아키텍처는 LLVM과 비슷합니다. 이 프레젠테이션은 ELVM 아키텍처를 더욱 아는 좋은 것입니다 (일본어로도).
ELVM은 다양한 대상으로 컴파일 할 수 있습니다. 그래서 새로운 'vim 스크립트'백엔드를 추가하고이를 사용하여 8CC의 C 코드를 VIM 스크립트로 변환합니다.
이제 8cc.vim은 순수한 VIM 스크립트로 작성되었습니다. 8CC.VIM은 프론트 엔드 (Customized 8CC) 및 백엔드 (ELC)로 구성됩니다. C 코드를 VIM 스크립트로 컴파일 할 수 있습니다. 물론 VIM은 생성 된 VIM 스크립트 코드를 평가할 수 있습니다.
이것은 장난감 프로젝트입니다. 8cc.vim은 훨씬 느립니다. MacBook Pro 2015 년 초 (2.7GHz Intel Core i5)에서 가장 간단한 putchar() 프로그램을 컴파일하는 데 824 (Frontend : 430 + 백엔드 : 396)가 소요됩니다. 그러나 실제로 그것은 작동합니다!
VM 스크립트에서 VM이 실행되면 8cc.vim은 Linux, OS X 및 (희망적으로) Windows에서 작동합니다.
이 저장소와 :packadd 복제하십시오 (참조 :help pack-add ).
또는 좋아하는 플러그인 관리자 (vim-plug, dein.vim 등)를 사용하십시오.
:EccCompile:EccRuneightcc#compile()eightcc#run()현재 버퍼에서 C 코드를 준비하십시오. 다음은 'Hello World'예입니다.
int putchar ( int x );
int main () {
const char * p = "Hello, world!n" ;
for (; * p ; p ++ )
putchar ( * p );
return 0 ;
} 그런 다음 실행 :EccCompile 명령. 이를 위해서는 --verbose 와 같은 몇 가지 옵션을 사용할 수 있습니다. 자세한 내용은 :EccCompile --help 참조하십시오.
20 분 이상 오랜 시간이 걸립니다. 휴식을 취하고 약간의 ☕를 얻자.
결과적으로 C 코드에서 컴파일 된 VIM 스크립트 코드로 새 버퍼가 열립니다. 로드 :w putchar.vim 및 :source putchar.vim .
마지막으로 vim 스크립트 코드 아래에서 실행하십시오. 컴파일 된 코드는 VIM 스크립트의 VM에서 실행됩니다. SetupVM() 함수는 VM 인스턴스를 만듭니다.
:let vm = SetupVM()
:call vm.run()
VIM 스크립트를 실행 한 결과 만 보려면 다음 과정을 건너 뛰기 위해 :EccRun 사용할 수 있습니다.
대응 :EccCompile 및 :EccRun , eightcc#compile() 및 eightcc#run() 함수를 사용할 수 있습니다. 실행 옵션을 위해 하나의 사전을 사용할 수 있습니다.
MIT 라이센스
저작권 (C) 2016 Rhysd
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게는 허가가 부여됩니다. 소프트웨어의 사용, 복사, 수정, 합병, 배포, 배포, 숭고 및/또는 소프트웨어의 사본을 판매 할 권한을 포함하여 제한없이 소프트웨어를 처리 할 수 있도록 소프트웨어를 제공 할 권한이 없습니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 소프트웨어의 사용 또는 기타 거래에서 발생하는 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다.