Pegjs: Präprozessor? Quellcode neu generieren

Erstellt am 12. Nov. 2017  ·  5Kommentare  ·  Quelle: pegjs/pegjs

Ich baue Erweiterungen zu einer vorhandenen Sprache als Präprozessor. Ich konnte nicht herausfinden, ob es eine Möglichkeit gibt, Pegjs dazu zu bringen, den Quellcode neu zu generieren. Grundsätzlich möchte ich, dass die Quelle analysiert wird, ich möchte den AST ändern und dann die Quelle neu generieren. Ist das sowieso möglich?

discussion question

Hilfreichster Kommentar

@YemSalat hat Recht, PEG.js ist nur ein Parser-Generator.

  1. Erstellen Sie einen Parser mit PEG.js (stellen Sie sicher, dass Aktionen AST zurückgeben)
  2. Analysieren Sie Ihre Sprache mit dem generierten Parser, um einen AST . zu erstellen
  3. Ändern Sie die AST mithilfe von Transformationsdurchgängen
  4. Den Quellcode neu generieren

Wie Sie sehen, ist PEG.js nur im ersten Schritt beteiligt. Wenn Sie also den Quellcode neu generieren möchten, müssen Sie selbst einen Compiler bauen, oder wenn bereits ein Compiler oder Generator (Toolchain) für die Sprache existiert, schlage ich vor Sie geben entweder AST zurück, das mit der Toolchain kompatibel ist, oder fügen eine Transformation hinzu, die das AST ändert, um mit der Toolchain kompatibel zu sein.

Schließen, da dies bei PEG.js eigentlich kein Problem ist, aber Sie sind herzlich willkommen, die Diskussion fortzusetzen.

Alle 5 Kommentare

@mattkanwisher sorry, ich verstehe nicht ganz, was du mit "regenerieren" der Quelle meinst.
Könnten Sie bitte etwas klarstellen? Wenn Sie meinen, Code basierend auf dem AST zu produzieren, müssten Sie diese Logik selbst schreiben, entweder direkt in die Grammatik oder als separates Stück.

Ja, Code basierend auf dem AST produzieren, also muss ich einen Compiler zurück zum Originalquell generieren, wenn ich damit vorverarbeiten möchte?

Hmm, wenn Sie die _originale_ Quelle haben möchten, hätten Sie sie immer noch, ohne sie generieren zu müssen, oder?
Wenn Sie jedoch eine modifizierte Version davon wünschen, müssten Sie die Codegenerierungslogik selbst schreiben.
( @Mingun @futagoza bitte korrigiert mich, wenn ich falsch

@YemSalat hat Recht, PEG.js ist nur ein Parser-Generator.

  1. Erstellen Sie einen Parser mit PEG.js (stellen Sie sicher, dass Aktionen AST zurückgeben)
  2. Analysieren Sie Ihre Sprache mit dem generierten Parser, um einen AST . zu erstellen
  3. Ändern Sie die AST mithilfe von Transformationsdurchgängen
  4. Den Quellcode neu generieren

Wie Sie sehen, ist PEG.js nur im ersten Schritt beteiligt. Wenn Sie also den Quellcode neu generieren möchten, müssen Sie selbst einen Compiler bauen, oder wenn bereits ein Compiler oder Generator (Toolchain) für die Sprache existiert, schlage ich vor Sie geben entweder AST zurück, das mit der Toolchain kompatibel ist, oder fügen eine Transformation hinzu, die das AST ändert, um mit der Toolchain kompatibel zu sein.

Schließen, da dies bei PEG.js eigentlich kein Problem ist, aber Sie sind herzlich willkommen, die Diskussion fortzusetzen.

Also habe ich es herausgefunden. Für alle, die in Zukunft auf diesem Bug-Post landen. Lesen Sie einfach den Quellcode zu "Der superkleine Compiler". Danach konnte ich mit pegjs meinen Präprozessor in wenigen Stunden bauen

https://github.com/thejameskyle/the-super-tiny-compiler

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen