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*


Anmelden zum Antworten