Question

J'ai un projet dans lequel un utilisateur doit définir un ensemble d'instructions pour une interface utilisateur entièrement écrite en javascript. Je dois pouvoir analyser une chaîne d'instructions, puis les traduire en instructions. Existe-t-il des bibliothèques 100% javascript pour l'analyse syntaxique? Ou un générateur qui générera en javascript? Merci!

Était-ce utile?

La solution

Quelque chose comme http://jscc.phorward-software.com/ , peut-être?

        

JS / CC est le premier système de développement d’analyseur disponible pour JavaScript et ECMAScript - Dérive. Il a été développé, à la fois dans l’intention de construire un système de développement de compilateur productif et dans l’intention de créer un environnement universitaire facile à utiliser pour les personnes intéressées par la manière dont la génération de tables d’analyse est effectuée en général. analyse ascendante.

Les logiciels indépendants de la plateforme unissent à la fois: Une expression régulière analyseur lexical générateur correspondant à des jetons du flux de caractères d'entrée et a LALR (1) , générateur d’analyseur , calculant les tables d’analyse pour un spécification de la grammaire sans contexte et construction autonome , analyseur de travail. La grammaire sans contexte fournie à JS / CC est définie dans un méta-langage basé sur Backus-Naur-Form et permet d’évaluer l’insertion de code sémantique individuel lors de la réduction d’une règle.

JS / CC lui-même a été entièrement écrit en ECMAScript . Il peut donc être exécuté de différentes manières: en tant que JavaScript intégré à un navigateur, indépendant de la plate-forme, intégré à un site Web, en tant qu'application hôte de script Windows , en tant qu'exécutable JScript.NET compilé, en tant qu'application interprétée par Mozilla / Rhino ou Mozilla / Spidermonkey, ou en tant que script shell V8 sous Windows, * nix, Linux et Mac OSX. Cependant, pour une exécution productive, il est recommandé d'utiliser les versions en ligne de commande. Ces versions sont capables d’assembler un compilateur complet à partir d’une spécification d’analyseur JS / CC, qui est ensuite stocké dans un fichier source JavaScript .js.

Autres conseils

Si vous souhaitez créer des analyseurs JavaScript et des générateurs de code, Découvrez l'implémentation de MetaII en Javascript.

Un tutoriel sur le compilateur MetaII vous explique comment construire un système de compilateur entièrement autonome capable de se traduire lui-même et d’autres langues:

Didacticiel du compilateur MetaII

Tout est basé sur un étonnant petit document technique de 10 pages rédigé par Val Schorre: META II: un langage d’écriture pour compilateur basé sur la syntaxe d’honnête à dieu 1964. L’auto-description complète du compilateur MetaII est d’environ 30 lignes! J'ai appris à construire des compilateurs à partir de là en 1970. Il y a un moment époustouflant quand vous comprenez enfin comment le compilateur peut se régénérer.

Le didacticiel explique MetaII, son fonctionnement et implémente MetaII en compilant MetaII en JavaScript. Vous pouvez facilement modifier ce compilateur pour analyser d'autres langues et produire un code Javascript différent.

Je connais l'auteur du site Web depuis mes études, mais je n'ai rien à voir avec le site Web.

Jison est probablement le meilleur et le plus actif lexer & amp; générateur d’analyseur pour Javascript. Il imite Bison et Yacc.

Jison: http://zaach.github.io/jison/

Si vous voulez juste un lexer léger (~ 100 sloc), jetez un coup d’œil à Lexed.js: https: // github.com/tantaman/lexed.js

Pour les tâches d'analyse simples, j'aime utiliser une variante de Pratt Analyseur de priorité Top Down Operator . Alors que Pratt a écrit le texte original en utilisant un vieux dialecte Lisp, les mêmes concepts peuvent facilement être utilisés dans la plupart des langues. En fait, Douglas Crockford a écrit un excellent article sur la hiérarchie de l'opérateur de haut en bas, en JavaScript , qui pourrait être exactement ce dont vous avez besoin.

Voici un exemple d'analyseur syntaxique pour un "pseudo" langage naturel des instructions, implémenté en pure en JavaScript avec Chevrotain , analyse de DSL :

https://github.com/SAP/ chevrotain / blob / master / exemples / analyseur / inheritance / inheritance.js

Cet exemple inclut même la prise en charge de plusieurs langues naturelles (anglais et allemand) à l'aide de l'héritage grammatical.

Chevrotain appartient à la catégorie des "bibliothèques pour l'analyse qui sont 100% en javascript", car elle ne génère pas de code . Utiliser Chevrotain est similaire à "Fabrication manuelle". un analyseur décent récursif, mais uniquement sans la plupart des maux de tête tels que:

  • Création de la fonction Lookahead (choix de l'alternative à prendre)
  • Récupération automatique des erreurs.
  • Détection de récursivité gauche
  • Détection d'ambiguïté.
  • Informations sur la position.
  • ...

comme Chevrotain le gère automatiquement.

En fonction de la conception de l'ensemble d'instructions, vous pourrez peut-être utiliser la fonction intégrée eval de Javascript, qui analyse le code source Javascript; vous pourrez peut-être écrire un simple traducteur pour convertir les instructions en code Javascript.

Au fait, faites très attention aux trous XSS.

si vous recherchez vraiment un lexer, essayez prettify .

Si vous voulez un lexer et seulement un lexer, jetez un œil à ceci: https://github.com / aaditmshah / lexer

C'est un lexer JavaScript pur avec de nombreuses fonctionnalités puissantes écrites en quelques lignes de code.

Je recherchais quelque chose de similaire qui ne présenterait aucune faille de sécurité et je suis tombé sur deux ressources. Ils n'analysent pas le script, mais l'exécutent de manière "sûre". environnement - quelque chose que vous ne pouvez pas garantir lorsque vous utilisez la fonction eval . Donc, je ne sais pas si c'est exactement ce que vous cherchez, mais jetez un oeil:

  1. jsandbox - Bac à sable Javascript
  2. Google Caja - iframe virtuel.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top