Programmiersprache Pascal

Pascal-Operatoren

Operatoren können unterschieden werden nach Pascal verwendet die Infix-Notation für binäre Operatoren und die Prefix-Notation für unäre Operatoren.

Die Stärke des Operators entscheidet bei fehlender Klammerung über die Auswertungsreihenfolge in Ausdrücken.
Beispiel:
a + b * c wird ausgewertet als a + ( b * c ), und nicht als ( a + b ) * c.

Aus der Stärke der Operatoren leitet sich die Rangfolge der Operatoren ab.

Bei Links-Assoziativität werden Ausdrücke mit Operatoren gleicher Stärke von links nach rechts ausgewertet.
Beispiel:
a * b * c wird ausgewertet als ( a * b ) * c, und nicht als a * ( b * c ).

Mit Ausnahme des Zuweisungsoperators sind in Pascal alle Operatoren links-assoziativ.


Rangfolge der Operatoren (Vorrangregeln)

Die Rangfolge bestimmt, in welcher Reihenfolge die Auswertung in Ausdrücken erfolgt, in der mehrere Operatoren zum Einsatz kommen.

Standard Pascal

  Höchste Priorität
    1       |           NOT
    2       |           *     /    DIV   MOD   AND
    3       |           +     -    OR
    4       V           =     <>   <     <=    >    >=   IN
  Niedrigste Priorität
Delphi

  Höchste Priorität
    1       |           NOT   @
    2       |           *     /    DIV   MOD   AS   AND   SHL   SHR
    3       |           +     -    OR    XOR
    4       V           =     <>   <     <=    >    >=    IN    IS
  Niedrigste Priorität
Verbal läßt sich Rangfolge der Operatoren wie folgt angeben: Extended Pascal

Die Rangfolge der Operatoren läßt sich verbal wie folgt angeben:

  Höchste Priorität
    1       |           NOT
    2       |           **    POW
    3       |           *     /    DIV   MOD
    4       |           +     -    OR
    5       V           =     <>   <     <=    >    >=    IN
Für andere Pascal-Versionen gelten die Schemata - soweit die Operatoren verfügbar sind - analog.

Allgemein lassen sich folgende Auswertungsregeln formulieren:

  1. Ein Operand zwischen zwei Operatoren unterschiedlicher Priorität wird an den Operator höherer Priorität gebunden.
  2. Ein Operand zwischen Operatoren gleicher Priorität wird an den Operator gebunden, der links von ihm steht.
  3. Ausdrücke in Klammern werden zuerst ausgewertet, und der gesamte Ausdruck wird als ein einzelner Operand behandelt.
  4. Allerhöchste Priorität besitzt die Auswertung von Funktionsaufrufen.
  5. Geringste Priorität hat stets der Zuweisungsoperator.
Die Vorrangregeln für Operatoren sind in allen Programmiersprach(version)en ähnlich, jedoch im Detail nicht identisch. Im Zweifelsfall ist es ratsam, durch Klammersetzung die gewünschte Rangfolge zu erzwingen.
Andererseits sollte jedoch auch übermäßige Klammersetzung vermieden werden, da sonst die Lesbarkeit leidet.
Im Interesse der Lesbarkeit ist es ferner, "Bandwurmausdrücke" zu vermeiden.


Beispiel:

  VAR i, j : INTEGER;
                                { liefert                         }
  Writeln( i AND j > 0 );       { Syntaxfehler in Standard Pascal }
                                { logischen Wert in and. Systemen }


P. Böhme, 07.09.1996