Was ist JavaScript AST, wie spielt man damit?

Lesezeit: 3 Minuten

Benutzer-Avatar
jiyinyiyong

Abstrakter Syntaxbaum. Ich habe immer gehört, dass dies auf Github zu SpiderMonkey AST kompiliert wird.
Ist das also ein tatsächlicher Standard des JS-Syntaxbaums? Und da ist V8, verwendet V8 die gleiche Art von AST?

Wie kann ich damit spielen?

  • Hier ist eine praktische Visualisierung der Javascript-AST-Ausführung: int3.github.io/metajs

    – Matt Woelk

    29. August 2013 um 4:25 Uhr

Benutzer-Avatar
kürzen

1.Sie können einen Blick darauf werfen AST-Explorer. Ein Online-Tool zum Erkunden der von mehr als 10 Parsern generierten ASTs. Es ist ein gutes Werkzeug, um den AST-Baum einer Sprache zu lernen.
AST-Explorer-Quelle auf Github.com.

Geben Sie hier die Bildbeschreibung ein


2.Sie können auch Ihren js-Code einfügen JavaScript-AST-Visualizer und klicken Sie auf die Schaltfläche “Ast anzeigen”, um den AST sichtbar zu sehen.

Demo-JS-Code:

function foo(d) {
  d += 3;
    return d+999
}
function bar(d) {
    return d*100
}

js Ast-Demo

  • Was ist der Vorteil dieses Bildes? Ist es hilfreich?

    – Buh Buh

    25. Oktober 2016 um 12:40 Uhr

SpiderMonkey bietet die Parser-API. Dies ist wahrscheinlich der einfachste Weg, um an die Syntaxobjekte heranzukommen.

Es ist auch offen js-js Parser mögen Esprima (was eigentlich ECMAScript ist, aber es ist genau das Richtige)

Abstract Syntax Tree (AST) ist eine Baumdarstellung des Programmquellcodes.

Es gibt ein paar JavaScript AST Normen:

Hier ist eine Liste von JavaScript-Parsern:

Weitere Parser finden Sie unter astexplorer.netdie meisten von ihnen estree kompatibel.

Während die meisten Parser das unterstützen estree können leicht gegeneinander ausgetauscht werden, babel verfügt über eine sehr weitreichende Infrastruktur, die für ein komfortables Arbeiten erforderlich ist AST. Es hat:

  • Handbuch Beschreibung aller Tools und Möglichkeiten, sie zu verwenden.
  • @babel/traverse – behält den Gesamtbaumzustand bei und ist verantwortlich für das Ersetzen, Entfernen und Hinzufügen von Knoten;
  • @babel/vorlage – einfachste Möglichkeit, eine zu erstellen AST-Knoten aus Zeichenfolge.
  • @babel/typen – Enthält Erbauer und Kontrolleure von AST-Knoten.

Eine der einfachsten Möglichkeiten, damit zu spielen ASTbenutzt herausgebendie auf basiert babel und unterstützt eine vereinfachte Art der Transformation JavaScript Code mit Hilfe von Plugins-API.

Hier ist ein Beispiel zum Entfernen DebuggerStatement Knoten:

module.exports.replace = () => ({
    'debugger': '',
});

Wenn Sie die Plätze von Variablen tauschen möchten, ändern Sie die Art der Deklaration:

module.exports.replace = () => ({
    'let __a = __b': 'const __b = __a'
});

Wenn Sie diesen Code umwandeln möchten in return x[0]:

for (const x of y) {
    return x;
}

Sie können Folgendes verwenden:

module.exports.replace = () => ({
    'for (const __a of __b) {return __a}': 'return __a[0]',
});

Mit Hilfe von putout Sie können die einfachste Transformation vornehmen JavaScript Code ohne Umgang mit AST direkt.

Benutzer-Avatar
Prosti

Wenn Sie den Acron-Parser von Professor Marijnh ausprobieren möchten
https://github.com/marijnh probiere mal diesen link aus: https://astexplorer.net/

Dies ist ein winziger, schneller JavaScript-Parser, der vollständig in JavaScript geschrieben ist.

Das oben Erwähnte JavaScript-AST-Visualizer verwendet die Esprima-Engine und wurde auch in JavaScrpt geschrieben.

JavaScript dominiert beim Parsen von AST, da JavaScript-Engines heute superoptimiert sind. https://en.wikipedia.org/wiki/JavaScript_engine

SpiderMonkey AST-Standard des JS-Syntaxbaums? Verwendet V8 die gleiche Art von AST?

Beide Webbrowser-Engines enthalten eine in C++ geschriebene AST-Verarbeitung. Aus diesem Grund wird JavaScrpt-Code in den meisten Fällen schnell ausgeführt, mit Ausnahme von eval.

Ich kenne nur eine Spezifikation von Javascript AST: https://github.com/etree/etree

Es entstand aus der Veröffentlichung von Dave Herman von Mozilla und hat sich seitdem als Gemeinschaftsstandard entwickelt. Es sollte also bis zu einem gewissen Grad zu SpiderMonkey passen, aber bei V8 und JSC bin ich mir nicht sicher.

Würde mich freuen, wenn jemand nähere Informationen zu dem Thema geben könnte.

1041670cookie-checkWas ist JavaScript AST, wie spielt man damit?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy