Je me suis lancé un défi : écrire un compilateur C auto-hébergé en 10 heures. C'est le résultat, plus beaucoup de nettoyage (consultez les "versions" pour la version de 10 heures).
Mise en œuvre:
Langue:
if
, while
, do``while
, return
.=
, ?:
(ternaire), ||
, &&
, ==
, !=
, <
, >=
, +
, -
, *
, ++
, --
(post-opérations), !
, -
(unaire), []
, ()
true
et false
littéraux. Littéraux de chaîne, avec concaténation automatique. La philosophie générale était la suivante : inclure une fonctionnalité uniquement si elle réduit la taille totale du code. Ceci est poussé à son paroxysme dans la branche insane
.
git clone http://github.com/Fedjmike/mini-c
cd mini-c
make selftest
Cela produira d'abord cc
en compilant mini-c avec GCC. Ensuite, il ccself
en compilant mini-c avec cc
. Enfin, il effectue test/triangular
en utilisant ccself
et vérifie le résultat. Vous devriez obtenir quelque chose comme ceci :
$ 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 vous êtes sous Windows, vous devrez extraire la branche windows
. Sous Linux 64 bits, vous devrez peut-être sudo apt-get install gcc-multilib
pour pouvoir compiler et exécuter le code 32 bits.
Un autre compilateur C microscopique est c4 de rswier
. Il a implémenté plus de C, mais je dirais que le mien est plus simple :). De plus, c4 génère du code pour sa propre VM, alors que la mienne a la difficulté importante de travailler avec l'assembly x86 et cdecl.
J'ai écrit un autre compilateur C beaucoup plus avancé. Vérifiez-le. Il est également auto-hébergé, mais avec un ensemble de fonctionnalités beaucoup plus complet, et même quelques ajouts expérimentaux comme les lambdas.
Copyright (c) 2015 Sam Nipps
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.