Einführung in Prioritäten von Operatoren Rahmen der Lehre formaler Sprachen. (linksassoziativ, Priorität, Prioritäten, Vorrang, von, Operator, Operatoren, Operators), Lektion, Seite 721061
http://www.purl.org/stefan_ram/pub/formal_prioritaet_de ist die kanonische URI dieser Seite.
Stefan-Ram-Startseite

Prioritäten

Prioritätstabellen

Ein komplexer Ausdruck kann auf unterschiedliche Weise in Teilausdrücke zerlegt werden. So kann man den Ausdruck 1 / 2 / 3 als ( 1 / 2 )/ 3 oder als 1 /( 2 / 3 ) auffassen. Jedoch ist nur die erste Interpretation richtig. Man sagt dafür auch der Divisionsoperator "/" sei linksassoziativ.

Wenn in einem Ausdruck unterschiedliche  Operatoren auftauchen, dann kann es vorkommen, daß einer davon eine höhere Bindungskraft hat und dadurch die Assoziativität irrelevant wird. So ist der Ausdruck 1 + 2 · 3 beispielsweise immer als 1 +( 2 · 3 ) zu lesen und nie als ( 1 + 2 )· 3, weil der Multiplikationsoperator "·" höhere Priorität hat als der Additionsoperator. (Man sagt auch „Punktrechnung geht vor Strichrechnung.“)

Für eine Programmiersprache faßt man Assoziativität und Priorität der Operatoren oft in einer Tabelle zusammen. Für den bekannten Fall von Punktrechnung und Strichrechnung sieht solch eine Tabelle beispielsweise folgendermaßen aus. Das "L" kennzeichnet Linksassoziativität, und Operatoren mit stärkerer Bindungskraft stehen weiter oben. Operatoren innerhalb einer Zeile haben die gleiche Priorität (dann ist die Assoziativität zu berücksichtigen).

Priorität und Assoziativität einiger Operatoren
L   * /         Multiplikation, Division 
L + - Addition, Subtraktion

Produktionen

Die Interpretation eines Ausdrucks wird innerhalb einer Grammatik durch Produktionen festgelegt, die ebenfalls Assoziativität und Priorität klarstellen können. Dazu sei folgendes Beispiel gegeben,

primary-expression〉 ::=
"1" | "2" | "3".
multiplicative-expression〉 ::=
primary-expression〉 |
multiplicative-expression〉 "*" 〈primary-expression〉 |
multiplicative-expression〉 "/" 〈primary-expression〉.
expression〉 ::=
multiplicative-expression〉 |
expression〉 "+" 〈multiplicative-expression〉 |
expression〉 "-" 〈multiplicative-expression〉.

Angesichts dieser Regeln kann man den Ausdruck "1 + 2 * 3" nur als expression〉 "+" 〈multiplicative-expression lesen, aber nicht als multiplicative-expression〉 "*" 〈primary-expression, weil der Text "1 + 2" keine multiplicative-expression ist. So ist der Vorrang der Punktrechnung bereits durch die Produktionen klargestellt, ohne daß er einer zusätzlichen Festlegung bedarf. Daher ist eine Prioritätstabelle keine notwendige zusätzliche Angabe zu einer Grammatik, sondern nur eine übersichtliche Darstellung von Informationen, die aber ohnehin schon in der Grammatik einer Sprache enthalten sind. Eine Prioritätstabelle kann auch nicht immer alle zur eindeutigen Interpretation eines Ausdrucks notwendigen Festlegungen der Grammatik darstellen, in bestimmten Sprachen muß zur Interpretation von Ausdrücken mit ternären Operatoren beispielsweise die Grammatik herangezogen werden.

Übungsaufgabe Wie bringen die Produktionen die Linksassoziativität zum Ausdruck?

Fragen und Antworten

Zu dieser Lektion wurden folgende Fragen gestellt.

¿   Was bedeutet das fragezeichen in der Zeile: "...beispielsweise in dem Falle des C++-Ausdrucks "a = b < c ? d = e : f = g..." oder hab ich da nicht aufgepasst?
In einem früher in dieser Lektion enthaltenen Absatz wurde der ternäre ?:-Operator verwendet, dessen Bedeutung in dieser Lektion nicht behandelt werden sollte. Da die Verwendung dieses Operators aber möglicherweise vorausgreift, habe ich den betreffenden Absatz inzwischen aus dieser Lektion entfernt.

Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Seiteninformation und Impressum  |   Formular für diese Seite betreffende Mitteilungen an den Herausgeber  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz