37 votes

Est-il plus moderne, OO version de la "nous allons Construire un Compilateur"?

Est-il plus moderne, peut-être orientée objet, soit l'équivalent de Jack Crenshaw du "nous allons Construire un Compilateur" de la série?

Un temps, j'ai trébuché à travers "nous allons Construire un Compilateur" et pouvait tout simplement pas résister à écrire un peu de code. J'ai écrit un appel récursif de la descente compilateur C en C# qu'en sortie .NET CIL. "Écrire une fois, fuite de partout" est mon slogan.

Dommage que je ne savais pas jusqu'à ce que trop tard que l'analyse C est un cauchemar.

Je m'intéresse maintenant à l'écriture d'un compilateur Java en Java, sorties .NET CIL ou assemblées dans le but de l'auto-amorçage. J'espérais qu'il pourrait certains nouveaux tutoriels coups de pied autour.

En aparté, voulez-vous passer plus de temps avec la conception ou voulez-vous tout simplement écrire des tonnes de tests à l'appui de la capacité sans pitié refactoriser. En y repensant, je me penche vers ce dernier. Le compilateur a travaillé, mais le code était vraiment horrible.

6voto

Timothy Points 2468

Il semble que vous a complètement manqué le point de Crenshaw des tutoriels. LBC n'est pas à propos de l'écriture joli, propre, ou un code efficace. Il est tout au sujet de mettre quelque chose qui est ancré dans un cadre formel de la théorie à un niveau où décontracté, le codeur peut facilement et rapidement hack rudimentaire (mais de travail!) compilateur.

Quand j'ai lu la CL années en arrière, j'ai réécrit les exemples en C#. Je suis sûr que la classe de mise en page n'est pas la meilleure, ou des tâches correctement séparés, mais il est comparable à ses Pascal. Je serais heureux de partager le code avec vous si vous aimez-- laissez-moi savoir et je peux la mettre en ligne et de partager le lien.

Dans mon temps libre, j'ai été le piratage de sortir un peu de l'écriture dans le but d'unifier les philosophies de la CL et notions de base de la Conception du Compilateur ensemble-- walkling loin avec la pratique, code de travail à la fin de chaque unité/d'un chapitre, avec aussi discuter de certaines théorique des trucs après avoir exploré les idées, de sorte que le lecteur comprenne pourquoi les choses sont comme elles sont. Mais il a fallu Crenshaw ans à écrire sa série incomplète, de sorte que la mine de mon être un rêve... et j'utilise des C (justement parce que c'est pas du C++ ou Java).

5voto

Martin Dow Points 2161

Jetez un oeil à Terence Parr "Langue de la mise en Œuvre des Schémas". Il a écrit ANTLR - un analyseur générateur pour Java - alors, connaît son affaire. Il explique les principes de complier design vraiment bien et s'accumule progressivement.

Martin Fowler "Spécifique au Domaine des Langues" est également bon. C'est un peu différent que d'être un pur compilateurs sûr, mais c'est une bonne référence sur les concepts clés de la conception de langage.

3voto

Richard Cook Points 10763

Je suis un fan de "MiniJava" et associé au travail sur la base "Moderne Compilateur mise en Œuvre en Java" de la famille de livres. Ce n'est pas tout à fait répondre à toutes les exigences que vous mentionnez comme un MiniJava mise en œuvre sera, en général, de générer du code natif - mais le moteur peut être facilement modifié pour émettre MSIL ou quoi que ce soit.

1voto

Escualo Points 12584

Avez-vous pris un coup d'oeil à la PyPy projet? C'est un Python de la mise en œuvre du langage Python. Peut-être il peut être une source d'inspiration pour votre objectif de l'auto-amorçage de Java?

0voto

manuel aldana Points 4317

Quand on pense à l'apprentissage de ce genre de choses, vous devriez jeter un oeil au livre de la langue à la mise en œuvre des schémas et antlr-référence

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X