Skip to content

[parse/spec] Cascade-related inconsistency between the spec and the implementation. #3508

@modulovalue

Description

@modulovalue

Consider the following program:

void a() {
  b..c = () => 0..d;
}

Which leads to the following parse trees:

 === Analyzer ===
Scan errors: 0
Parse errors: 0
<CompilationUnitImpl> [0-34]
┗━ <FunctionDeclarationImpl> [0-33]
  ┣━ <NamedTypeImpl> [0-4]
  ┃  ┗━ 'void' [0-4]
  ┣━ 'a' [5-6]
  ┗━ <FunctionExpressionImpl> [6-33]
    ┣━ <FormalParameterListImpl> [6-8]
    ┃  ┣━ '(' [6-7]
    ┃  ┗━ ')' [7-8]
    ┗━ <BlockFunctionBodyImpl> [9-33]
      ┗━ <BlockImpl> [9-33]
        ┣━ '{' [9-10]
        ┣━ <ExpressionStatementImpl> [13-31]
        ┃  ┣━ <CascadeExpressionImpl> [13-30]
        ┃  ┃  ┣━ <SimpleIdentifierImpl> [13-14]
        ┃  ┃  ┃  ┗━ 'b' [13-14]
        ┃  ┃  ┗━ <AssignmentExpressionImpl> [14-30]
        ┃  ┃    ┣━ <PropertyAccessImpl> [14-17]
        ┃  ┃    ┃  ┣━ '..' [14-16]
        ┃  ┃    ┃  ┗━ <SimpleIdentifierImpl> [16-17]
        ┃  ┃    ┃    ┗━ 'c' [16-17]
        ┃  ┃    ┣━ '=' [18-19]
        ┃  ┃    ┗━ <FunctionExpressionImpl> [20-30]
        ┃  ┃      ┣━ <FormalParameterListImpl> [20-22]
        ┃  ┃      ┃  ┣━ '(' [20-21]
        ┃  ┃      ┃  ┗━ ')' [21-22]
        ┃  ┃      ┗━ <ExpressionFunctionBodyImpl> [23-30]
        ┃  ┃        ┣━ '=>' [23-25]
        ┃  ┃        ┗━ <CascadeExpressionImpl> [26-30]
        ┃  ┃          ┣━ <IntegerLiteralImpl> [26-27]
        ┃  ┃          ┃  ┗━ '0' [26-27]
        ┃  ┃          ┗━ <PropertyAccessImpl> [27-30]
        ┃  ┃            ┣━ '..' [27-29]
        ┃  ┃            ┗━ <SimpleIdentifierImpl> [29-30]
        ┃  ┃              ┗━ 'd' [29-30]
        ┃  ┗━ ';' [30-31]
        ┗━ '}' [32-33]
--------------------------------------------------------------------------------
 === ANTLR ===
Errors of type 1: []
Errors of type 2: []
<startSymbol>
┗━ <libraryDefinition>
  ┣━ <metadata>
  ┣━ <topLevelDefinition>
  ┃  ┣━ <functionSignature>
  ┃  ┃  ┣━ <type>
  ┃  ┃  ┃  ┗━ <typeNotFunction>
  ┃  ┃  ┃    ┗━ 'void'
  ┃  ┃  ┣━ <identifier>
  ┃  ┃  ┃  ┗━ 'a'
  ┃  ┃  ┗━ <formalParameterPart>
  ┃  ┃    ┗━ <formalParameterList>
  ┃  ┃      ┣━ '('
  ┃  ┃      ┗━ ')'
  ┃  ┗━ <functionBody>
  ┃    ┗━ <block>
  ┃      ┣━ '{'
  ┃      ┣━ <statements>
  ┃      ┃  ┗━ <statement>
  ┃      ┃    ┗━ <nonLabelledStatement>
  ┃      ┃      ┗━ <expressionStatement>
  ┃      ┃        ┣━ <expression>
  ┃      ┃        ┃  ┗━ <cascade>
  ┃      ┃        ┃    ┣━ <cascade>
  ┃      ┃        ┃    ┃  ┣━ <conditionalExpression>
  ┃      ┃        ┃    ┃  ┃  ┗━ <ifNullExpression>
  ┃      ┃        ┃    ┃  ┃    ┗━ <logicalOrExpression>
  ┃      ┃        ┃    ┃  ┃      ┗━ <logicalAndExpression>
  ┃      ┃        ┃    ┃  ┃        ┗━ <equalityExpression>
  ┃      ┃        ┃    ┃  ┃          ┗━ <relationalExpression>
  ┃      ┃        ┃    ┃  ┃            ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃    ┃  ┃              ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃    ┃  ┃                ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃    ┃  ┃                  ┗━ <shiftExpression>
  ┃      ┃        ┃    ┃  ┃                    ┗━ <additiveExpression>
  ┃      ┃        ┃    ┃  ┃                      ┗━ <multiplicativeExpression>
  ┃      ┃        ┃    ┃  ┃                        ┗━ <unaryExpression>
  ┃      ┃        ┃    ┃  ┃                          ┗━ <postfixExpression>
  ┃      ┃        ┃    ┃  ┃                            ┗━ <primary>
  ┃      ┃        ┃    ┃  ┃                              ┗━ <identifier>
  ┃      ┃        ┃    ┃  ┃                                ┗━ 'b'
  ┃      ┃        ┃    ┃  ┣━ '..'
  ┃      ┃        ┃    ┃  ┗━ <cascadeSection>
  ┃      ┃        ┃    ┃    ┣━ <cascadeSelector>
  ┃      ┃        ┃    ┃    ┃  ┗━ <identifier>
  ┃      ┃        ┃    ┃    ┃    ┗━ 'c'
  ┃      ┃        ┃    ┃    ┗━ <cascadeSectionTail>
  ┃      ┃        ┃    ┃      ┗━ <cascadeAssignment>
  ┃      ┃        ┃    ┃        ┣━ <assignmentOperator>
  ┃      ┃        ┃    ┃        ┃  ┗━ '='
  ┃      ┃        ┃    ┃        ┗━ <expressionWithoutCascade>
  ┃      ┃        ┃    ┃          ┗━ <functionExpressionWithoutCascade>
  ┃      ┃        ┃    ┃            ┣━ <formalParameterPart>
  ┃      ┃        ┃    ┃            ┃  ┗━ <formalParameterList>
  ┃      ┃        ┃    ┃            ┃    ┣━ '('
  ┃      ┃        ┃    ┃            ┃    ┗━ ')'
  ┃      ┃        ┃    ┃            ┗━ <functionExpressionWithoutCascadeBody>
  ┃      ┃        ┃    ┃              ┣━ '=>'
  ┃      ┃        ┃    ┃              ┗━ <expressionWithoutCascade>
  ┃      ┃        ┃    ┃                ┗━ <conditionalExpression>
  ┃      ┃        ┃    ┃                  ┗━ <ifNullExpression>
  ┃      ┃        ┃    ┃                    ┗━ <logicalOrExpression>
  ┃      ┃        ┃    ┃                      ┗━ <logicalAndExpression>
  ┃      ┃        ┃    ┃                        ┗━ <equalityExpression>
  ┃      ┃        ┃    ┃                          ┗━ <relationalExpression>
  ┃      ┃        ┃    ┃                            ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃    ┃                              ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃    ┃                                ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃    ┃                                  ┗━ <shiftExpression>
  ┃      ┃        ┃    ┃                                    ┗━ <additiveExpression>
  ┃      ┃        ┃    ┃                                      ┗━ <multiplicativeExpression>
  ┃      ┃        ┃    ┃                                        ┗━ <unaryExpression>
  ┃      ┃        ┃    ┃                                          ┗━ <postfixExpression>
  ┃      ┃        ┃    ┃                                            ┗━ <primary>
  ┃      ┃        ┃    ┃                                              ┗━ <literal>
  ┃      ┃        ┃    ┃                                                ┗━ <numericLiteral>
  ┃      ┃        ┃    ┃                                                  ┗━ '0'
  ┃      ┃        ┃    ┣━ '..'
  ┃      ┃        ┃    ┗━ <cascadeSection>
  ┃      ┃        ┃      ┣━ <cascadeSelector>
  ┃      ┃        ┃      ┃  ┗━ <identifier>
  ┃      ┃        ┃      ┃    ┗━ 'd'
  ┃      ┃        ┃      ┗━ <cascadeSectionTail>
  ┃      ┃        ┗━ ';'
  ┃      ┗━ '}'
  ┗━ '<EOF>'

It looks like the analyzer and a Dart.g-based parser disagree on the expression that ..d is meant to belong to.

The analyzer appears to assume the following:

void a() {
  // Analyzer:
  b..c = (() => 0..d);
}
 === Analyzer ===
Scan errors: 0
Parse errors: 0
<CompilationUnitImpl> [0-51]
┗━ <FunctionDeclarationImpl> [0-50]
  ┣━ <NamedTypeImpl> [0-4]
  ┃  ┗━ 'void' [0-4]
  ┣━ 'a' [5-6]
  ┗━ <FunctionExpressionImpl> [6-50]
    ┣━ <FormalParameterListImpl> [6-8]
    ┃  ┣━ '(' [6-7]
    ┃  ┗━ ')' [7-8]
    ┗━ <BlockFunctionBodyImpl> [9-50]
      ┗━ <BlockImpl> [9-50]
        ┣━ '{' [9-10]
        ┣━ <ExpressionStatementImpl> [28-48]
        ┃  ┣━ <CascadeExpressionImpl> [28-47]
        ┃  ┃  ┣━ <SimpleIdentifierImpl> [28-29]
        ┃  ┃  ┃  ┗━ 'b' [28-29]
        ┃  ┃  ┗━ <AssignmentExpressionImpl> [29-47]
        ┃  ┃    ┣━ <PropertyAccessImpl> [29-32]
        ┃  ┃    ┃  ┣━ '..' [29-31]
        ┃  ┃    ┃  ┗━ <SimpleIdentifierImpl> [31-32]
        ┃  ┃    ┃    ┗━ 'c' [31-32]
        ┃  ┃    ┣━ '=' [33-34]
        ┃  ┃    ┗━ <ParenthesizedExpressionImpl> [35-47]
        ┃  ┃      ┣━ '(' [35-36]
        ┃  ┃      ┣━ <FunctionExpressionImpl> [36-46]
        ┃  ┃      ┃  ┣━ <FormalParameterListImpl> [36-38]
        ┃  ┃      ┃  ┃  ┣━ '(' [36-37]
        ┃  ┃      ┃  ┃  ┗━ ')' [37-38]
        ┃  ┃      ┃  ┗━ <ExpressionFunctionBodyImpl> [39-46]
        ┃  ┃      ┃    ┣━ '=>' [39-41]
        ┃  ┃      ┃    ┗━ <CascadeExpressionImpl> [42-46]
        ┃  ┃      ┃      ┣━ <IntegerLiteralImpl> [42-43]
        ┃  ┃      ┃      ┃  ┗━ '0' [42-43]
        ┃  ┃      ┃      ┗━ <PropertyAccessImpl> [43-46]
        ┃  ┃      ┃        ┣━ '..' [43-45]
        ┃  ┃      ┃        ┗━ <SimpleIdentifierImpl> [45-46]
        ┃  ┃      ┃          ┗━ 'd' [45-46]
        ┃  ┃      ┗━ ')' [46-47]
        ┃  ┗━ ';' [47-48]
        ┗━ '}' [49-50]
--------------------------------------------------------------------------------
 === ANTLR ===
Errors of type 1: []
Errors of type 2: []
<startSymbol>
┗━ <libraryDefinition>
  ┣━ <metadata>
  ┣━ <topLevelDefinition>
  ┃  ┣━ <functionSignature>
  ┃  ┃  ┣━ <type>
  ┃  ┃  ┃  ┗━ <typeNotFunction>
  ┃  ┃  ┃    ┗━ 'void'
  ┃  ┃  ┣━ <identifier>
  ┃  ┃  ┃  ┗━ 'a'
  ┃  ┃  ┗━ <formalParameterPart>
  ┃  ┃    ┗━ <formalParameterList>
  ┃  ┃      ┣━ '('
  ┃  ┃      ┗━ ')'
  ┃  ┗━ <functionBody>
  ┃    ┗━ <block>
  ┃      ┣━ '{'
  ┃      ┣━ <statements>
  ┃      ┃  ┗━ <statement>
  ┃      ┃    ┗━ <nonLabelledStatement>
  ┃      ┃      ┗━ <expressionStatement>
  ┃      ┃        ┣━ <expression>
  ┃      ┃        ┃  ┗━ <cascade>
  ┃      ┃        ┃    ┣━ <conditionalExpression>
  ┃      ┃        ┃    ┃  ┗━ <ifNullExpression>
  ┃      ┃        ┃    ┃    ┗━ <logicalOrExpression>
  ┃      ┃        ┃    ┃      ┗━ <logicalAndExpression>
  ┃      ┃        ┃    ┃        ┗━ <equalityExpression>
  ┃      ┃        ┃    ┃          ┗━ <relationalExpression>
  ┃      ┃        ┃    ┃            ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃    ┃              ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃    ┃                ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃    ┃                  ┗━ <shiftExpression>
  ┃      ┃        ┃    ┃                    ┗━ <additiveExpression>
  ┃      ┃        ┃    ┃                      ┗━ <multiplicativeExpression>
  ┃      ┃        ┃    ┃                        ┗━ <unaryExpression>
  ┃      ┃        ┃    ┃                          ┗━ <postfixExpression>
  ┃      ┃        ┃    ┃                            ┗━ <primary>
  ┃      ┃        ┃    ┃                              ┗━ <identifier>
  ┃      ┃        ┃    ┃                                ┗━ 'b'
  ┃      ┃        ┃    ┣━ '..'
  ┃      ┃        ┃    ┗━ <cascadeSection>
  ┃      ┃        ┃      ┣━ <cascadeSelector>
  ┃      ┃        ┃      ┃  ┗━ <identifier>
  ┃      ┃        ┃      ┃    ┗━ 'c'
  ┃      ┃        ┃      ┗━ <cascadeSectionTail>
  ┃      ┃        ┃        ┗━ <cascadeAssignment>
  ┃      ┃        ┃          ┣━ <assignmentOperator>
  ┃      ┃        ┃          ┃  ┗━ '='
  ┃      ┃        ┃          ┗━ <expressionWithoutCascade>
  ┃      ┃        ┃            ┗━ <conditionalExpression>
  ┃      ┃        ┃              ┗━ <ifNullExpression>
  ┃      ┃        ┃                ┗━ <logicalOrExpression>
  ┃      ┃        ┃                  ┗━ <logicalAndExpression>
  ┃      ┃        ┃                    ┗━ <equalityExpression>
  ┃      ┃        ┃                      ┗━ <relationalExpression>
  ┃      ┃        ┃                        ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃                          ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃                            ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃                              ┗━ <shiftExpression>
  ┃      ┃        ┃                                ┗━ <additiveExpression>
  ┃      ┃        ┃                                  ┗━ <multiplicativeExpression>
  ┃      ┃        ┃                                    ┗━ <unaryExpression>
  ┃      ┃        ┃                                      ┗━ <postfixExpression>
  ┃      ┃        ┃                                        ┗━ <primary>
  ┃      ┃        ┃                                          ┣━ '('
  ┃      ┃        ┃                                          ┣━ <expression>
  ┃      ┃        ┃                                          ┃  ┗━ <functionExpression>
  ┃      ┃        ┃                                          ┃    ┣━ <formalParameterPart>
  ┃      ┃        ┃                                          ┃    ┃  ┗━ <formalParameterList>
  ┃      ┃        ┃                                          ┃    ┃    ┣━ '('
  ┃      ┃        ┃                                          ┃    ┃    ┗━ ')'
  ┃      ┃        ┃                                          ┃    ┗━ <functionExpressionBody>
  ┃      ┃        ┃                                          ┃      ┣━ '=>'
  ┃      ┃        ┃                                          ┃      ┗━ <expression>
  ┃      ┃        ┃                                          ┃        ┗━ <cascade>
  ┃      ┃        ┃                                          ┃          ┣━ <conditionalExpression>
  ┃      ┃        ┃                                          ┃          ┃  ┗━ <ifNullExpression>
  ┃      ┃        ┃                                          ┃          ┃    ┗━ <logicalOrExpression>
  ┃      ┃        ┃                                          ┃          ┃      ┗━ <logicalAndExpression>
  ┃      ┃        ┃                                          ┃          ┃        ┗━ <equalityExpression>
  ┃      ┃        ┃                                          ┃          ┃          ┗━ <relationalExpression>
  ┃      ┃        ┃                                          ┃          ┃            ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃                                          ┃          ┃              ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃                                          ┃          ┃                ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃                                          ┃          ┃                  ┗━ <shiftExpression>
  ┃      ┃        ┃                                          ┃          ┃                    ┗━ <additiveExpression>
  ┃      ┃        ┃                                          ┃          ┃                      ┗━ <multiplicativeExpression>
  ┃      ┃        ┃                                          ┃          ┃                        ┗━ <unaryExpression>
  ┃      ┃        ┃                                          ┃          ┃                          ┗━ <postfixExpression>
  ┃      ┃        ┃                                          ┃          ┃                            ┗━ <primary>
  ┃      ┃        ┃                                          ┃          ┃                              ┗━ <literal>
  ┃      ┃        ┃                                          ┃          ┃                                ┗━ <numericLiteral>
  ┃      ┃        ┃                                          ┃          ┃                                  ┗━ '0'
  ┃      ┃        ┃                                          ┃          ┣━ '..'
  ┃      ┃        ┃                                          ┃          ┗━ <cascadeSection>
  ┃      ┃        ┃                                          ┃            ┣━ <cascadeSelector>
  ┃      ┃        ┃                                          ┃            ┃  ┗━ <identifier>
  ┃      ┃        ┃                                          ┃            ┃    ┗━ 'd'
  ┃      ┃        ┃                                          ┃            ┗━ <cascadeSectionTail>
  ┃      ┃        ┃                                          ┗━ ')'
  ┃      ┃        ┗━ ';'
  ┃      ┗━ '}'
  ┗━ '<EOF>'

And the Dart.g grammar appears to assume the following:

void a() {
  // Dart.g:
  (b..c = () => 0)..d;
}
 === Analyzer ===
Scan errors: 0
Parse errors: 0
<CompilationUnitImpl> [0-49]
┗━ <FunctionDeclarationImpl> [0-48]
  ┣━ <NamedTypeImpl> [0-4]
  ┃  ┗━ 'void' [0-4]
  ┣━ 'a' [5-6]
  ┗━ <FunctionExpressionImpl> [6-48]
    ┣━ <FormalParameterListImpl> [6-8]
    ┃  ┣━ '(' [6-7]
    ┃  ┗━ ')' [7-8]
    ┗━ <BlockFunctionBodyImpl> [9-48]
      ┗━ <BlockImpl> [9-48]
        ┣━ '{' [9-10]
        ┣━ <ExpressionStatementImpl> [26-46]
        ┃  ┣━ <CascadeExpressionImpl> [26-45]
        ┃  ┃  ┣━ <ParenthesizedExpressionImpl> [26-42]
        ┃  ┃  ┃  ┣━ '(' [26-27]
        ┃  ┃  ┃  ┣━ <CascadeExpressionImpl> [27-41]
        ┃  ┃  ┃  ┃  ┣━ <SimpleIdentifierImpl> [27-28]
        ┃  ┃  ┃  ┃  ┃  ┗━ 'b' [27-28]
        ┃  ┃  ┃  ┃  ┗━ <AssignmentExpressionImpl> [28-41]
        ┃  ┃  ┃  ┃    ┣━ <PropertyAccessImpl> [28-31]
        ┃  ┃  ┃  ┃    ┃  ┣━ '..' [28-30]
        ┃  ┃  ┃  ┃    ┃  ┗━ <SimpleIdentifierImpl> [30-31]
        ┃  ┃  ┃  ┃    ┃    ┗━ 'c' [30-31]
        ┃  ┃  ┃  ┃    ┣━ '=' [32-33]
        ┃  ┃  ┃  ┃    ┗━ <FunctionExpressionImpl> [34-41]
        ┃  ┃  ┃  ┃      ┣━ <FormalParameterListImpl> [34-36]
        ┃  ┃  ┃  ┃      ┃  ┣━ '(' [34-35]
        ┃  ┃  ┃  ┃      ┃  ┗━ ')' [35-36]
        ┃  ┃  ┃  ┃      ┗━ <ExpressionFunctionBodyImpl> [37-41]
        ┃  ┃  ┃  ┃        ┣━ '=>' [37-39]
        ┃  ┃  ┃  ┃        ┗━ <IntegerLiteralImpl> [40-41]
        ┃  ┃  ┃  ┃          ┗━ '0' [40-41]
        ┃  ┃  ┃  ┗━ ')' [41-42]
        ┃  ┃  ┗━ <PropertyAccessImpl> [42-45]
        ┃  ┃    ┣━ '..' [42-44]
        ┃  ┃    ┗━ <SimpleIdentifierImpl> [44-45]
        ┃  ┃      ┗━ 'd' [44-45]
        ┃  ┗━ ';' [45-46]
        ┗━ '}' [47-48]
--------------------------------------------------------------------------------
 === ANTLR ===
Errors of type 1: []
Errors of type 2: []
<startSymbol>
┗━ <libraryDefinition>
  ┣━ <metadata>
  ┣━ <topLevelDefinition>
  ┃  ┣━ <functionSignature>
  ┃  ┃  ┣━ <type>
  ┃  ┃  ┃  ┗━ <typeNotFunction>
  ┃  ┃  ┃    ┗━ 'void'
  ┃  ┃  ┣━ <identifier>
  ┃  ┃  ┃  ┗━ 'a'
  ┃  ┃  ┗━ <formalParameterPart>
  ┃  ┃    ┗━ <formalParameterList>
  ┃  ┃      ┣━ '('
  ┃  ┃      ┗━ ')'
  ┃  ┗━ <functionBody>
  ┃    ┗━ <block>
  ┃      ┣━ '{'
  ┃      ┣━ <statements>
  ┃      ┃  ┗━ <statement>
  ┃      ┃    ┗━ <nonLabelledStatement>
  ┃      ┃      ┗━ <expressionStatement>
  ┃      ┃        ┣━ <expression>
  ┃      ┃        ┃  ┗━ <cascade>
  ┃      ┃        ┃    ┣━ <conditionalExpression>
  ┃      ┃        ┃    ┃  ┗━ <ifNullExpression>
  ┃      ┃        ┃    ┃    ┗━ <logicalOrExpression>
  ┃      ┃        ┃    ┃      ┗━ <logicalAndExpression>
  ┃      ┃        ┃    ┃        ┗━ <equalityExpression>
  ┃      ┃        ┃    ┃          ┗━ <relationalExpression>
  ┃      ┃        ┃    ┃            ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃    ┃              ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃    ┃                ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃    ┃                  ┗━ <shiftExpression>
  ┃      ┃        ┃    ┃                    ┗━ <additiveExpression>
  ┃      ┃        ┃    ┃                      ┗━ <multiplicativeExpression>
  ┃      ┃        ┃    ┃                        ┗━ <unaryExpression>
  ┃      ┃        ┃    ┃                          ┗━ <postfixExpression>
  ┃      ┃        ┃    ┃                            ┗━ <primary>
  ┃      ┃        ┃    ┃                              ┣━ '('
  ┃      ┃        ┃    ┃                              ┣━ <expression>
  ┃      ┃        ┃    ┃                              ┃  ┗━ <cascade>
  ┃      ┃        ┃    ┃                              ┃    ┣━ <conditionalExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃  ┗━ <ifNullExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃    ┗━ <logicalOrExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃      ┗━ <logicalAndExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃        ┗━ <equalityExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃          ┗━ <relationalExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃            ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃              ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                  ┗━ <shiftExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                    ┗━ <additiveExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                      ┗━ <multiplicativeExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                        ┗━ <unaryExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                          ┗━ <postfixExpression>
  ┃      ┃        ┃    ┃                              ┃    ┃                            ┗━ <primary>
  ┃      ┃        ┃    ┃                              ┃    ┃                              ┗━ <identifier>
  ┃      ┃        ┃    ┃                              ┃    ┃                                ┗━ 'b'
  ┃      ┃        ┃    ┃                              ┃    ┣━ '..'
  ┃      ┃        ┃    ┃                              ┃    ┗━ <cascadeSection>
  ┃      ┃        ┃    ┃                              ┃      ┣━ <cascadeSelector>
  ┃      ┃        ┃    ┃                              ┃      ┃  ┗━ <identifier>
  ┃      ┃        ┃    ┃                              ┃      ┃    ┗━ 'c'
  ┃      ┃        ┃    ┃                              ┃      ┗━ <cascadeSectionTail>
  ┃      ┃        ┃    ┃                              ┃        ┗━ <cascadeAssignment>
  ┃      ┃        ┃    ┃                              ┃          ┣━ <assignmentOperator>
  ┃      ┃        ┃    ┃                              ┃          ┃  ┗━ '='
  ┃      ┃        ┃    ┃                              ┃          ┗━ <expressionWithoutCascade>
  ┃      ┃        ┃    ┃                              ┃            ┗━ <functionExpressionWithoutCascade>
  ┃      ┃        ┃    ┃                              ┃              ┣━ <formalParameterPart>
  ┃      ┃        ┃    ┃                              ┃              ┃  ┗━ <formalParameterList>
  ┃      ┃        ┃    ┃                              ┃              ┃    ┣━ '('
  ┃      ┃        ┃    ┃                              ┃              ┃    ┗━ ')'
  ┃      ┃        ┃    ┃                              ┃              ┗━ <functionExpressionWithoutCascadeBody>
  ┃      ┃        ┃    ┃                              ┃                ┣━ '=>'
  ┃      ┃        ┃    ┃                              ┃                ┗━ <expressionWithoutCascade>
  ┃      ┃        ┃    ┃                              ┃                  ┗━ <conditionalExpression>
  ┃      ┃        ┃    ┃                              ┃                    ┗━ <ifNullExpression>
  ┃      ┃        ┃    ┃                              ┃                      ┗━ <logicalOrExpression>
  ┃      ┃        ┃    ┃                              ┃                        ┗━ <logicalAndExpression>
  ┃      ┃        ┃    ┃                              ┃                          ┗━ <equalityExpression>
  ┃      ┃        ┃    ┃                              ┃                            ┗━ <relationalExpression>
  ┃      ┃        ┃    ┃                              ┃                              ┗━ <bitwiseOrExpression>
  ┃      ┃        ┃    ┃                              ┃                                ┗━ <bitwiseXorExpression>
  ┃      ┃        ┃    ┃                              ┃                                  ┗━ <bitwiseAndExpression>
  ┃      ┃        ┃    ┃                              ┃                                    ┗━ <shiftExpression>
  ┃      ┃        ┃    ┃                              ┃                                      ┗━ <additiveExpression>
  ┃      ┃        ┃    ┃                              ┃                                        ┗━ <multiplicativeExpression>
  ┃      ┃        ┃    ┃                              ┃                                          ┗━ <unaryExpression>
  ┃      ┃        ┃    ┃                              ┃                                            ┗━ <postfixExpression>
  ┃      ┃        ┃    ┃                              ┃                                              ┗━ <primary>
  ┃      ┃        ┃    ┃                              ┃                                                ┗━ <literal>
  ┃      ┃        ┃    ┃                              ┃                                                  ┗━ <numericLiteral>
  ┃      ┃        ┃    ┃                              ┃                                                    ┗━ '0'
  ┃      ┃        ┃    ┃                              ┗━ ')'
  ┃      ┃        ┃    ┣━ '..'
  ┃      ┃        ┃    ┗━ <cascadeSection>
  ┃      ┃        ┃      ┣━ <cascadeSelector>
  ┃      ┃        ┃      ┃  ┗━ <identifier>
  ┃      ┃        ┃      ┃    ┗━ 'd'
  ┃      ┃        ┃      ┗━ <cascadeSectionTail>
  ┃      ┃        ┗━ ';'
  ┃      ┗━ '}'
  ┗━ '<EOF>'

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requestedtechnical-debtDealing with a part of the language which needs clarification or adjustments

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions