1 points par GN⁺ 2025-12-12 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Le projet réimplémente le tutoriel « Let’s Build a Compiler » de Jack Crenshaw, publié entre 1988 et 1995, en Python et WebAssembly.
  • L’original utilisait Pascal et l’assembleur Motorola 68000, mais ce travail le transforme en code exécutable dans un environnement moderne.
  • Le cœur du tutoriel est la mise en œuvre directe d’un analyseur descendant récursif (recursive-descent parser) et une approche qui génère du code assembleur réel dès les premières étapes.
  • La méthode de Crenshaw repose sur la traduction dirigée par la syntaxe (syntax-directed translation), mais montre ses limites au stade du traitement des types.
  • Cette réimplémentation est notable car elle restaure ce classique sous une forme que les développeurs modernes peuvent exécuter et expérimenter directement.

Contexte du tutoriel classique

  • Le « Let’s Build a Compiler » de Jack Crenshaw, publié entre 1988 et 1995, est un guide d’initiation à la construction de compilateurs qui reste fréquemment cité aujourd’hui.
    • Le texte original est rédigé en Pascal et produit du code assembleur Motorola 68000.
    • Même en 2025, 35 ans plus tard, il continue d’être régulièrement évoqué, notamment sur Hacker News.
  • L’auteur de l’article l’a découvert en 2003 et en a été impressionné; en 2025, il l’a ensuite remis en forme en Python et WebAssembly.

Réécriture en Python et WebAssembly

  • Plutôt qu’une simple lecture, le compilateur du tutoriel a été traduit en Python et implémenté pour générer de la WebAssembly (WASM).
  • Le résultat est publié dans le dépôt GitHub (eliben/letsbuildacompiler).
    • Le fichier TUTORIAL.md explique comment chaque partie de l’original est mappée vers du code Python.
    • Les lecteurs peuvent tester du code directement exécutable tout en suivant le tutoriel original.

Exemple de langage KISS et génération WASM

  • Il présente le résultat de la compilation, avec le compilateur Python, d’un programme exemple du langage KISS conçu par Crenshaw.
    • L’exemple inclut procedure, des boucles while ainsi que le passage par valeur et par référence.
  • Le texte WASM généré contient une logique de gestion des paramètres passés par référence (by-reference parameter), avec très peu d’optimisations appliquées.
  • La partie où la variable globale X est renvoyée implicitement depuis la fonction main constitue un dispositif pratique pour les tests.
  • Le code WASM généré est utilisé dans des tests de validation des résultats attendus par exécution réelle.

Atouts du tutoriel

  • Le tutoriel de Crenshaw construit progressivement un analyseur descendant récursif, en mettant l’accent sur la génération de code réellement opérationnel plutôt que sur une théorie trop complexe.
    • À l’époque, lex et yacc étaient considérés comme des standards, mais la simplicité et la clarté d’un parseur écrit à la main ont eu un impact majeur.
    • Par la suite, pendant 20 ans, l’auteur est devenu adepte des analyseurs descendants récursifs faits à la main.
  • Alors que la plupart des cours de l’époque se concentraient sur l’analyse syntaxique, Crenshaw abordait la génération de code assembleur dès les premières phases.

Limites et améliorations possibles

  • Le tutoriel utilise la traduction dirigée par la syntaxe (syntax-directed translation) pour générer directement le code pendant l’analyse syntaxique.
    • Cette approche est utile pour l’apprentissage, mais elle a la limite que, sans disposer au préalable des informations de type, il est difficile d’optimiser.
  • À partir de la partie 14, où sont introduits les types, il apparaît qu’une approche structurée basée sur une représentation intermédiaire (IR) ou un AST est nécessaire.
  • Il n’est pas précisé pourquoi Crenshaw a interrompu le tutoriel après la partie 14, mais une relation possible avec cette limite est évoquée.
  • L’auteur considère qu’une approche où la partie 14 sert de pivot, avec génération d’un AST suivie de la vérification des types et de la génération de code, serait plus adaptée.

Conclusion

  • Le tutoriel original conserve une lisibilité et une utilité remarquables comme introduction à la construction de compilateurs.
  • Cette version Python/WASM complète l’implémentation pour permettre aux développeurs modernes d’apprendre sans dépendre de technologies obsolètes.
  • Mise à disposition via le dépôt GitHub, elle permet à chacun de faire des essais et est saluée comme une réinterprétation moderne offrant une expérience concrète de la structure d’un compilateur.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.