Die Minisprache ist von der Syntax her den späteren Wirth-Sprachen (Modula-2, Oberon) nachempfunden. Insbesondere sind alle Strukturen selbstklammernd, Variablen werden vor Beginn des Algorithmus vereinbart. Die typischen Algorithmuselemente sind vorhanden: Ein- und zweiseitige bedingte Anweisung, Wiederholung mit Ein- bzw. Ausgangsbedingung sowie Zählwiederholung.
Aufgrund der einfachen Zielmaschine sind natürlich Einschränkungen notwendig. Es gibt keine Unterprogramme, da diese von der Minimaschine nicht unterstützt werden. Aus dem gleichen Grund gibt es auch keine Unterstützung für Kommazahlen. Da auch auf die Einführung logischer Werte verzichtet wird, beschränken sich die Variablen auf ganze Zahlen, sodass kein Typenkonzept eingeführt werden musste.
Ergebnisse von Algorithmen müssen wie bei der Assemblerprogrammierung im Speicher abgelegt werden. Die Vorbesetzung von Variablen erfolgt direkt zu Beginn eines Programms.
Jedes Programm besteht prinzipiell aus drei Teilen: Kopf, Variablenvereinbarung und Rumpf.
PROGRAM Ggt; (* Berechnet den GGT zweier Zahlen *) VAR z1, z2; BEGIN (* Startwerte *) z1 := 24; z2 := 18; (* eigentliche Berechnung *) WHILE z1 <> z2 DO IF z1 >= z2 THEN z1 := z1 - z2 ELSE z2 := z2 - z1 END END END Ggt.
Der Programmkopf besteht aus dem Schlüsselwort PROGRAM und einem Programmnamen, der am Ende wiederholt wird.
Die Variablenvereinbarung wird eingeleitet durch das Schlüsselwort VAR, gefolgt von einer durch Komma getrennten Liste von Variablennamen.
Der durch BEGIN und END name eingeschlossene Rumpf enthält den Algorithmus. Alle Anweisungen werden mit ";" getrennt. Für Terme werden die üblichen Rechenzeichen verwendet (+, -, *, /), das Zeichen "%" berechnet den Rest der ganzzahligen Division. Zuweisungen werden als ":=" notiert.
Zwischen den Terminalsymbolen können beliebig Kommentare eingestreut werden. Kommentare beginnen mit der Zeichenfolge "(*" und enden mit der Zeichenfolge "*)"; sie können über mehrere Zeilen gehen. Kommentare dürfen nicht geschachtelt werden.
Bei Aktivierung der Erweiterungen wird die Minisprache um Felder und um Unterprogramme erweitert.
Felder werden durch eine eckige Klammer mit Angabe der Feldlänge hinter dem Variablennamen vereinbart.
Zugriff auf die Feldelemente erfolgt ebenfalls durch eckige Klammern; der Index läuft von 0 bis Länge-1.
Eine Indexkontrolle findet nicht statt.
Prozeduren werden nach den Variablen und vor dem Programmrumpf vereinbart. Sie können auf die globalen
Variablen zugreifen sowie lokale Variable und Parameter vereinbaren.
Es werden reguläre Prozeduren ohne Rückgabewert (Schlüsselwort PROCEDURE) und Funktionsprozeduren mit
einer ganzen Zahl als Rückgabewert (Schlüsselwort FUNCTION) unterschieden. Der Aufruf regulärer
Prozeduren ist eine Anweisung, Funktionsprozeduren werden in Termen verwendet.
Die vollständige Syntax der Minisprache in EBNF (Erweiterungen sind kursiv gesetzt):
Programm = Kopf { Variablenvereinbarung } { Prozedurvereinbarung } Rumpf . Kopf = "PROGRAM" Bezeichner ";" . Rumpf = "BEGIN" Anweisungsfolge "END" Bezeichner "." . Variablenvereinbarung = "VAR" Variable { "," Variable } ";" . Variable = Bezeichner [ "[" Zahl "]" ] . Prozedurvereinbarung = ( "PROCEDURE" | "FUNCTION" ) Bezeichner "(" { Paramterliste } ")" [ Variablenvereinbarung ] "BEGIN" Anweisungsfolge "END" Bezeichner ";" . Paramterliste = Parameter { "," Parameter } . Parameter = [ "VAR" ] Bezeichner [ "[" Zahl "]" ] . Anweisungsfolge = Anweisung { ";" Anweisung } . Anweisung = [ Zuweisung | BedingteAnweisung | WiederholungMitEingangsbedingung | WiederholungMitAusgangsbedingung | ZaehlWiederholung | Prozeduraufruf | ReturnAnweisung ] . Zuweisung = Bezeichner [ "[" Ausdruck "]" ] ":=" Ausdruck . BedingteAnweisung = "IF" Bedingung "THEN" Anweisungsfolge [ "ELSE" Anweisungsfolge ] "END" . WiederholungMitEingangsbedingung = "WHILE" Bedingung "DO" Anweisungsfolge "END" . WiederholungMitAusgangsbedingung = "REPEAT" Anweisungsfolge "UNTIL" Bedingung . ZaehlWiederholung = "FOR" Bezeichner ":=" Ausdruck "TO" Ausdruck [ "BY" [ "+" | "-" ] Zahl ] "DO" Anweisungsfolge "END" . Prozeduraufruf = Bezeichner "(" [ Ausdruck { "," Ausdruck } ] ")" . ReturnAnweisung = "RETURN" [ Ausdruck ] . Bedingung = Ausdruck ( "=" | "<>" | ">" | ">=" | "<" | "<=" ) Ausdruck . Ausdruck = [ "+" | "-" ] Term { ( "+" | "-" ) Term } . Term = Faktor { ( "*" | "/" | "%" ) Faktor } . Faktor = Bezeichner [ "[" Ausdruck "]" ] | Zahl | "(" Ausdruck ")" | Funktionsaufruf . Funktionsaufruf = Bezeichner "(" [ Ausdruck { "," Ausdruck } ] ")" . Bezeichner = "A" .. "Z" | "a" .. "z" { "A" .. "Z" | "a" .. "z" | "0" .. "9" | "_" | "$" } . Zahl = "0" .. "9" { "0" .. "9" } .
Die Kommentare treten im Syntaxdiagramm nicht auf, da sie entsprechend den Leerzeichen, Tabulatoren oder Zeilenwechseln bereits bei der Zerlegung des Quelltextes in Terminalsymbole abgearbeitet werden.