這是在ELVM上構建的8CC的VIM腳本端口。換句話說,這是用VIM腳本編寫的完整的C編譯器。
8cc是X86_64 Linux的精美編寫的小型編譯器。這是C11的意識和自我託管。
eLVM是a an an an an an an an a achine 。 ELVM重新制定8cc,以發出其自己的中間表示EIR。 ELVM將C代碼與重新定位的8cc作為前端一起編譯為EIR。然後將EIR轉化為後端的各種目標(Python,Ruby,C,Brainfxxk,Piet,Befunge,Emacs lisp,...)。該體系結構類似於LLVM。該演示文稿是進一步了解ELVM架構的好東西(儘管在日語中)。
ELVM可以將自己編譯為各種目標。因此,我添加了一個新的“ VIM腳本”後端,並使用它將8CC的C代碼轉換為VIM腳本。
現在8cc.vim用純VIM腳本編寫。 8cc.vim由前端(自定義8cc)和後端(ELC)組成。它可以將C代碼編譯到VIM腳本中。當然,VIM可以評估生成的VIM腳本代碼。
請注意,這是一個玩具項目。 8cc.vim要慢得多。它需要824(前端:430 +後端:396)秒才能編譯2015年初MacBook Pro上最簡單的putchar()程序(2.7 GHz Intel Core i5)。但是實際上它有效!
當VM在VIM腳本上運行時,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()函數。他們可以將一個字典用於執行選項。
麻省理工學院許可證
版權(C)2016 RHYSD
特此免費授予獲得此軟件副本和相關文檔文件副本(“軟件”)的任何人,以無限制處理該軟件,包括無限制的使用權,複製,複製,修改,合併,合併,發布,分發,分發,分發,訂婚,和/或允許軟件的副本,並允許對以下條件提供以下條件,以下是以下條件。
上述版權通知和此許可通知應包含在軟件的所有副本或大量部分中。
該軟件是“原樣”提供的,沒有任何形式的明示或暗示保證,包括但不限於適銷性,特定目的的適用性和非侵權的保證。在任何情況下,作者或版權持有人都不應對任何索賠,損害賠償或其他責任責任,無論是在合同,侵權的訴訟中還是其他責任,是由軟件,使用或與軟件中的使用或其他交易有關的。