Il s'agit d'une question assez vague, je pense ; simplement en raison de la profondeur du sujet concerné. Un compilateur peut cependant être décomposé en deux parties distinctes : une partie supérieure et une partie inférieure. La partie supérieure prend généralement le langage source et le convertit en une représentation intermédiaire, et la partie inférieure s'occupe de la génération du code spécifique à la plate-forme.
Néanmoins, une idée pour une manière facile d'aborder ce sujet (celle que nous avons utilisée dans mon cours de compilateurs, au moins) est de construire le compilateur en deux parties décrites ci-dessus. Plus précisément, vous aurez une bonne idée de l'ensemble du processus en construisant simplement la partie supérieure.
Le fait de faire la première moitié vous permet d'acquérir l'expérience de l'écriture de l'analyseur lexical et de l'analyseur syntaxique et de passer à la génération d'un certain "code" (cette représentation intermédiaire dont j'ai parlé). Il prendra donc votre programme source et le convertira en une autre représentation et fera de l'optimisation (si vous le souhaitez), ce qui est le cœur d'un compilateur. La partie inférieure prendra ensuite cette représentation intermédiaire et générera les octets nécessaires pour exécuter le programme sur une architecture spécifique. Par exemple, la moitié inférieure prendra votre représentation intermédiaire et générera un exécutable PE.
Voici quelques livres sur ce sujet que j'ai trouvé particulièrement utiles Principes et techniques des compilateurs (ou le livre du dragon, en raison du joli dragon sur la couverture). Il contient d'excellentes théories et couvre les grammaires sans contexte d'une manière très accessible. De plus, pour construire l'analyseur lexical et l'analyseur syntaxique, vous utiliserez probablement les outils *nix lex et yacc. Et de manière assez inintéressante, le livre intitulé " lex et yacc "J'ai repris là où le Livre du Dragon s'était arrêté pour cette partie.
0 votes
ANTLR à fond. Toutes les ressources proposées ci-dessous me semblent excessives. ANTLR est toujours le meilleur ami du compilateur. A
0 votes
Si votre objectif principal est d'apprendre comment les idées de compilation fonctionnent en général - vous pouvez vérifier et SICP court pour l'interprétation structurée de programme d'ordinateur basé dans Scheme (liste) mais enseigne les principes généraux. mitpress.mit.edu/sicp . Ce livre m'a été recommandé par un vétéran qui travaille pour une société qui fait ces travaux de compilation et d'interprétation pour vivre !
0 votes
Une publicité éhontée : ma réponse à une question similaire .
0 votes
J'ai écrit un article sur la création d'un compilateur sur mon blog : orangejuiceliberationfront.com/how-to-write-a-compiler Il se concentre sur les éléments de base et les premiers pas, en fait. Il y a un tas d'autres articles sur la conception des compilateurs/codegènes/parseurs/langages.