php/php-langspec

Is coalesce expression recursive?

Hywan opened this issue · 1 comments

Hywan commented

So far, the coalesce-expression is defined as:

coalesce-expression:
   logical-inc-OR-expression-1   ??   expression

So if I read the grammar correctly, it means we cannot write this 1 ?? 2 ?? 3.

Maybe we would like to use assignment-expression instead of expression, is it correct?

  coalesce-expression:
-    logical-inc-OR-expression-1   ??   expression
+    logical-inc-OR-expression-1   ??   assignment-expression
nikic commented

The precedence of the coalesce operator is between the conditional operator and boolean or. It should be:

coalesce-expression:
  logical-inc-OR-expression-1
  logical-inc-OR-expression-1 '??' coalesce-expression

conditional-expression:
  coalesce-expression
  conditional-expression '?' expression? ':' coalesce-expression

assignment-expression:
  conditional-expression
  simple-assignment-expression
  byref-assignment-expression
  compound-assignment-expression