Ich habe ja schon einmal erzählt, dass ich an einem AutoIt-Compiler arbeite, der AutoIt-scripte nach C++ übersetzt. Das Projekt habe ich deswegen AutoItC genannt.
Es besteht aus zwei Teilen, einem Converter und einer runtime library. In der runtime library sind alle Funktionen enthalten und diese werden dann mit dem compilierten Skript verknüpft.
Alte Version
Vor ca. zwei Wochen habe ich mit Arrays das letzte große Sprachelement geschafft und kann nun bereits einfache Skripte übersetzen.
Die Grundelemente von AutoIt sind soweit alle fertig, nur noch Kleinigkeiten fehlen, z.B. fehlt der Operator ==.
Es gibt aber noch schwer lösbare Probleme, zum Beispiel stimmt die Reihenfolge, in der Operatoren ausgewertet werden, noch nicht. Solange man aber wie ich auch schon aus Lesbarkeitsgründen oft Klammern setzt, macht das nicht so enorm viel aus.
Von den Funktionen fehlen auch noch viele, genaugenommen sind bisher nur die wichtigsten und einfachsten implementiert. Hauptsächlich sind das: Mathematische Funktionen. String... außer RegEx, Typumwandlungen von Variablen, MsgBox, ConsoleWrite und die Ini-Funktionen.
Aus diesen Gründen ist AutoItC zur Zeit noch für die Entwicklung unbrauchbar, aber wer will kann gerne weitere Funktionen und Bugfixes beisteuern oder den Code anderweitig nutzen.
Es gibt eine neue Version von AutoItC. Im Gegensatz zur alten wird nicht nur einfach eins zu eins umgewandelt, sondern ein abstrakter Syntaxbaum aufgebaut. Das erlaubt neben dem Beheben einiger Probleme der alten Version auch eine Reihe an Optimierungen.
Außerdem funktioniert das Variablensystem jetzt vernünftig, auch wenn ich dafür auf Geschwindigkeit verzichten musste.
Der Converter funktioniert mit Ausnahme von Kleinigkeiten schon, aber von den ganzen Funktionen sind noch kaum welche implementiert. AutoItC ist noch nicht für den Einsatz vorgesehen, denn neben fehlenden Features ist das ganze System auf Tests und nicht auf angenehme Benutzung ausgelegt.
Es gibt dazu auch ein Sourceforge Projekt und ich freue mich, wenn mir jemand dabei hilft.