Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
halloechen allerseits,
ich habe Gestern mal einen Prototypen fuer einen Compiler Interpreter geschrieben. Das ganze funktioniert im Prinzip wie z.B. YACC nur das man halt seiner Syntax gleich noch sagt was ausgegeben werden soll. Waere schoen wenn ihr mir ein Feedback geben koenntet bevor ich das ganze nach C portiere. Denkt aber bitte daran es nur ein Prototyp ist und daher etwas dirty (siehe Anhang fuer Quelltext) Die Syntax-Dateien selbst sind eigentlich relativ simpel aufgebaut:
zuerst muessen alle Tokens definiert werden. Dies geschieht ueber die Anweisung %token gefolgt von einer Regex und einer Funktion fuer den Identifier. Beispiel:
Code:
%token "\bdouble\b" => DOUBLE;
%token "\;" => ';';
Der Quelltext wird dann in die einzelnen Tokens unterteilt und man kann den Syntax definieren. Dabei gelten folgende regeln: ein Programm wird durch einen Identifier ":=" der Kette, einer optionalen Funktion und ";" definiert. Das Programm "PROGRAM" dient als Einstiegspunkt. Beispiel:
eine Kette ist eine Reihe von Tokens die durch whitespace getrennt werden. Ketten koennen mithilfe des "|"-Operators zu einer Kette vereint werden. Dabei muss mindestens eine der Unterketten richtig sein.
Code:
expression := CHAR | SHORT | INT | LONG;
Funktionen koennen entweder fuer einzelnen Unterketten (->) oder ganze Programme (=>) definiert werden:
Code:
expression := CHAR -> int8
| SHORT -> int16
| INT -> int32
| LONG -> int64
=> hallo world;
[{int}] : ist der Substring der durch den Token symbolisiert wird
Code:
expression := INT_LITERAL -> [0];
pop({int}) : loescht N-Elemente vom Ausgabe Stack und gibt das letzte Nte Element aus.
popi({int}) :genau wie pop nur das nichts ausgegeben wird. peek({int}) : genau wie pop nur das nichts geloescht wird.
incr({name}) : wenn die Variable {name} ein integer ist, dann wird diese um 1 erhoeht decr({name}) : wenn die Variable {name} ein integer ist,dann wird diese um 1 verringer (minimum ist 0) save({name},{Funktion}) : speichert die Ausgabe einer Funktion in eine Variable
Mitglieder in diesem Forum: Bing [Bot] und 12 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.