Lexer écrit en Javascript?

J'ai un projet où un utilisateur doit définir un ensemble d'instructions pour un ui qui est complètement écrit en javascript. Je dois avoir la possibilité d'analyser une chaîne d'instructions et de les traduire dans les instructions. Existe-t-il des bibliothèques là-bas pour l'analyse qui sont 100% javascript? Ou un générateur qui générera en javascript? Merci!

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

    JS / CC est le premier système de développement de parser disponible pour JavaScript et ECMAScript -derivates. Il a été développé, tous les deux, dans l'intention de construire un système productif de développement de compilateurs et dans l'intention de créer un environnement académique facile à utiliser pour les personnes intéressées par la génération d'une table d'analyse générale dans l'analyse ascendante.

    Les groupes de logiciels indépendants de la plate-forme à la fois: un générateur d' analyseur lexical basé sur l'expression régulière correspondant aux jetons individuels du flux de caractères d'entrée et un générateur d'analyseur LALR (1) , calculant les tables d'analyse pour une spécification de grammaire sans contexte donnée et construisant un support- Seul, analyseur actif. La grammaire sans contexte alimentée par JS / CC est définie dans un méta-langue basé sur Backus-Naur-Form et permet d'évaluer l'insertion du code sémantique individuel sur la réduction d'une règle.

    JS / CC lui-même a été entièrement écrit dans ECMAScript afin qu'il puisse être exécuté de plusieurs façons différentes: en tant que JavaScript basé sur un navigateur, indépendant de la plate-forme intégré sur un site Web, en tant qu'application hôte Script Script Windows, en tant qu'exécutable compilé JScript.NET, Une application interprétée Mozilla / Rhino ou Mozilla / Spidermonkey, ou un script shell V8 sous Windows, * nix, Linux et Mac OSX. Cependant, pour une exécution productive, il est recommandé d'utiliser les versions de 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 .js JavaScript.

    Si vous souhaitez créer des analyseurs JavaScript et des générateurs de code, consultez la mise en œuvre de MetaII en version Javascript.

    Un didacticiel de MetaII Compiler vous permet de construire un système de compilation entièrement autonome qui peut se traduire lui-même et d'autres langues:

    MetaII Compiler Tutorial

    Tout cela repose sur un incroyable document technique de 10 pages de Val Schorre: META II: un langage d'écriture de compilateur orienté de la syntaxe de l'honnêteté à 1964. L'auto-description complète du compilateur MetaII est d'environ 30 lignes! J'ai appris à construire des compilateurs à partir de ce retour en 1970. Il y a un moment critique où vous découvrirez enfin comment le compilateur peut se régénérer …

    Le didacticiel explique MetaII, comment cela fonctionne et met en œuvre MetaII compilant MetaII en JavaScript. Vous pouvez facilement modifier ce compilateur pour analyser d'autres langages et produire différents Javascript.

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

    Jison est probablement le meilleur et le plus actif générateur de lexer & parser là-bas pour Javascript. Il imite Bison et Yacc.

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

    Si vous voulez juste un lexer léger (~ 100 sloc), vous pouvez jeter un oeil à Lexed.js: https://github.com/tantaman/lexed.js

    Pour des tâches d'analyse simples, je suis plutôt friand d'utiliser une variante de l' analyseur de Precedence de l'opérateur Top Down de Pratt. Alors que Pratt a écrit l'original en utilisant un ancien 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 l' analyse Top-down Operator Precedence en JavaScript , qui pourrait être exactement ce dont vous avez besoin.

    Selon la conception du «ensemble d'instructions», vous pouvez utiliser la fonction eval intégrée de Javascript, qui analyse la source Javascript; Vous pouvez écrire un traducteur simple pour convertir les instructions au code Javascript.

    Soit dit en passant, faites très attention aux trous XSS.

    Si vous cherchez vraiment juste un lexer, essayez de prétentir .

    Voici un exemple d'analyseur pour un langage naturel "pseudo" d'instructions, qui a été implémenté dans JavaScript pur avec Chevrotain Parsing DSL :

    https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js

    Cet exemple inclut même le support de plusieurs langues naturelles (anglais et allemand) utilisant l'héritage de grammaire.

    Chevrotain relève de la catégorie "bibliothèques là-bas pour l'analyse qui sont 100% javascript" car il ne génère pas de code . L'utilisation de Chevrotain est semblable à la «fabrication artisanale» d'un analyseur récursif décent, uniquement sans la plupart des maux de tête tels que:

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

    Comme Chevrotain les gère automatiquement.

    Antlr version 4.5 a maintenant une cible Javascript .

    Je cherchais quelque chose de similaire qui n'aurait aucun obstacle à la sécurité et j'ai rencontré deux ressources. Ils ne parsent pas dans le script, mais l'exécutent dans un environnement "sûr" – quelque chose que vous ne pouvez garantir lors de l'utilisation de la fonction eval . Donc, je ne sais pas si c'est exactement ce que vous cherchez, mais regardez:

    1. Jsandbox – sandbox Javascript
    2. Google Caja – iframe virtuel.

    Si vous voulez un lexer et rien d'autre qu'un lexer, regardez ceci: https://github.com/aaditmshah/lexer

    C'est un lecteur de JavaScript simple avec beaucoup de fonctionnalités puissantes écrites dans quelques lignes de code.