Hallo community,
vor einigen Monaten hatte ich dieses Projekt vorgestellt.
Schon damals hatte ich angedeutet dass mein Ziel nicht nur der Editor war sondern ein ganzer GML Interpreter und hier ist er nun!

Hier ein FAQ:
Q: Wofür ist ein GML Interpreter gut?
A: Meistens galt die Devise man solle Funktionen wie execute_string vermeiden da sie langsam sind. Es gab aber auch sinnvolle Anwendungsgebiete dafür. Z.B. wenn man dem User ermöglichen wollte eigene Extensions für das Spiel zu schreiben, etc. Auch kann es nützlich sein mathematische Gleichungen oder eine Reihe von Variablen damit zu berechnen oder zuzuordnen.
Q: Was sind die Schwierigkeiten?
A: Das Problem ist natürlich dass das Studio weder die Möglichkeit anbietet Variablen anhand ihres Namens zur Laufzeit zu ändern, noch Funktionen auf diese Weise aufzurufen.
Aus diesem Grund benutzt dieser Interpreter 3 Funktionen in die alle Funktionen sowie die objekt-lokalen und globalen Variablen die man benutzen will, nach einem Schema eingegeben werden müssen. Wie das geht steht im Projekt bzw. in den Skripten.
Das Skript GM_set_variable wird dann z.B äquivalent zu der Funktion variable_local/global_set(name,value) aus den alten GM - Versionen.
Beachte dass trotzdem skript-lokale variablen erstellt werden können (ohne dass diese im Projekt festgelegt werden müssten) und zwar mittels var. Das var ist aber nicht wirklich nötig denn alle Variablen die im Interpreter benutzt werden sind skript-lokal wenn sie nicht im besagten Skript eingetragen sind.
Q: Ist der Code-Editor selbst diesmal besser als der Schrott von letztem mal?
A: Ja, das ist er
Man kann jetzt scrollen, mit der Maus den Cursor setzen, mit <shift> Text markieren und sogar die gängigen Tastenkürzel funktionieren (zum kopieren, einfügen usw).
Weiterhin beinhaltet es einen auto-vervollständiger und natürlich highlighting und syntax-check (letzteres immernoch leider verbuggt)
Q: Ist das ganze vollständig/fehlerfrei?
A: Leider ganz und garnicht...
Ich muss dazu sagen dass ich dies alles weiterhin ganz from scratch gemacht habe, ohne nachzulesen wie man einen Interpreter baut >_>
Darum sind die Fehler vorallem bei der Prioritäten-bestimmung. Klammer-Rechnung und Punkt-Vor Strich funktionieren an sich scheinbar gut.
Kombiniert man aber beides, kommt oft Unsinn bei raus... habe Stunden damit zugebracht das zu fixen.. ohne Erfolg. (Die Wahrscheinlichkeit dass ich mich da nochmal drann setzte ist grade <10% ><)
Trotzdem würde ich nicht sagen dass das ganze unbrauchbar ist. Man muss nur mehr Variablen verwenden und eben solche Kombinationen vermeiden.
Des weiteren fehlt weiterhin leider die Unterstützung von Arrays sowie dem switch-, do-until- und dem with-statement. For, while und repeat funktionieren aber einwandfrei wodurch das ganze Turing-Vollständig ist. D.h. theoretisch kann alles berechenbare mit der Sprache berechnet werden. So auch z.B. den Primzahlenrechner den man auf den Screen sehen kann.
Q: Was gibt es sonst noch?
A: Wie schon erwähnt sind die Funktionen GML_set/get_variable mit den Funktionen variable_local/global_set/get vom normalen GM äquivalent.
Das System beinhaltet auch Funktionen um alle verwendeten Variablen abzurufen (kann z.B. nützlich sein wenn man nur den Editor verwenden will um den Code dann mittels dem normalen execute_string im GM 8.x auszuführen. Dann kann man damit überprüfen ob z.B. die Score Variable, etc verändert wurde).
Verwendet man den Editor werden auch nur die Funktionen akzeptiert die in ein weiteres Skript eingetragen wurden, somit hat man eine "Whitelist".
Die Funktion GML_replace_string_incode ersetzt übrigens eine Funktion oder Variable innerhalb eines Skriptes. Dabei vermeidet sie es automatisch auch die Variable in einem String zu ersetzen, etc (die Funktion benutzt aber nicht dem compiler des Interpreters sondern basiert nur auf string Funktionen).
Des weiteren gibt es noch ein paar weitere Skripte die man vielleicht brauchen könnte.
Das wärs auch schon. Hoffe dass das ganze jemandem nützlich ist
Weitere Fragen dürfen gerne gestellt werden.
GM 8.1: host-a.net/u/DragonGamer/GML_Interpreter.zip
Studio: host-a.net/u/DragonGamer/gml_interpreter_-_studio.zip
vor einigen Monaten hatte ich dieses Projekt vorgestellt.
Schon damals hatte ich angedeutet dass mein Ziel nicht nur der Editor war sondern ein ganzer GML Interpreter und hier ist er nun!

Hier ein FAQ:
Q: Wofür ist ein GML Interpreter gut?
A: Meistens galt die Devise man solle Funktionen wie execute_string vermeiden da sie langsam sind. Es gab aber auch sinnvolle Anwendungsgebiete dafür. Z.B. wenn man dem User ermöglichen wollte eigene Extensions für das Spiel zu schreiben, etc. Auch kann es nützlich sein mathematische Gleichungen oder eine Reihe von Variablen damit zu berechnen oder zuzuordnen.
Q: Was sind die Schwierigkeiten?
A: Das Problem ist natürlich dass das Studio weder die Möglichkeit anbietet Variablen anhand ihres Namens zur Laufzeit zu ändern, noch Funktionen auf diese Weise aufzurufen.
Aus diesem Grund benutzt dieser Interpreter 3 Funktionen in die alle Funktionen sowie die objekt-lokalen und globalen Variablen die man benutzen will, nach einem Schema eingegeben werden müssen. Wie das geht steht im Projekt bzw. in den Skripten.
Das Skript GM_set_variable wird dann z.B äquivalent zu der Funktion variable_local/global_set(name,value) aus den alten GM - Versionen.
Beachte dass trotzdem skript-lokale variablen erstellt werden können (ohne dass diese im Projekt festgelegt werden müssten) und zwar mittels var. Das var ist aber nicht wirklich nötig denn alle Variablen die im Interpreter benutzt werden sind skript-lokal wenn sie nicht im besagten Skript eingetragen sind.
Q: Ist der Code-Editor selbst diesmal besser als der Schrott von letztem mal?
A: Ja, das ist er

Man kann jetzt scrollen, mit der Maus den Cursor setzen, mit <shift> Text markieren und sogar die gängigen Tastenkürzel funktionieren (zum kopieren, einfügen usw).
Weiterhin beinhaltet es einen auto-vervollständiger und natürlich highlighting und syntax-check (letzteres immernoch leider verbuggt)
Q: Ist das ganze vollständig/fehlerfrei?
A: Leider ganz und garnicht...
Ich muss dazu sagen dass ich dies alles weiterhin ganz from scratch gemacht habe, ohne nachzulesen wie man einen Interpreter baut >_>
Darum sind die Fehler vorallem bei der Prioritäten-bestimmung. Klammer-Rechnung und Punkt-Vor Strich funktionieren an sich scheinbar gut.
Kombiniert man aber beides, kommt oft Unsinn bei raus... habe Stunden damit zugebracht das zu fixen.. ohne Erfolg. (Die Wahrscheinlichkeit dass ich mich da nochmal drann setzte ist grade <10% ><)
Trotzdem würde ich nicht sagen dass das ganze unbrauchbar ist. Man muss nur mehr Variablen verwenden und eben solche Kombinationen vermeiden.
Des weiteren fehlt weiterhin leider die Unterstützung von Arrays sowie dem switch-, do-until- und dem with-statement. For, while und repeat funktionieren aber einwandfrei wodurch das ganze Turing-Vollständig ist. D.h. theoretisch kann alles berechenbare mit der Sprache berechnet werden. So auch z.B. den Primzahlenrechner den man auf den Screen sehen kann.
Q: Was gibt es sonst noch?
A: Wie schon erwähnt sind die Funktionen GML_set/get_variable mit den Funktionen variable_local/global_set/get vom normalen GM äquivalent.
Das System beinhaltet auch Funktionen um alle verwendeten Variablen abzurufen (kann z.B. nützlich sein wenn man nur den Editor verwenden will um den Code dann mittels dem normalen execute_string im GM 8.x auszuführen. Dann kann man damit überprüfen ob z.B. die Score Variable, etc verändert wurde).
Verwendet man den Editor werden auch nur die Funktionen akzeptiert die in ein weiteres Skript eingetragen wurden, somit hat man eine "Whitelist".
Die Funktion GML_replace_string_incode ersetzt übrigens eine Funktion oder Variable innerhalb eines Skriptes. Dabei vermeidet sie es automatisch auch die Variable in einem String zu ersetzen, etc (die Funktion benutzt aber nicht dem compiler des Interpreters sondern basiert nur auf string Funktionen).
Des weiteren gibt es noch ein paar weitere Skripte die man vielleicht brauchen könnte.
Das wärs auch schon. Hoffe dass das ganze jemandem nützlich ist

Weitere Fragen dürfen gerne gestellt werden.
GM 8.1: host-a.net/u/DragonGamer/GML_Interpreter.zip
Studio: host-a.net/u/DragonGamer/gml_interpreter_-_studio.zip