associativity

___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer9408203 ___

Die Grammatik selbst spezifiziert die Assoziativität durch die verwendeten Produktionen:

%Vor%

Dies bedeutet, dass in %code% , %code% als %code% und %code% als 1 %code% analysiert werden muss, bevor das %code% selbst weiter analysiert wird. Daher wird die Links-Assoziativität der Multiplikation durch die Parser-Regeln in den Syntax-Baum gezwungen.

    
___ answer9408167 ___

Operator-Assoziativität wird nicht explizit als "rechts-assoziativ" oder "links-assoziativ" angegeben. Sie leiten es von der Grammatik ab. In Ihrem Beispiel bezieht sich der Ausdruck %code% rekursiv auf sich selbst und die Rekursion auf der linken Seite des Operators. Das bedeutet, dass ein Parser, der auf %code% trifft, %code% wie %code% parsen muss, was linksassoziativ ist.

Der %code% -Term (6.5.16) hat diese Grammatik:

%Vor%

Also muss ein Parser, der auf %code% stößt, ihn wie %code% parsen, was rechtsassoziativ ist.

    
___ qstnhdr ___ C99 Assoziativität für Operatoren - wo wird es angegeben? ___ qstntxt ___

Im C99-Standard erlauben die Ausdrücke Vorrang und Assoziativität.

Die Rangfolge ist ziemlich gut dokumentiert, da die Reihenfolge, in der die Operatoren im Dokument erscheinen, die Rangfolge verringert, so dass Funktionsaufrufe vor multiplikativen Operatoren stehen, die wiederum vor additive Operatoren stehen.

Ich kann jedoch keine definitive Beschreibung der Assoziativität finden, ob sie links oder rechts ist. Dies ist wichtig, da %code% für eine Variante %code% und %code% für die andere Variante %code% %code% wäre.

Abschnitt %code% state:

  

Die Syntax gibt den Vorrang von Operatoren bei der Auswertung eines Ausdrucks an, der der Reihenfolge der wichtigsten Unterklauseln dieser Unterklausel mit der höchsten Priorität entspricht.

     

Innerhalb jeder größeren Unterklausel haben die Operatoren die gleiche Priorität. Links- oder Rechts-Assoziativität wird in jeder Unterklausel durch die Syntax für die darin diskutierten Ausdrücke angegeben.

Nehmen wir jedoch den multiplikativen Fall, zum Beispiel:

  

6.5.5 Multiplikative Operatoren
   Syntax
   %code%
   %code%
   %code%
   %code%
   %code%

   Einschränkungen

  Jeder der Operanden soll einen arithmetischen Typ haben. Die Operanden des Operators %code% müssen   haben Integer-Typ    Semantik

  Die üblichen arithmetischen Umwandlungen werden an den Operanden durchgeführt   Das Ergebnis des binären %code% -Operators ist das Produkt der Operanden.

  Das Ergebnis des %code% Operators ist der Quotient aus der Division des ersten Operanden durch den   zweite; Das Ergebnis des %code% -Operators ist der Rest. In beiden Operationen, wenn der Wert von   der zweite Operand ist Null, das Verhalten ist nicht definiert   Wenn ganze Zahlen geteilt sind, ist das Ergebnis des %code% -Operators der algebraische Quotient mit einem beliebigen   Bruchteil verworfen. Wenn der Quotient %code% darstellbar ist, muss der Ausdruck %code% gleich %code% sein.

Ich kann dort nichts sehen, was die Assoziativität erwähnt, und es scheint auch keine Standardeinstellungen an anderer Stelle im Standard zu geben.

Fehle ich hier etwas?

    
___ tag123iso ___ Die Internationale Organisation für Normung ist eine Vereinigung nationaler Normungsorganisationen aus über 150 Ländern, die Normen in fast allen Bereichen außer Elektrik und Telekommunikation ausarbeiten. ___ tag123assoziativität ___ Alles, was sich auf die Notationsassoziativität binärer Operatoren bezieht. Die Assoziativität von Operatoren bezieht sich auf die Reihenfolge der Auswertung von Teilausdrücken in einem Ausdruck, in dem Operatoren mit der gleichen Priorität wiederholt verwendet werden, beispielsweise in 'a + b + c-d'. ___
2
Antworten

C99 Assoziativität für Operatoren - wo wird es angegeben?

Im C99-Standard erlauben die Ausdrücke Vorrang und Assoziativität. Die Rangfolge ist ziemlich gut dokumentiert, da die Reihenfolge, in der die Operatoren im Dokument erscheinen, die Rangfolge verringert, so dass Funktionsaufrufe vor multiplik...
23.02.2012, 06:19