© APSIS GmbH |
Unter einem Primärausdruck verstehen wir ein Literal, den Namen einer (evtl. konstanten, d.h. final) Variablen oder einen Funktionsaufruf (ohne oder mit Parameter) oder einen in runde Klammer eingeschlossenen Ausdruck. Der Begriff Ausdruck wird rekursiv definiert: Er ist entweder ein Primärausdruck (wie oben definiert) oder ein Operationszeichen mit (vielleicht Primär-) Ausdrücken als Parameter.
Durch die (hier vereinfachte) Syntax der Sprache wird exakt definiert, was ein (logischer) Ausdruck ist:
Ausdruck ::= Relation { Operator Relation } Operator ::= & | | | ^ Relation ::= Einfacher_Ausdruck [ Relationaler_Operator Einfacher_Ausdruck ] Relationaler_Operator ::= < | <= | == | >= | > | != Einfacher_Ausdruck ::= [ ! ] Primärausdruck Primärausdruck ::= Name | Funktionsaufruf | (Ausdruck ) Funktionsaufruf ::= Name ( [ Aktuelle_Parameter ] ) Aktuelle_Parameter ::= Ausdruck {, Ausdruck }
In der letzten Zeile taucht in der Definition von Ausdruck über den Primärausdruck der geklammerte Ausdruck wiederholt auf. Dieses Phänomen heißt ähnlich wie die sich selbst aufrufende Prozedur Rekursion.
Die Syntax beschreibt nicht, von welchen Typen diese Parameter sein sollen. Dies wird durch die sog. Kontextbedingungen überprüft und in der Sprachbeschreibung nicht formal, sondern in natürlicher Sprache (deutsch oder englisch) definiert.
Übung: Überprüfen Sie mit Hilfe der obigen Syntax, ob die folgenden drei Programmausschnitte einen gültigen Ausdruck bilden. Falls Sie einen syntaktischen Fehler finden, verbessern Sie den Ausdruck zu einem gültigen:
heute == montag & (! morgen == sonntag) & lieferung(drucker) != angekommen heute >= montag | ((morgen > donnerstag) & ! (lieferung(compiler) == angekommen)) heute >= montag | (morgen > donnerstag ! & lieferung() == angekommen))
© APSIS GmbH |