]> Cypherpunks repositories - gostls13.git/commitdiff
spec: fix binary expression grammar rule
authorMatthew Dempsky <mdempsky@google.com>
Tue, 21 Apr 2015 00:17:24 +0000 (17:17 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 13 May 2015 17:40:38 +0000 (17:40 +0000)
The spec explains later in the "Operator precedence" section that *
has a higher precedence than +, but the current production rule
requires that "1 + 2 * 3" be parsed as "(1 + 2) * 3", instead of the
intended "1 + (2 * 3)".

The new production rule better matches cmd/internal/gc/go.y's grammar:

    expr:
            uexpr
    |       expr LOROR expr
    |       expr LANDAND expr
    |       ...

Fixes #10151.

Change-Id: I13c9635d6ddf1263cafe7cc63e68f3e5779e24ba
Reviewed-on: https://go-review.googlesource.com/9163
Reviewed-by: Robert Griesemer <gri@golang.org>
doc/go_spec.html

index d02697bd0acd814fcdd71daa0bdcf8509c6ac8ae..4e2f911388b65d9fb6757139ca9eb48ce9682a61 100644 (file)
@@ -1,6 +1,6 @@
 <!--{
        "Title": "The Go Programming Language Specification",
-       "Subtitle": "Version of March 20, 2015",
+       "Subtitle": "Version of April 22, 2015",
        "Path": "/ref/spec"
 }-->
 
@@ -3305,7 +3305,7 @@ Operators combine operands into expressions.
 </p>
 
 <pre class="ebnf">
-Expression = UnaryExpr | Expression binary_op UnaryExpr .
+Expression = UnaryExpr | Expression binary_op Expression .
 UnaryExpr  = PrimaryExpr | unary_op UnaryExpr .
 
 binary_op  = "||" | "&amp;&amp;" | rel_op | add_op | mul_op .