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?
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?
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.
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
}
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:
acorn
benutzt in eslint;acorn
unterstützt alle neuen SprachfunktionenShift AST
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:
AST
-Knoten aus Zeichenfolge.AST
-Knoten.Eine der einfachsten Möglichkeiten, damit zu spielen AST
benutzt 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.
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.
Hier ist eine praktische Visualisierung der Javascript-AST-Ausführung: int3.github.io/metajs
– Matt Woelk
29. August 2013 um 4:25 Uhr