web-dev-qa-db-fra.com

Qu'est-ce que JavaScript AST, comment jouer avec?

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?

51
jiyinyiyong

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)

27
slezica

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 .

enter image description here


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
}

js ast demo

46
cuixiping

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.

2
prosti

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.

0
Rvach.Flyver