Programmieren in MiLanguage
-
In meiner Sprache.
Im Trollforum gibt es zwar schon einen Thread, aber hier soll darüber ernsthaft diskutiert werden. (Kann ja einer den anderen schließen...)
Hab mir eine nette kleine (Programmier-)Sprache gebastelt, die eine sehr eigene Syntax hat
Ich zumindest kenne keine andere, die so aussieht (1. Bitte schreibt mir, falls ihr eine kennt, hier rein, welche)
Wird (zur Zeit noch) interpretiert.
Leider gibt es noch keine Doku
Aber die kommt noch
Natürlich ist sie noch nicht fertiggestellt (ein 3 Tage Projekt) und ihr dürft natürlich gerne Verbesserungsvorschläge einbringen. (Aber die Syntax bleibt so, sonst macht keinen Spaß )
Also mal die Links:
Der Quellcode
Sollte standardkonformer Code sein (bis auf einen Bug vom VC, den ich für ihn beseitigt habe. Sollte aber andere Compiler nicht beeinflussen *hoff*)
Probiert es mal aus!
Ich geb euch noch ein Beispiel:Noch keine Kommentare möglich, überleg mir erst eine Syntax dafür, was ihr vorschlagt fließt ein. Deshalb nehm ich jetzt nur mal C++ Kommentare 'var' 0 def //neue Variable namens var mit 0 initialisieren //def ist eine Funktion und erwartet einen Namen für eine neue Variable in //single oder double Quotes. Ich nehm immer singles, damit man es besser von //*normalen* strings unterscheiden kann. Der zweite Parameter von def ist (in //dem Fall 0) der Wert, mit dem die Variable initialisiert werden soll //Folgendes ginge alles ebenfalls: "var" 0 def 'var' .2 def 'var' 0.2 def 'var' 2 def 'var' "zwei" def 'var' "2" def //is #äquivalent zu 'var' 2 def "var" '2' def //dito //Noch hab ich keine set Funktion implementiert, weil def (noch) ausreicht, //bestende Variablen zu ändern //Andere Funktionen sind z.B. print 'var' "Test" def var print //Ausgabe: Test 'var' "Neue\nZeile" def var print //Ausgabe Neue[+neue Zeile]Zeile "Tadamm" print //Ausgabe: Tadamm //Es ist prinzipiell egal, ob ' oder " verwendet wird \" und \', um " und ' //auszugeben gibt es natürlich auch //Verbinden zweier Strings: cat (beachte: Zahlen werden als Strings behandelt "Ich bin super: Note: " 1 cat print //Ausgabe: Ich bin super: Note 1 //Hier wird das, was cat zurückgibt (der zusammengefügte String) //der Funktion print als Argument übergegben //def gibt den Wert der Variable zurück, die es definiert //Also geht folgendes: 'var' "Hallo" def print //Ausgabe: Hallo //input: 1 Parameter: Name der Variable; gibt den neuen Wert der V. zurück 'var' 0 def var input print //Der Benutzer muss etwas eingeben. Das wird direkt danach wieder ausgegeben. 'var' 0 def "Sie haben \"" var input cat "\" eingegeben" cat print //Der Benutzer muss etwas eingeben. Das wird in var gespeichert. //Ausgabe: Sie haben "[Inhalt von var]" eingegeben //wait: 0 Parameter, gibt "" zurück wait //Ausgabe: Press [ENTER] Es wird gewartet, bis der Benutzer Enter drückt //Der Bool Wert //Bools gibt es in MiLanguage auch. Sie werden als Strings "true" und "false" //dargestellt. Implizit wird der numerische Wert 0 und eine leere Zeichen //kette in Bool verwandelt, alles andere in true //es gibt zwei vordefinierte Variablen true und false //2 Funktionen: isBool (gibt "true" zurück, falls sein 1 Argument "true" oder //"false" ist, andernfalls "false" //und toBool -> explizite Konvertierung in ein "true" oder "false" //Die Funktion if hat z.B. 3 Parameter: Das erste wird in ein bool //konvertiert. Bei "true" wird das zweite Argument zurückgegeben, bei "false" //das 3.: true true eq "true equals true" "error" if print //eq erwartet 2 Argumente, falls sie gleich sind wird "true" zurückgegeben //alternativ kann == geschrieben werden: true true == "true == true" "error" if print //ebenso gibt es ne (!=), gr (> ), le(< ), greq(>=), leeq(<=) //Funktionen, um mit Zahlen zu rechnen gibt es natürlich auch: 2 6 add 4 div print //(2+6)/4: Ausgabe: 2 //Alternativ 2 6 + 4 / print //Beispiel: 2 5 sub .3 add 4 mul 2 div 6 pow sqrt print //sqrt erwartet nur 1 Argument (Quadratwurzel eben) //Alternativ: 2 5 - .3 + 4 * 2 / 6 ^ [ASCII 251] print //while und until gibt es auch schon: //2 Parameter; while: "Paramter2 solange Parameter1=="true") //until: "Parameter2 solange, bis Paramter1=="true"); //Beispiel: 'var' 0 def var "Hallo" eq var input "Hallo" eq "Brav" "Nicht höflich" if print until //Solange bis var == "Hallo": //var input, falls input == "Hallo" schreibe "Brav" andernfalls schreibe "Nicht höflich"
Sehr funktional aufgebaut, aber sozusagen von rechts nach links *g*
Und ich denke, das macht sie zu was besonderem.
Achja, es gibt zwei vordefinierte Variablen (noch hab ich keine constness eingebaut...)
version und interpreter[ Dieser Beitrag wurde am 22.12.2002 um 19:26 Uhr von Noesis editiert. ]
-
ich habe auch mal eine eigene Programmiersprache geschrieben
http://sourceforge.net/projects/eselc
Die Sprache ist ähnlich wie Lisp
# hello world # (printstr "hi ho"), # Berechnungen # (print (+ 1 4)); (print (+ 2 (* 3 (** 4 2)))), #Eigenen Operator schreiben# (setop ~op_mark myop) #declare operator# (myop 10) #call operator# (exit 0) : #break point to stop execution before op# @op_mark #operator start# (print (- (pop) 5)) #output arg1 - 5# (return) #return to main routine# ;
-
Sieht nett aus!
Du hast mich inspiriert:
Kommentare sind ab jetzt möglich:"Ausgabe" (Das ist ein Kommentar) print
In Klammern *g*