Eigene Sprache entwickeln :D

  • Halloo^^

    Ich komme mal wieder mit einer (seltsamen :D) Idee.
    Ich hatte den Einfall, dass ich eventuell eine kleine "Scriptsprache" in Autoit schreiben könnte :D
    Sähe so aus:
    Einen Editor, der das ganze dann in .wasweißich-Dateien speichert, und eine Datei (ähnlich der AutoIt.exe) die diese Dateien dann einliest, intern in AutoIt-Code umwandelt und dann ausführt.
    Wäre soetwas machbar?
    Oder hätte jemand einen Vorschlag wie es einfacher/effizienter/besser gehen würde?

    Padmak

  • Machbar wäre das schon. Aber es ist vermutlich nicht einfach und die Frage ist, was das für einen Sinn ergibt. Noch leichter als AutoIt oder Basic geht ja wohl kaum. Und da beides frei verfügbar ist...

  • Mir geht es mehr um die theoretische Grundlage, ob so etwas überhaupt möglich wäre.
    Vielleicht hat jemand noch irgendwelche Ideen/Einwände^^

    Padmak

    Edit: Das wäre die Theorie:

    [autoit]


    $read = FileRead("test.txt")
    $read = StringReplace($read, "ShowMessage(", "MsgBox(0, ")
    Execute($read)

    [/autoit]


    Test.txt:

    Code
    ShowMessage("Hallo", "Das ist ein Test")


    Aber wie führe ich da mehrzeilige Kommandos aus?
    Dann muss ich wohl die AutoIt.exe mitnehmen oder?

  • Greenhorn:
    Du willst mir jetzt nicht erzählen, dass ich mir theoretisch nen compiler runterladen kann ?(
    weil was ein Compiler ist, weiß ich :D
    @Deepred:
    Zeig mir mal bitte, wie du mehrzeilige Befehle ausführst
    z.B.
    While 1
    MsgBox(0, "", "Test")
    Wend
    Dann bedank ich mich bei dir *verbeug*
    @prizma
    Selbes wie bei Greenhorn, ich weiß auch was ein Interpreter ist
    So was kann man doch nicht in AutoIt schreiben?

    Padmak

  • Mal abgesehen von der Performance kann man sicher nen Interpreter schreiben. Hatte mal in Rexx einen gebaut, auch Schleifen sind kein Problem.

    Ich fang schon mal mit dem Übersetzen in AutoIt an - erstmal dieses unsägliche If Else EndIf ausmerzen :D :

    Spoiler anzeigen
    [autoit]

    $sString = "$a <> 2 ? $b = true : $b = false"

    [/autoit] [autoit][/autoit] [autoit]

    $sOut = StringRegExpReplace($sString,"^(.*?)\?(.*?):(.*?)$","If $1 Then" & @crlf & @tab & "$2" & @crlf & "Else" & @crlf & @tab & "$3" & @crlf & "EndIf")
    MsgBox(64,"",$sOut)

    [/autoit]

    aber das habe ich ja in meinem PreProzessor(preAlphaBetaVersion) für AutoIt schon drin ...

  • So was kann man doch nicht in AutoIt schreiben?


    Warum sollte das nicht gehen? Könnte zwar ein wenig lahm werden aber mit AutoIt lässt sich doch so ziemlich alles auseinander nehmen und wieder zusammensetzen.

    Edit: Ach menno und ich hätte doch so gerne geschweifte Klammern in der If Abfrage ;)

  • Uff da hab ich mir aber was vorgenommen, wenn ich mir den Post von Stilgar anschau *puh*
    Kannst du mir vielleicht das Grundgerüst sagen?
    So gewandt bin ich dann schon dass ich das umsetzen kann^^

    Padmak

  • Ich habe da nur eine einfache Version eines ternären Operators, wie er vielen anderen Programmiersprachen vorkommt, nach AutoIt übersetzt, also:

    Bedingung ? wahr-zweig : falsch-zweig

    und die Teile zwischen den Operatoren per RegEx rausgenommen und wieder zu einem If Else EndIf zusammengesetzt, oder was wolltest du wissen?

    Es gäbe auch noch die Möglichkeit:
    Ergebnis = ( Bedingung ? Ergebnis-Wahr : Ergebnis-falsch )

    also:

    Spoiler anzeigen
    [autoit]

    $sString = '$erg = ( $a <> 2 ? "Wahr" : "Falsch" )'

    [/autoit] [autoit][/autoit] [autoit]

    $sOut = StringRegExpReplace($sString,"^(.*?)\((.*?)\?(.*?):(.*?)\)$","If $2 Then" & @crlf & "$1 $3" & @crlf & "Else" & @crlf & "$1 $4" & @crlf & "EndIf")
    MsgBox(64,"",$sOut)

    [/autoit]

    Einmal editiert, zuletzt von Stilgar (17. Februar 2009 um 20:56)

  • Boa **** ist des kompliziert :D
    ich dachte mir das halt so:
    Man schreibt zum Beispiel den Befehl "ShowMessage("Testtitel", "Testtext")
    Und das wird halt dann von meinem Script interpretiert und ausgeführt
    wie genau weiß ich noch nicht, aber ich hab morgen Schule -> genug Zeit zum überlegen :D

    Padmak

  • Wenn du nur AutoIt 1:1 übersetzt, zum Beispiel, um AutoIt einzudeutschen, dürfte das kein Problem sein...
    À la:

    [autoit]


    $read=FileRead("test.aud")
    $read=StringReplace($read,"If","Wenn");Das ganze noch case- unsensitive
    ...
    FileWrite(@TempDir & "\tempaud.au3",$read)
    FileInstall("AutoIt3.exe",@TempDir & "\autoit3.exe")
    Run(@TempDir & "\autoit3.exe " & @TempDir & "\tempaud.au3")

    [/autoit]


    :rofl:

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ja genau eindeutschen, damit man jedesmal nachschauen muß Case? ähhn oder - EndSwitch = EndSchalter :rofl:

    Diese glorreiche hatte MS mal bei VBA, ich glaub Office 97, in jede Sprache übersetzt! Man hat wirklich bei jedem Befehl überlegen müßen, was man schreiben soll.

    Oh für ShowMessage("Testtitel", "Testtext") habe ich ne einfache Lösung, man schreibe in eine include-Datei:
    Func ShowMessage ...

    EndFunc
    :D

  • Case ist ja wohl "Fall"

    [autoit]


    GBOErstelle("Hallo")
    $knopf=GBOStrgErstelleKnopf("Drücken!",0,0)
    Solange 1
    Unterscheide GBOErhalteNachricht()
    Fall $knopf
    Ausgang ;)
    Fall Sonst
    Schlafe(100)
    UnterscheideEnde
    SEnde

    [/autoit]


    :rofl::rofl::rofl:
    (Sorry für OT)

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ich erstelle gerade nen Autoit interpret damit ich scripts sozusagen auf nem server ausführen kann, is ne heidenarbeit find ich ;)


    Hey Moment mal, das interessiert mich :D
    Was genau machst du da?

    Padmak

  • An der Idee eine eigene kleine Programmiersprache zu entwickeln ist nichts komisch, ich denke die hatte jeder programmierer mindestens schon einmal. (Genau so wie einfache KIs usw^^)
    Aber ich habe jedes mal gedacht: Wofür bräuchte man so etwas? AutoIt ist doch schon eine herliche Programmiersprache und sie ist sogar recht einfach. Warum sollte man also selbst eine programmiersprache entwickeln die vieleicht nicht immer funktioniert, langsamer ist, weniger möglichkeiten bietet und vieleicht nur ein ganzs kleines bieschen einfacher für einen Einsteiger ist?

    Wendern könntest du ein Script schreiben was die Syntax von AutoIt verbessert. ($test="hallo"; if ($test=="hallo"){} )


  • Wendern könntest du ein Script schreiben was die Syntax von AutoIt verbessert. ($test="hallo"; if ($test=="hallo"){} )


    Nein :D

    Ich wollte nur den theoretischen Ansatz wissen. Danke

    Padmak