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:
Der Lexical Analyzer
verwendet den Quellcode einer Datei als Eingabe (den Eingabestream). Zum Beispiel der folgende Code:
Dann erzeugt das Lexical Analyzer
Datenstücke daraus:
Dies wird dann an die Klasse Parser
gesendet.
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:
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
...?
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?
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.
Tags und Links compiler-construction lexical-analysis code-translation