Compiler un langage de programmation avec lui-même

10

Je suis étudiant en informatique. Je veux créer mon propre langage de programmation (un langage de base avec peu d'instructions).

Je sais faire un analyseur syntaxique, je l'ai déjà fait en Perl. Dans un article, j'ai lu quelque chose sur le compilateur, un compilateur se fait en soi.

Par exemple, le compilateur C est écrit en C. Comment est-ce possible? Je peux créer ma propre langue mais je ne sais pas comment l'exécuter? Une idée?

C'est vraiment une bonne question et je peux écrire un blog sur le projet.

BaptisteL
la source
Les gens ont expliqué comment démarrer, mais pourquoi en avez-vous besoin? Il n'y a aucune raison pour que vous ne puissiez pas compiler votre langage en utilisant un compilateur écrit en C, Perl ou autre. Bien sûr, ce serait bien d'avoir un compilateur pour votre langue écrit en lui-même, mais ce serait beaucoup de travail - il faudrait écrire au moins deux compilateurs pour l'obtenir (un en C / Perl / peu importe, un en Votre langue).
David Richerby
Hmm .. Je pense que je vais écrire mon premier compilateur en C et écrire une seconde dans mon langage. C'est vraiment intéressant de créer un petit langage de programmation, on peut apprendre beaucoup de l'informatique
BaptisteL

Réponses:

13

L'astuce consiste à démarrer . Vous écrivez d'abord un compilateur pour votre langue (ou un sous-ensemble de celle-ci) dans une autre langue. Ensuite, vous écrivez un compilateur pour votre langue (ou un grand sous-ensemble de celui que vous pouvez déjà gérer) dans votre langue. Vous utilisez l'ancien compilateur pour compiler le nouveau compilateur, puis le nouveau compilateur peut se compiler lui-même.

Yuval Filmus
la source
Donc, je peux créer mon premier compilateur en utilisant C et la prochaine fois je compilerai mon compilateur v2 avec le v1? Mais il y a un problème, comment pourrais-je savoir que le compilateur n'a aucun problème? J'ai besoin de convertir mon code source en assembleur? Ou dans autre chose?
BaptisteL
2
Comment pourrais-je savoir que le compilateur n'a aucun problème? Plus généralement, vous avez écrit un programme; comment savez-vous qu'il n'a pas de bugs? Non. Vous écrivez quelques tests et espérez le meilleur. Dois-je convertir mon code source en assembly? Définitivement pas. Vous pouvez faire confiance au compilateur C. Vous faites la même chose, mais avec l'assembly remplacé par C (ou tout autre langage de votre choix).
Yuval Filmus
D'accord, je dois faire confiance à mes compétences ^^ Je voulais demander au processus de faire le compilateur. Je ne comprends vraiment pas ce que fait un compilateur, analyseur syntaxique et lexical d'accord mais ensuite ??
BaptisteL
Ensuite, vous générez du code. Si vous ne voulez pas entrer dans les détails de la génération de code machine, vous pouvez toujours générer du code dans un autre langage, par exemple du code C, et utiliser un compilateur externe pour le compiler en code machine. (Ou vous pouvez utiliser un langage interprété et exécuter un interprète.)
Yuval Filmus
Hummm Non, je préfère le faire comme ça: Ma langue dans enter -> Code machine. Je ne veux pas convertir ma langue dans une autre (idem pour la première compilation) C'est possible?
BaptisteL
2

Un compilateur qui peut compiler ses propres sources est appelé un compilateur auto-hébergé . Les premiers compilateurs ont été écrits dans une autre langue. Par exemple, le premier compilateur C a probablement été écrit en assembleur. L'astuce dans l'utilisation d'un ancien compilateur de niveau inférieur s'appelle bootstrapping.

Bartosz Przybylski
la source