Me propuse un desafío: escribir un compilador de C autohospedado en 10 horas. Este es el resultado, además de mucha limpieza (consulte "lanzamientos" para la versión de 10 horas).
Implementación:
Idioma:
if , while , do``while , return .= , ?: (ternario), || , && , == , != , < , >= , + , - , * , ++ , -- (posoperatorio), ! , - (unario), [] , ()true y false . Literales de cadena, con concatenación automática. La filosofía general era: incluir solo una característica si reduce el tamaño total del código. Esto se lleva al extremo en la rama insane .
git clone http://github.com/Fedjmike/mini-c
cd mini-c
make selftest
Esto primero producirá cc compilando mini-c con GCC. Luego se convierte ccself compilando mini-c con cc . Finalmente realiza test/triangular usando ccself y verifica el resultado. Deberías obtener algo como esto:
$ 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 ]
Si está en Windows, deberá consultar la rama windows . En Linux de 64 bits, es posible que necesite sudo apt-get install gcc-multilib para poder compilar y ejecutar el código de 32 bits.
Otro compilador microscópico de C es c4 de rswier . Implementó más C, pero yo diría que el mío es más simple :). Además, c4 genera código para su propia VM, mientras que la mía tiene la importante dificultad de trabajar con ensamblador x86 y cdecl.
Escribí otro compilador de C mucho más avanzado. Échale un vistazo. También es autohospedado, pero con un conjunto de funciones mucho más completo e incluso algunas adiciones experimentales como lambdas.
Copyright (c) 2015 Sam Nipps
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.