From: eric_mahurin@yahoo.com
Date: Mon Jul 19 2004 - 18:23:20 PDT
>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.