Frage

Ich bin ein Spiel in XNA zu schaffen und dachte meine eigene Skriptsprache (extrem einfach wohlgemerkt) zu schaffen. Ich weiß, es gibt bessere Möglichkeiten, um dies zu realisieren (und dass ich das Rad neu zu erfinden), aber ich mag die Lernerfahrung mehr als produktiv und schnell zu sein.

Wenn Sie mit Code zur Laufzeit konfrontiert, von dem, was ich verstehe, ist die übliche Vorgehensweise ist in einen Maschinencode oder Byte-Code oder etwas anderes zu analysieren, die tatsächlich ausführbar ist und dann die ausgeführt wird, nicht wahr? Aber zum Beispiel, wenn Chrome zum ersten Mal aus denen sie ihrem JavaScript-Engine schnell war, weil es die JavaScript-Code in Maschinencode kompiliert. Dies bedeutet, andere Motoren wurden nicht in Maschinencode kompiliert wird.

Ich würde es vorziehen, nicht auf eine niedrigere Sprache kompilieren, so ist es bekannte moderne Techniken für die Analyse und die Ausführung von Code ohne auf einem niedrigen Pegel zu Kompilieren? Vielleicht so etwas wie den Code in eine Art Baum Parsen, Verzweigung durch den Baum, und jedes Symbol zu vergleichen und eine Funktion aufrufen, die dieses Symbol behandelt? (Wild erraten und Messerstecherei im Dunkeln)

War es hilfreich?

Lösung

Ich persönlich würde nicht Ihren eigenen Parser rollen (die Eingabe in Token Drehen) oder Lexer (die Eingabe-Token für Ihre Sprache Grammatikprüfung). Schauen Sie sich auf ANTLR für das Parsen / lexing - es ist ein großer Rahmen und hat vollständigen Quellcode, wenn Sie möchten, graben sich in die Eingeweide davon.

Für die Ausführung von Code, die Sie analysiert haben, würde ich sehen, eine einfache virtuelle Maschine zu laufen oder sogar besseren Blick auf llvm das ist ein Open-Source (ish) Versuch, die virtuelle Maschine Byte-Code-Format und bieten nette Features wie Jiting (Drehen Sie Ihr Skript kompiliert Bytecode in Assembly) zu standardisieren.

Ich möchte Sie von den erweiterten Optionen nicht entmutigen, die Sie Maschine wie nativen Maschinencode Ausführung aber bedenken Sie, dass dies ein sehr Fachgebiet und wird wirklich komplex, wirklich schnell!

Earlz wies darauf hin, dass meine Antwort könnte ‚nicht die Mühe zu implizieren scheint dies selbst zu tun. Re-Lesen meiner Post es klingt ein bisschen so. Der Grund habe ich erwähnt, ANTLR und LLVM ist sie beide Haufen von Quellcode und Tutorials so fühle ich mich ist dies eine gute Referenzquelle. Nehmen Sie es als Basis und spielen

Andere Tipps

Sie können diesen Rahmen versuchen Sprachen für den Bau (es funktioniert gut mit XNA): http://www.meta-alternative.net/mbase.html

Es gibt einige Tutorials: http://www.meta-alternative.net/calc.pdf

http://www.meta-alternative.net/pfront.pdf

Python ist groß als Skriptsprache. Ich würde Ihnen empfehlen, eine C # machen für seine C-API-Bindung und diese verwenden. Embedding Python ist einfach. Ihre Anwendung kann Funktionen, Typen / Klassen und Variablen innerhalb von Modulen definieren, die die Python-Interpreter zugreifen können. Die Anwendung kann auch Funktionen in Python-Skripten aufrufen und ein Ergebnis zurück. Diese beiden Funktionen kombiniert geben Ihnen ein Zwei-Wege-Kommunikationsschema.

Grundsätzlich erhalten Sie die Python-Syntax und Semantik kostenlos. Was würden Sie brauchen, zu implementieren, ist die API Ihre Anwendung Python aussetzt. Ein Beispiel hierfür könnte sein, den Zugang Logikfunktionen zum Spiel und Funktionen machen. Python-Skripte würde dann Funktionen definieren, die diese Anrufe und die Host-Anwendung würde die Python-Funktionen (mit Parametern) aufrufen, um Ihre Arbeit erledigen.

EDIT: Scheint, wie Ironpython können Sie noch mehr Arbeit speichern. Es ist eine C # -Implementierung von CPython, und verfügt über eine eigene Einbettung API: http://www.ironpython.net/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top