2010-03-31 29 views
66

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

Vielen Dank für alle Hinweise, die Sie zur Verfügung stellen können!

+2

"Ich muss etwas leichten syntaktischen Zucker zu JavaScript-Quellcode hinzufügen" Sie tun? Wie was? –

+0

Sie benötigen es für die Code-Ausstellung oder für den Editor? –

+1

Objective-J macht das. Sie möchten vielleicht den offenen Quellcode auschecken. Aber es verwendet eine völlig andere Syntax wie Objective-C und interpretiert Javascript zur Laufzeit afaik. – Anurag

Antwort

24

Crescent Frisch beantwortet diese Frage in den Kommentaren:

JSLint enthält einen JavaScript-Parser in JavaScript geschrieben. Siehe JSlint by Douglas Crockford Um die Linie 2712 herum beginnt der Parser. JSLint geschrieben auch html zu handhaben, so dass Sie die Teile beschönigen müss

+0

Crescent Fresh, wenn Sie Ihren Kommentar als Antwort erneut posten möchten, akzeptiere ich ihn und stimme ihn Ihnen zu. – emk

+4

Neuer Quellcode, oben Link ging 404: https://github.com/douglascrockford/JSLint – sibidiba

+0

Antwort aktualisiert (https://github.com/douglascrockford/JSLint/blob/master/jslint.js) –

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

Die einzige metacircular interpreter, die ich in JavaScript implementiert habe, ist die Narcissus Engine.

Es wurde auch von Brendan Eich entwickelt, sie verwendet eine Menge nicht-Standard-Erweiterungen, die spezifisch für SpiderMonkey sind, ich denke, es wird nicht auf V8 arbeiten.

+0

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

32

UglifyJS (JS Kompressor/beautifier 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. Danke auch für HTMLArea, das war eine großartige Referenz für mich, als ich vor 7 oder 8 Jahren einen WYSIWYG-Editor entwickelte. Ich würde vorschlagen, Ihr Interesse bei der Verknüpfung mit UglifyJS zu erwähnen. –

+3

Ich möchte nur darauf hinweisen, dass dieser Parser bereit ist zu gehen, und scheint perfekt zu funktionieren. Es ist in einer separaten Datei enthalten, also müssen Sie nicht durch jslint.js waten, um Teile zu entfernen, die Sie nicht benötigen. +1 – Tex

0

JS/CC - Die LALR (1) Parser und lexikalischer Analysator Generator für JavaScript, in JavaScript geschrieben - http://jscc.phorward-software.com/

+0

Es ist ein toter Link – Mahdi

+0

Link funktioniert seit der letzten Bearbeitung – Shawn

22

Die fastest Javascript-Parser in Javascript war esprima.

Es gibt Ihnen auch

Sensible Format für die abstrakte Syntaxbaum (AST), kompatibel mit Mozilla Parser API

5

Microsoft hat den TypeScript-Compiler in TypeScript entwickelt. Da TypeScript eine strenge Obermenge von JavaScript ist und TypeScript zu JavaScript kompiliert, ist der resultierende Compiler technisch ein JavaScript-Compiler, der in JavaScript geschrieben ist.

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

9

acorn ist ein sehr schneller JavaScript-Parser in JavaScript geschrieben.Es ist jetzt sogar schneller als esprima. Die Ergebnisse, die ich in Chrome Form bekam esprima's speed comparison page:

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 kompatibel mit Mozilla-Parser-API, so dass Sie escodegen verwenden JavaScript von den Parse-Bäume zu erzeugen.