Résumé Syntax Tree .. J'ai toujours entendu dire que compiler vers SpiderMonkey AST sur Github.
Alors, est-ce un véritable standard d'arborescence de syntaxe JS? Et il y a le V8, le V8 utilise-t-il le même type d'AST?
Comment puis-je jouer avec ça?
SpiderMonkey propose le API de l'analyseur . C'est probablement le moyen le plus simple de mettre la main sur les objets de syntaxe.
Il y a aussi des analyseurs ouverts js-js comme Esprima (qui est ECMAScript, vraiment, mais c'est juste dans la ruelle)
1.Vous pouvez jeter un œil à AST Explorer . Un outil en ligne pour explorer les AST générés par plus de 10 analyseurs. C'est un bon outil pour apprendre AST arborescence d'une langue.
source AST Explorer sur Github.com .
2.Vous pouvez également coller votre code js dans JavaScript AST et cliquer sur le bouton "afficher ast", vous verrez le AST = visiblement.
démo js code:
function foo(d) {
d += 3;
return d+999
}
function bar(d) {
return d*100
}
Si vous souhaitez essayer l'analyseur acron du professeur Marijnh https://github.com/marijnh essayez ce lien: https://astexplorer.net/
Il s'agit d'un minuscule analyseur JavaScript rapide, entièrement écrit en JavaScript.
Le mentionné ci-dessus JavaScript AST utilise le moteur Esprima et a également été écrit en JavaScrpt.
JavaScript domine dans l'analyse AST parce que les moteurs JavaScript sont super optimisés aujourd'hui. https://en.wikipedia.org/wiki/JavaScript_engine
SpiderMonkey AST standard d'arborescence de syntaxe JS? V8 utilise-t-il le même type d'AST?
Ces deux moteurs de navigateur Web ont un traitement AST à l'intérieur écrit en C++. C'est pourquoi le code JavaScrpt s'exécutera rapidement dans la plupart des cas, à l'exception de eval
.
Je ne connais qu'une spécification de Javascript AST: https://github.com/estree/estree
Il est né de la publication de Dave Herman de Mozilla et a depuis évolué en tant que norme communautaire. Donc, cela devrait correspondre à SpiderMonkey dans une certaine mesure, mais je ne suis pas sûr de V8 et JSC.
J'apprécierais que quelqu'un puisse fournir plus d'informations à ce sujet.