type Identifier { attribute1 = TextWithoutSpaces attribute2 = "Text with spaces" attribute3 = 3.457 attribute4 = (a, list, of, entries) type subIdentifier { // some comment subattr1 = Something damage = (15+1d3, 10+1d2, 5) } type // without identifier { } }
Blöcke sind eine Sammlung aus Attributen und Unterblöcken. Sie werden durch eine Typenbezeichnung und einen optionalen Namen deklariert, ihre Inhalte sind im Inneren von geschweiften Klammern aufgeführt.
Ein Attribut hat einen Namen und eine zugeordnete Liste von Stringwerten, in der allgemeinsten Form folgendermaßen definiert:
attribut = ("Eine Liste", "von", "String-Werten", "mit Kommata separiert")
String-Werte ohne Leerzeichen können ohne Anführungszeichen angegeben werden. Im Falle einer Liste mit nur einem Wert können die Klammern weggelassen werden. Numerische Werte werden intern auch als String behandelt und beim Zugriff auf Wunsch entsprechend umgewandelt.
Das Auftauchen zweier Forward Slashes deklariert den Rest der Zeile als Kommentar.
Eine Datei ist der globale Block mit Typnamen “GLOBAL” und unspezifiziertem Bezeichner. Sie enthält beliebig viele Unterblöcke und kann auch Attribute enthalten.
file ::= inner_block inner_block ::= (block | attribute)* block ::= identifier [identifier] '{' inner_block '}' identifier ::= alphanumeric (alphanumeric)* attribute ::= identifier '=' value eol value ::= list | string list ::= '(' (list | string) (',' (list | string))* ')'