Esta é uma porta de script Vim de 8cc construída no ELVM. Em outras palavras, este é um compilador C completo escrito no Script Vim.
8CC é um compilador C pequeno e bem escrito para x86_64 Linux. É com reconhecimento de C11 e auto-hospedado.
Elvm é um e -l ang vul , m achine . Elvm redireciona 8cc para emitir sua própria representação intermediária, EIR. O ELVM compila o código C em EIR com o retargetado 8cc como front -end. E depois traduz o EIR em vários alvos (Python, Ruby, C, Brainfxxk, Piet, Conventge, Emacs Lisp, ...) no back -end. A arquitetura se assemelha a llvm. Esta apresentação é uma coisa boa para conhecer ainda mais a arquitetura ELVM (embora em japonês).
O ELVM pode se compilar em vários alvos. Por isso, adicionei um novo back -end 'script vim' e o uso para traduzir o código C de 8cc em script Vim.
Agora 8cc.vim está escrito no script puro Vim. 8cc.vim consiste em front -end (personalizado 8cc) e back -end (ELC). Ele pode compilar o código C no script Vim. E, é claro, o VIM pode avaliar o código de script VIM gerado.
Observe que este é um projeto de brinquedo. 8cc.vim é muito mais lento. São necessários 824 (Frontend: 430 + back -end: 396) segundos para compilar o programa putchar() mais simples no MacBook Pro no início de 2015 (2,7 GHz Intel Core i5). Mas na verdade funciona!
À medida que a VM é executada no script Vim, 8cc.vim funciona no Linux, OS X e (espero) Windows.
Clone este repositório e :packadd (consulte :help pack-add ).
Ou use seu gerenciador de plug-in favorito (vim-plug, dein.vim e assim por diante).
:EccCompile:EccRuneightcc#compile()eightcc#run()Prepare seu código C no buffer atual. A seguir, é um exemplo de 'Hello World'.
int putchar ( int x );
int main () {
const char * p = "Hello, world!n" ;
for (; * p ; p ++ )
putchar ( * p );
return 0 ;
} Em seguida, execute :EccCompile . Observe que você pode usar várias opções, como --verbose para isso. Consulte :EccCompile --help para obter mais detalhes.
Leva muito tempo 20 minutos ou mais. Vamos descansar e pegar alguns ☕.
Como resultado, o novo buffer é aberto com o código de script VIM, que foi compilado a partir do código C. Carregue -o por :w putchar.vim e :source putchar.vim .
Finalmente, execute abaixo o código de script Vim por sua mão. O código compilado é executado na VM no script VIM. A função SetupVM() cria uma instância da VM.
:let vm = SetupVM()
:call vm.run()
Se você deseja ver apenas o resultado da execução do script VIM, pode usar :EccRun para pular o processo acima.
Com o correspondente :EccCompile e :EccRun , você pode usar funções eightcc#compile() e eightcc#run() . Eles podem levar um dicionário para opções de execução.
MIT Licença
Copyright (c) 2016 RHYSD
A permissão é concedida, gratuita, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, inclusive sem limitação os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, mobilizar o software e/ou vender cópias do software e permitir que as pessoas a quem
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsáveis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.