J'ai besoin d'ajouter du sucre syntaxique léger au code source JavaScript et de le traiter à l'aide d'un système de construction basé sur JavaScript. Existe-t-il des analyseurs JavaScript open source écrits en JavaScript? Et sont-ils raisonnablement rapides lorsqu'ils sont exécutés au-dessus de V8 ou d'une implémentation JavaScript hautes performances similaire?
Merci pour tous les conseils que vous pouvez fournir!
Crescent Fresh a répondu à cette question dans les commentaires:
JSLint contient un analyseur JavaScript écrit en JavaScript. Voir JSlint de Douglas Crockford La ligne 2712 commence l’analyseur. JSLint est écrit pour gérer également le code HTML, il est donc nécessaire de survoler ces parties.
UglifyJS (compresseur JS/beautifier en JavaScript) contient un analyseur JavaScript complet qui expose une API simple. Il est fortement testé et utilisé dans certains grands projets (WebKit).
Le le plus rapide analyseur Javascript en Javascript était esprima .
Cela vous donne aussi
Format sensible pour l’arbre de syntaxe abstraite (AST), compatible avec l’API de l’analyseur Mozilla
acorn est un analyseur JavaScript très rapide écrit en JavaScript. C'est encore plus rapide que esprima maintenant. Les résultats que j'ai obtenus sous la forme Chrome la page de comparaison de vitesse d'esprima :
Source Esprima UglifyJS2 Traceur Acorn
Underscore 1.4.1 15.1 23.8 14.2 7.6
Backbone 1.0.0 17.1 30.2 16.7 7.9
jQuery 1.9.1 241.1 247.2 125.4 81.4
Total 273.3 ms 301.2 ms 156.3 ms 96.9 ms
Compatible avec l'API d'analyse syntaxique de Mozilla, vous pouvez utiliser escodegen pour générer du JavaScript à partir des arbres d'analyse.
Ce n'est pas un analyseur JavaScript, mais un projet appelé Jison (comme Bison) permettant de générer des analyseurs écrits en JS.
Le seul interpréteur métacirculaire que j’ai vu implémenté en JavaScript est le Narcisse Engine.
Il a également été développé par Brendan Eich. Ils utilisaient beaucoup d'extensions non standard spécifiques à SpiderMonkey.
Microsoft a développé le compilateur TypeScript dans TypeScript. Comme TypeScript est un sur-ensemble strict de JavaScript et que TypeScript est compilé en JavaScript, le compilateur résultant est techniquement un compilateur JavaScript écrit en JavaScript.
Cela dépend bien sûr de votre définition du "compilateur". Mais si un compilateur acceptant un sur-ensemble de langage A n'est pas un compilateur de langage A, il exclut GCC, Clang et pratiquement tous les autres compilateurs.
https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API :
Les versions récentes du shell autonome SpiderMonkey incluent un reflet de l’analyseur SpiderMonkey, disponible en JavaScript API.
Notez qu'il ne s'agit que d'une API en JavaScript, l'analyseur est C++.
JS/CC - L'analyseur syntaxique LALR (1) et le générateur d'analyseurs lexicaux pour JavaScript, écrits en JavaScript - http://jscc.phorward-software.com/