JavaScript-Parser in JavaScript [geschlossen]


71

Ich muss dem JavaScript-Quellcode etwas leichten syntaktischen Zucker hinzufügen und ihn mit einem JavaScript-basierten Build-System verarbeiten. Gibt es Open Source JavaScript Parser, die in JavaScript geschrieben sind? Und sind sie relativ schnell, wenn sie auf V8 oder einer ähnlichen leistungsstarken JavaScript-Implementierung ausgeführt werden?

Vielen Dank für alle Hinweise, die Sie geben können!


2
"Ich muss dem JavaScript-Quellcode etwas leichten syntaktischen Zucker hinzufügen" Sie tun das? Wie was?
Peter Bailey

Sie benötigen es für die Code-Exposition oder für den Editor?
Luca Filosofi

1
Objective-J macht das. Vielleicht möchten Sie den Open-Source-Code auschecken. Es verwendet jedoch eine völlig andere Syntax ähnlich wie Objective-C und interpretiert Javascript zur Laufzeit afaik.
Anurag

3
JSLint enthält einen in JavaScript geschriebenen JavaScript-Parser. Siehe jslint.com/fulljslint.js Um Zeile 2049 herum beginnt der Parser. JSLint ist so geschrieben, dass es auch HTML verarbeitet, sodass Sie diese Teile beschönigen müssen.
Crescent Fresh

Crescent French: Bitte senden Sie Ihren Kommentar als Antwort erneut, und ich werde Sie abstimmen. Vielen Dank!
Emk

Antworten:


34

UglifyJS (JS-Kompressor / Verschönerer in JavaScript) enthält einen vollständigen JavaScript-Parser, der eine einfache API verfügbar macht. Es wurde stark getestet und in einigen großen Projekten (WebKit) verwendet.


3
UglifyJS ist großartig und danke dafür. Vielen Dank auch für HTMLArea, das für mich eine großartige Referenz war, als ich vor etwa 7 oder 8 Jahren einen WYSIWYG-Editor entwickelte. Ich würde jedoch vorschlagen, Ihr Interesse zu erwähnen, wenn Sie auf UglifyJS verlinken.
Tim Down

3
Ich möchte nur darauf hinweisen, dass dieser Parser einsatzbereit ist und perfekt zu funktionieren scheint. Es ist in einer separaten Datei enthalten, sodass Sie nicht durch jslint.js blättern müssen, um nicht benötigte Teile herauszunehmen. +1
Tex

24

Crescent Fresh beantwortete diese Frage in den Kommentaren:

JSLint enthält einen in JavaScript geschriebenen JavaScript-Parser. Siehe JSlint von Douglas Crockford. In Zeile 2712 beginnt der Parser. JSLint ist so geschrieben, dass es auch HTML verarbeitet, sodass Sie diese Teile beschönigen müssen


Crescent Fresh, wenn Sie Ihren Kommentar als Antwort erneut veröffentlichen möchten, werde ich ihn akzeptieren und Sie positiv bewerten.
Emk

4
Aktueller Quellcode, über dem Link ging 404: github.com/douglascrockford/JSLint
sibidiba


24

Der schnellste Javascript-Parser in Javascript war esprima .

Es gibt dir auch

Sinnvolles Format für den abstrakten Syntaxbaum (AST), kompatibel mit der Mozilla Parser-API


10

acorn ist ein sehr schneller JavaScript-Parser, der in JavaScript geschrieben ist. Es ist jetzt noch schneller als Esprima . Die Ergebnisse, die ich in Chrome erhalten habe, bilden die Geschwindigkeitsvergleichsseite von 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

Es ist mit der Parser-API von Mozilla kompatibel, sodass Sie mit escodegen JavaScript aus den Analysebäumen generieren können.


8

Es ist kein JavaScript-Parser selbst, aber es gibt ein Projekt namens Jison (wie Bison) zum Generieren von Parsern, das in JS geschrieben ist.


1
Nun, die Frage war für einen JavaScript-Parser ... ??

7

Der einzige Metacircular-Interpreter , den ich in JavaScript implementiert gesehen habe, ist die Narcissus Engine.

Es wurde auch von Brendan Eich entwickelt, sie verwendeten viele nicht standardmäßige Erweiterungen, die spezifisch für SpiderMonkey sind. Ich denke, es wird auf V8 nicht funktionieren.


Interessant! Ich nehme an, irgendwo versteckt sich dort ein Parser. :-) Leider suche ich etwas, das unter V8 läuft. Aber danke für den sehr interessanten Link!
Emk

5

Microsoft hat den TypeScript-Compiler in TypeScript entwickelt. Da TypeScript eine strikte Obermenge von JavaScript ist und TypeScript zu JavaScript kompiliert wird, ist der resultierende Compiler technisch gesehen ein in JavaScript geschriebener JavaScript-Compiler.

Das hängt natürlich von Ihrer Definition von "Compiler" ab. Wenn ein Compiler, der eine Obermenge von Sprache A akzeptiert, kein Compiler für Sprache A ist, schließt dies GCC, Clang und so ziemlich jeden anderen Compiler aus.



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.