Einen Transpiler an den Punkt schreiben, an dem das eigentliche Mapping stattfindet

8

Ich möchte verstehen, wie ein Transpiler funktioniert. Das Beste, um dies zu tun, ist natürlich einen zu schreiben.

Ich habe mir ein paar Ressourcen angesehen, um zu verstehen, wie das theoretisch funktioniert. Und ich verstehe Folgendes:

Von dem, was ich verstehe, muss ich im Grunde zwei Klassen schreiben:

  1. Ein Lexikalischer Analysator
  2. Ein Parser

Lexikalischer Analysator

Der Lexical Analyzer verwendet den Quellcode einer Datei als Eingabe (den Eingabestream). Zum Beispiel der folgende Code:

%Vor%

Dann erzeugt das Lexical Analyzer Datenstücke daraus:

%Vor%

Dies wird dann an die Klasse Parser gesendet.

Der Parser

Die Klasse Parser liest dann alle Token (?) und gibt an, was jedes Token (?) bedeutet. Es wird ihm ein bestimmter Typ zugewiesen. Das Ergebnis der obigen Zeichenfolge wird also wie folgt identifiziert:

%Vor%

Wie Sie sehen können, habe ich nicht vollständig aussortiert, welche Typen genau wohin gehen. Aber das sollte die Grundidee sein.

Nun möchte ich als nächstes den Quellcode in einen anderen Quellcode umwandeln und ihn so transponieren. Aber wie funktioniert das? Ich kann keine direkten Anleitungen finden, Erklärungen dazu.

Angenommen, ich habe den folgenden benutzerdefinierten -Code:

%Vor%

Dann wird der Lexical-Prozess diesen Code analysieren. Wie kann ich das dann in etwas wie Javascript umwandeln?

%Vor%

Wie funktioniert das Mapping von meinem benutzerdefinierten cdoe zu einem Code wie Javascript? Wie die Funktionsdeklaration. Mein Lexical Parser hat folgendes: public , function , myFunc . Wie kann es wissen, dass es das zu: myFunc = function ...?

zuordnen sollte

Jeder gute und praktische Informationen darüber, wie dies in einem transpiler getan werden sollte? Oder gehe ich falsch vor, indem ich einen lexical Analyzer für diesen Job schreibe?

Bearbeiten

Offensichtlich ist meine Idee, wie der Lexer / Parser funktioniert, nicht genau richtig. Jede "Pseudo" - Information darüber, wie dieser Prozess funktioniert (mit Pseudobeispielen), ist mehr als willkommen.

    
w00 05.10.2012, 20:10
quelle

0 Antworten