这是在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
特此免费授予获得此软件副本和相关文档文件副本(“软件”)的任何人,以无限制处理该软件,包括无限制的使用权,复制,复制,修改,合并,合并,发布,分发,分发,分发,订婚,和/或允许软件的副本,并允许对以下条件提供以下条件,以下是以下条件。
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人都不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权的诉讼中还是其他责任,是由软件,使用或与软件中的使用或其他交易有关的。