Heim >Backend-Entwicklung >C++ >Was sagen uns Operatorprioritäts- und Assoziativitätstabellen eigentlich über die Ausdrucksauswertung in Programmiersprachen?
Operatorpriorität und Assoziativität: Definition und Beziehung zur Auswertungsreihenfolge
Einführung
In die Programmierung Sprachen, Operatorpriorität und Assoziativität bestimmen die Reihenfolge, in der Operatoren ausgewertet werden. Während viele Programmierlehrbücher Tabellen enthalten, in denen diese Eigenschaften aufgeführt sind, stellen sich Fragen zu ihrer Interpretation und der Quelle ihrer Definition.
Fragen
Antwort
Operatorpriorität und Assoziativitätsdefinition
Operatorpriorität und Assoziativität werden im Sprachstandard selbst definiert. Die Standardgrammatik legt die Regeln für die Bildung von Ausdrücken fest. Durch die Untersuchung dieser Regeln können die Rangfolge und Assoziativität von Operatoren abgeleitet werden.
In C lautet die Grammatik für additive Ausdrücke (Addition und Subtraktion) beispielsweise wie folgt:
additive-expression: multiplicative-expression additive-expression + multiplicative-expression additive-expression - multiplicative-expression
Aus dieser Regel können wir ableiten, dass multiplikative Ausdrücke (Multiplikation und Division) eine höhere Priorität haben als additive Ausdrücke, da sie Unterregeln additiver Ausdrücke sind. Darüber hinaus kann die Links-nach-rechts-Assoziativität der Operatoren und - aus der Regel abgeleitet werden, die besagt, dass ein additiver Ausdruck rekursiv aus anderen additiven Ausdrücken zusammengesetzt werden kann.
Reihenfolge der Auswertung
Es ist wichtig, zwischen Operatorpriorität und Assoziativität sowie der Reihenfolge der Auswertung zu unterscheiden. Während Rangfolge und Assoziativität bestimmen, wie Operatoren gruppiert werden, bezieht sich die Auswertungsreihenfolge auf die Reihenfolge, in der einzelne Ausdrücke ausgewertet werden. In C wird nicht garantiert, dass Auswertungen streng nach Priorität und Assoziativität erfolgen.
Zum Beispiel hat im Ausdruck f1() f2() * f3() der *-Operator eine höhere Priorität als der Operator, was dazu führt in der Gruppierung f1() (f2() * f3()). Die Reihenfolge der Auswertung ist jedoch nicht definiert, was bedeutet, dass f3(), f1() oder f2() zuerst ausgewertet werden könnten.
Bestimmte Operatoren, wie zum Beispiel der logische ODER-Operator (||), tun dies Erlegen Sie ihrer Operandenauswertung eine Reihenfolge auf, die einen Kurzschluss ermöglicht. In x || y, x wird immer vor y ausgewertet, um festzustellen, ob eine Auswertung von y erforderlich ist.
Das obige ist der detaillierte Inhalt vonWas sagen uns Operatorprioritäts- und Assoziativitätstabellen eigentlich über die Ausdrucksauswertung in Programmiersprachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!