GESStabs-Anweisungssprache

<< Click to Display Table of Contents >>

Navigation:  Arbeit mit GESStabs >

GESStabs-Anweisungssprache

GESStabs arbeitet skriptbasiert, d.h. (fast) alle Steueranweisungen werden über ein Skript - eine Textdatei mit der Endung ".tab" - an das Programm übergeben. Die tab-Datei wird als ein formatfreier Inputstream interpretiert. Der/die Benutzer/in kann deshalb zur besseren Lesbarkeit seine Anweisungen frei formatieren und beispielsweise mithilfe von Kommentaren strukturieren.

Auf die Groß-/ Kleinschreibung kommt es für die Schlüsselwörter und Variablennamen nicht an, d.h. Alter, ALTER und alter bezeichnen dieselbe Variable, und COMPUTE bedeutet dasselbe wie compute. Es gibt eine wichtige Ausnahme: Fontnamen und Präprozessor-Defines sind kein Bestandteil der GESStabs-Sprache. Sie sind immer exakt zu übernehmen, die Groß- und Kleinschreibung ist hierbei relevant.

Bedeutend ist die Reihenfolge der Steuerungsanweisungen. Das Skript wird linear, von vorne nach hinten, vom Programm abgearbeitet. Das heißt, dass bspw. für eine Berechnung auf Grundlage von Variablen die darin einbezogenen Variablen erstmal bekannt sein müssen, was bedeutet: Die Variablenbeschreibung muss vor dem COMPUTE-Befehl.

Für einige Befehle gibt es lokale und globale Varianten (z.B. PRINTALL und GLOBALPRINTALL, ASALPHA und GLOBALASALPHA). Einmal gesetzt, gelten globale Statements als Voreinstellung für alles Folgende. Eine lokale, d.h. explizit für einzelne Variablen formulierte Spezifikation hat stets Vorrang vor einer global vergebenen Eigenschaft.


Keywords

Jede in GESStabs verfügbare Funktion wird über ein Schlüsselwort (Keyword) angesprochen. Die Keywords bilden somit den Kern der Software und dieser Dokumentation. Für jedes Keywords wird einführend, im jeweiligen Themenabschnitt, dessen Syntaxstruktur beschrieben.

Im Rahmen dieser Dokumentation werden die Keywords so gekennzeichnet: KEYWORD.

Alle GESStabs-Keywords finden sich im Index wieder.


Systematik der Syntaxbeschreibung

Die "Syntax“ ist eine Vorschrift, welche Elemente aneinandergereiht werden können, um ein gültiges Statement (und in der Summe: ein Skript) zu bilden.

Das Handbuch beschreibt für jedes Keyword die dazugehörige gültige Syntax anhand der grundsätzlichen Syntaxstruktur (eingeleitet mit: Syntax: ...).

Das zentrale Symbol ist das Ersetzungszeichen „::=“.

Keywords sind dadurch gekennzeichnet, dass sie in Versalien in der Syntaxbeschreibung stehen.

Wie oben erwähnt, ist die Groß-/Kleinschreibung im Skript irrelevant.

[ ] geben eine Option an, die optionalen Teile innerhalb der Auswahlklammer sind durch senkrechte Striche ( | ) abgetrennt.

Eine offene Menge wird durch geschweifte Klammern { }*n beschrieben.

Ausdrücke in spitzen Klammern < > beschreiben den erwarteten Inhalt einer Sequenz und werden entweder durch weitere Zeilen in der Syntaxbeschreibung definiert oder sind ein Rückgriff auf die Umgangssprache.


Kommentare

Kommentare können an jeder Stelle im Skript eingestreut werden. Sie werden in geschweifte Klammern eingeschlossen. Ein Kommentar gilt als nicht geschrieben; Im Extremfall kann man einen Kommentar sogar in ein Keyword oder einen Variablennamen einbauen. Innerhalb von Anführungszeichen werden Kommentare nicht als Kommentare erkannt, d.h. sie werden Bestandteil des Strings. Mit anderen Worten: in Strings kann man nicht kommentieren.

Beispiel:

compute x = y { hier soll das Doppelte berechnet werden } * 2;

... wird von GESStabs verarbeitet als:

compute x = y * 2;

Zusätzlich gibt es einen Kommentar bis zum Zeilenende: den doppelten Schrägstrich //. Ab diesem Zeichenpaar wird der Input bis zum Zeilenende ignoriert.

Etwa:

// in dieser Zeile steht überhaupt nichts Relevantes.  

compute x = y * 2;    // hier soll das Doppelte berechnet werden


Begriff des 'Token'

In vielen Fällen erwartet GESStabs einen "Token" (und gibt eine entsprechende Fehlermeldung aus, wenn der Token fehlt oder unbekannt ist), z.B. einen Variablennamen oder ein Wertelabel. Das ist entweder ein zusammenhängendes Wort (wie Alter), oder eine Einheit, die durch Anführungszeichen gebildet wird und dann auch Trennzeichen wie Leerzeichen etc. enthalten darf (z.B. "Erste Stimme"). Das bedeutet zweierlei:

1. Auch Wertelabel müssen nicht in Anführungszeichen stehen, wenn sie aus einer zusammenhängenden Zeichenkette bestehen (z.B. das Label Ja).

2. Auch Variablennamen können Leerzeichen oder andere Sonderzeichen enthalten, wenn man sie konsequent in Anführungszeichen benutzt. Als Anführungszeichen gelten hierbei " und ’. Diese Regelung ermöglicht es, entweder ’ oder " auch in Token zu verwenden.

Token dürfen im Übrigen keine Zeilenvorschübe enthalten.


(Freie) Texte

Von den Token zu unterscheiden sind die ebenfalls in Anführungszeichen gesetzten Texte (VARTEXT, TOPTEXT usw.): diese werden inklusive möglicher Zeilenschaltungen in die entsprechenden Tabellenteile übernommen und dürfen selbstverständlich Zeilenvorschübe, -umbrüche u.Ä. enthalten. Auch hier gelten ’ und " als Anführungszeichen.


Variablennamen

Gültige Variablennamen können beliebig lang sein. Sie dürfen aus allen druckbaren Zeichen (außer dem Anführungszeichen) bestehen, wenn man sie in Anführungszeichen einschließt. Das erste Zeichen des Variablennamens muss ein Buchstabe (A..Z, Ä, Ö, Ü, ß, groß oder klein) sein. Will man einen Variablennamen ohne Anführungszeichen (siehe Token) benutzen, so darf man alle Buchstaben und Ziffern sowie Punkt und Unterstrich verwenden. Es funktioniert auch mit einigen anderen Zeichen, z.B. "$". Dies wird jedoch nicht empfohlen, da dies in späteren Versionen von GESStabs unter Umständen nicht mehr unterstützt wird. Generell ist es illegal, Variablen mit den Schlüsselwörtern des Systems zu benennen, diese gelten als reservierte Namen, ebenso wie die automatisch generierten Systemvariablen.

Beispiele für gültige Variablennamen:

alter 
v_001 
frage2 
item.1 
"Wahlabsicht bei der Bürgerschaftswahl"
"Alter+1"

Beispiele für ungültige Variablennamen:

SINGLEQ 
TO 
SORT 
ROUND 
1alter 
1000 
1.Frage 
"1.Frage" 
alter+1 
2000.1


Variablenlisten

Viele Anweisungen operieren mit einer Liste von Variablen, kurz Varlist. Dies ist in der Syntaxbeschreibung der jeweiligen Anweisung durch <Varlist> gekennzeichnet. Eine Variablenliste besteht im einfachsten Fall aus einer Auflistung von Variablen, z.b:

var1 var2 var3 var4

Oft ist es ökonomischer, mit TO zu arbeiten. Mit der Reihenfolge in der Variablendeklaration* ist eine eindeutige Reihenfolge der Variablen gegeben. Zur Bildung einer Variablenliste kann man mit dem Keyword TO auf diese Reihenfolge Bezug nehmen und viele Variablen ansprechen. Schreibt man:

var1 TO var4

werden die Variablen var1, var4 und alle Variablen dazwischen angesprochen (in der Reihenfolge: erst var1, dann alle Variablen, die im Skript zwischen var1 und var4 definiert wurden, und zuletzt var4).

*Variablen werden explizit mit dem VARNAME-, SINGLEQ, VARIABLES, COLUMNVARS, VARGROUP, DICHOQ, VARFAMILY, MULTIQ, MAKEGROUP oder MAKEFAMILY-Statement deklariert. Variablen können zudem durch COMPUTE, COUNT oder IF-Statements gebildet werden. Wenn nämlich das Resultat einer Berechnung in einer noch nicht existierenden Variable abgelegt werden soll, wird diese Variable schließlich neu gebildet.

Kontext

Die GESStabs-Sprache besitzt im Zusammenhang mit Variablenlisten einen Kontext-Mechanismus: Wenn eine Variablenliste leer ist, d.h. wenn man gar keine Variable benennt, dann bezieht sich GESStabs immer auf die zuletzt erzeugte Variable.

Also: Wann immer "VarList" in der Syntax-Definition eines Statements auftaucht, kann dieses Statement in zwei Formen verwendet werden:

1. mit Kontextbezug, indem man eine leere Variablenliste angibt; Dann bezieht sich das Statement auf die zuletzt definierte Variable.

2. mit explizitem Bezug, d.h. Angabe einer nicht-leeren Variablenliste, zu einer oder mehrerer Variablen (siehe oben).