33 votes

Tutoriels pour écrire un analyseur syntaxique avec Javascript

J'ai vu quelques langues (à savoir CoffeeScript y LessCSS ) qui sont construits sur Javascript.

Existe-t-il des tutoriels pour écrire des langages/parseurs avec Javascript ?

13voto

Ira Baxter Points 48153

Pourquoi pensez-vous que les concepts fondamentaux de l'implémentation de langages "sur JavaScript" dépendent fondamentalement de JavaScript ? La plupart du temps, c'est juste un langage de programmation et des approches standard de type compilateur peuvent être appliquées ; on compile "simplement" en JavaScript au lieu d'instructions machine.

Voici un tutoriel sur l'écriture de compilateurs utilisant des méthodes de métacompilation très simples. Il cible JavaScript comme point de départ, mais il n'est pas non plus dédié à JavaScript. Ce tutoriel est basé sur un article de Val Schorre sur "MetaII", une sorte de métacompilateur .... daté. 1964 (oui, vous avez bien lu) . J'ai appris comment construire mon premier compilateur à partir de cet article (mais pas avec JavaScript :), et c'est toujours une technique précieuse :

Tutoriel du compilateur Meta II ciblant JavaScript

Si vous voulez quelque chose de plus immédiat, envisagez écrire un analyseur descendant récursif à la main. . Après en avoir écrit quelques-uns, vous apprécierez vraiment le génie de MetaII.

13voto

danja Points 489

Jison est modelé sur le générateur d'analyseur GNU Bison. Il prend une grammaire de langage au format Bison-like ou JSON et produit un analyseur Javascript pour ce langage. Si vous voulez faire un interpréteur basé sur un autre langage bien connu, il y a probablement une grammaire Bison quelque part que vous pouvez modifier pour Jison. J'ai trouvé qu'il était très simple de se lancer dans la création d'un DSL de toutes pièces.

1voto

edtechdev Points 489

Je commencerais par regarder d'autres langages qui compilent en javascript et voir ce qu'ils font. Voici une liste : https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

Consultez la liste des générateurs d'analyseurs en bas de cette page qui facilitent un peu les choses, comme jison et peg.js.

Il y a certaines limites ou obstacles lorsqu'on écrit un langage alternatif qui se compile en javascript, puisque javascript n'a pas été conçu pour être un 'bytecode' ou un runtime pour d'autres langages. Il n'y a pas de types statiques ou de système de classes, par exemple, comme en java et C#. Si vous ne faites qu'une modification mineure pour corriger certains des problèmes de javascript comme coffeescript et d'autres listés en haut de la page de ce lien, ce genre de choses n'est pas un problème, mais alors une question plus importante est pourquoi ne pas contribuer à coffeescript ou à des langages similaires à la place.

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