errata/596: ambiguous operands in expressions (A.8.3)

From: eric_mahurin@yahoo.com
Date: Mon Jul 19 2004 - 18:23:20 PDT

  • Next message: eric_mahurin@yahoo.com: "errata/597: whitespace/comments within compiler directive"

    >Number: 596
    >Notify-List:
    >Category: errata
    >Originator: Eric Mahurin
    >Environment:
    >Description:

    In annex A, the expression alternative for a binary operations is defined as:

    expression binary_operator expression

    This kind of recursive definition causes quite a bit of ambiguity as to what the left and right expressions are for each binary_operator in an expression.

    I suggest that expression be defined in terms of the operator precedence so that the BNF makes it clear as to what are the operands of each operator.

    Here's my suggested BNF:

    expression ::= conditional_expression | STRING

    conditional_expression : logical_or_expression [ "?" attrs expression ":" expression ]

    logical_or_expression ::= logical_and_expression { "||" logical_and_expression }

    logical_and_expression ::= bitwise_or_expression { "&&" bitwise_or_expression }

    bitwise_or_expression ::= bitwise_xor_expression { "|" bitwise_xor_expression }

    bitwise_xor_expression ::= bitwise_and_expression { ("^"|"~^"|"^~") bitwise_and_expression }

    bitwise_and_expression ::= equality_expression { "&" equality_expression }

    equality_expression ::= inequality_expression { ("=="|"!="|"==="|"!==") inequality_expression }

    inequality_expression ::= shift_expression { (">="|"<"|"<="|">") shift_expression }

    shift_expression ::= additive_expression { ("<<"|">>"|"<<<"|">>>") additive_expression }

    additive_expression ::= multiplicative_expression { ("+"|"-") multiplicative_expression }

    multiplicative_expression ::= exponential_expression ( ("*"|"/"|"%") exponential_expression }

    exponential_expression ::= unary_expression { "**" unary_expression }

    unary_expression ::= ( "+" | "-" | "!" | "~" | "&" | "~&" | "|" | "~|" | "^" | "~^" | "^~" ) unary_expression
        | primary

    I think you should also consider just using "expression" for definitions constant_expression and module_path_expression with footnotes describing what the leaf nodes should be. That way this entire thing doesn't need to be redefined.



    This archive was generated by hypermail 2.1.4 : Mon Jul 19 2004 - 18:23:54 PDT and
    sponsored by Boyd Technology, Inc.