Skip to content

VorlageDokuEinfuehrung

gulrak edited this page Jul 28, 2019 · 2 revisions

Einführung in die Sprache

Warum eine eigene Sprache?

Zunächst einmal zur Frage, warum ich eigentlich eine eigene Skriptsprache implementiert habe, wo es doch bereits zahlreiche freie Skriptsprachen gibt, die besser dokumentiert sind, schneller interpretiert werden und zudem zum Teil auch einfach in eigene Projekte eingebunden werden können? - Darauf gibt es nicht nur eine Antwort:

Zunächst einmal, war für Vorlage nie ein Interpreter geplant. Es sollte nur ein Zugvorlagengenerator werden, der es ermöglicht, ohne in den Normalreport zu schauen, seinen Zug zu erstellen. Dies ist der Grund für den Namen und auch dafür, das es mehr Features für die Zugvorlagen-Erzeugung gibt, als für die Computerreport-Erzeugung. Nach Betrachtung des Perl-Generators von Georg Edelmayer, kam die Idee auf, einfache kleine Befehle einzubauen um simple Automatisierungen zu ermöglichen. So wurden dann #after, #next, #forever, #every implementiert. Mit den Befehlen kam dann der Wunsch die Parameter der darin angegebenen Eressea-Befehle von Report-Daten abhängig zu machen. Kurzerhand wurde ein Expression-Parser eingebaut, ein paar Report-Objekte abgebildet und so konnte Vorlage Ausdrücke. Von da war es dann nur ein kleiner Schritt zu einer eigenen Sprache, da die Mechanismen nun schon alle vorhanden waren.

Zum anderen war natürlich schon früh mit dem Einbauen der Befehle die Frage aufgekommen ob nicht eine fertige Skriptsprache einfacher wäre. Allein der Aufwand eine eigene Sprache leidlich Fehlerfrei zu erstellen zwang diese Frage auf die Tagesordnung. Aber es gab dann einige Gründe die diesen Weg nicht so attraktiv erscheinen liessen wie eine komplett eigene Sprache:

Atlantis-Ableger haben eine wenig computerfreundliche Spielsprache. Die Befehle sind durch Zeilemumbruche getrennt und die Argumente durch Leerzeichen. Das bedeutete, das eine eingebettete fremde Sprache nicht mit den Atlantis-Befehlen mischbar war, da die üblichen Skriptsprachen Leerzeichen an den meisten Stellen ignorieren, diese also keine Funktion erfüllen. Fast alle Sprachen haben heute das Semikolon mit einer Funktion belegt, in der Regel zum Trennen oder Abschliessen von Befehlen. Das Semikolon darf aber in den Zügen nicht verwendet werden, da es im Spiel einen Kommentar einleitet und alles ab dem ersten Semikolon einer Zeile abgeschnitten wird. Perl ist nach meiner Meinung zu groß und für Einsteiger zu kompliziert um in so einem Projekt verwendet zu werden. Python erfordert kosmetische Klimmzüge um das notwendige Einrücken von Schachtellungen stabil über den Server zu retten. Tcl ist prinzipbedingt eher langsam (auch wenn im Moment schneller als der Vorlage-Interpreter). Allen betrachteten (auch Lua oder C-Interpretern) ist gemein, das sie nicht mit den PBEM-Befehlen gemischt werden können. Es ist sicher nicht Jedermanns Sache, aber die Möglichkeit Spiel-Befehle ohne irgendwelche Say-, Emit- oder Print-Befehle verwenden zu können, stellte ein wichtiges Design-Kriterium dar, mit der Hoffnung den Zugang auch Nichtcodern zu erleichtern. Ich will aber auch nicht verschweigen, das es einfach Spaß gemacht hat, was eine gute Motivation ist. ;-)

Die Komponenten

Die Skriptsprache von Vorlage kann in drei Komponenten eingeteilt werden. Diese haben unterschiedliche Regeln und ein Verständnis ihrer Besonderheiten ist sicherlich notwendig um vollen Nutzen aus Vorlage zu ziehen.

Die die drei Bereiche sind:

Metabefehls-Syntax
Dieser Abschnitt erklärt die Verwendung und Mischung von Metabefehlen und den normalen Befehlen eines PBEMs.

Metabefehls-Ausdrücke
Dieser Abschnitt befasst sich mit Ausdrücken um, Werte für Variable oder Parameter für Befehle zu berechnen.

Reguläre Ausdrücke
In diesem Abschnitt wird auf die von Perl entliehenen Ausdrücke zum Mustervergleich eingegangen, die für einige Text-Funktionen in Vorlage verwendet werden.

vordefinierte Variablen
Diese Seite beschreibt die Variablen die der Interpreter schon erzeugt.

Clone this wiki locally