From: Robert Griesemer
-Type = TypeName [ TypeArgs ] | TypeLit | "(" Type ")" . -TypeName = identifier | QualifiedIdent . -TypeArgs = "[" TypeList [ "," ] "]" . -TypeList = Type { "," Type } . -TypeLit = ArrayType | StructType | PointerType | FunctionType | InterfaceType | - SliceType | MapType | ChannelType . +Type = TypeName [ TypeArgs ] | TypeLit | "(" Type ")" . +TypeName = identifier | QualifiedIdent . +TypeArgs = "[" TypeList [ "," ] "]" . +TypeList = Type { "," Type } . +TypeLit = ArrayType | StructType | PointerType | FunctionType | InterfaceType | + SliceType | MapType | ChannelType .
@@ -1222,12 +1222,12 @@ is nil
.
-FunctionType = "func" Signature . -Signature = Parameters [ Result ] . -Result = Parameters | Type . -Parameters = "(" [ ParameterList [ "," ] ] ")" . -ParameterList = ParameterDecl { "," ParameterDecl } . -ParameterDecl = [ IdentifierList ] [ "..." ] Type . +FunctionType = "func" Signature . +Signature = Parameters [ Result ] . +Result = Parameters | Type . +Parameters = "(" [ ParameterList [ "," ] ] ")" . +ParameterList = ParameterDecl { "," ParameterDecl } . +ParameterDecl = [ IdentifierList ] [ "..." ] Type .
@@ -1634,8 +1634,8 @@ The value of an uninitialized map is nil
.
-MapType = "map" "[" KeyType "]" ElementType . -KeyType = Type . +MapType = "map" "[" KeyType "]" ElementType . +KeyType = Type .
@@ -2176,7 +2176,7 @@ within matching brace brackets.
-Block = "{" StatementList "}" . +Block = "{" StatementList "}" . StatementList = { Statement ";" } .@@ -2233,8 +2233,8 @@ and like the blank identifier it does not introduce a new binding.
-Declaration = ConstDecl | TypeDecl | VarDecl . -TopLevelDecl = Declaration | FunctionDecl | MethodDecl . +Declaration = ConstDecl | TypeDecl | VarDecl . +TopLevelDecl = Declaration | FunctionDecl | MethodDecl .
@@ -2679,9 +2679,9 @@ in square brackets rather than parentheses
-TypeParameters = "[" TypeParamList [ "," ] "]" . -TypeParamList = TypeParamDecl { "," TypeParamDecl } . -TypeParamDecl = IdentifierList TypeConstraint . +TypeParameters = "[" TypeParamList [ "," ] "]" . +TypeParamList = TypeParamDecl { "," TypeParamDecl } . +TypeParamDecl = IdentifierList TypeConstraint .
@@ -2869,8 +2869,8 @@ binds corresponding identifiers to them, and gives each a type and an initial va
-VarDecl = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) . -VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) . +VarDecl = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) . +VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
@@ -3210,15 +3210,15 @@ Each element may optionally be preceded by a corresponding key.-CompositeLit = LiteralType LiteralValue . -LiteralType = StructType | ArrayType | "[" "..." "]" ElementType | - SliceType | MapType | TypeName [ TypeArgs ] . -LiteralValue = "{" [ ElementList [ "," ] ] "}" . -ElementList = KeyedElement { "," KeyedElement } . -KeyedElement = [ Key ":" ] Element . -Key = FieldName | Expression | LiteralValue . -FieldName = identifier . -Element = Expression | LiteralValue . +CompositeLit = LiteralType LiteralValue . +LiteralType = StructType | ArrayType | "[" "..." "]" ElementType | + SliceType | MapType | TypeName [ TypeArgs ] . +LiteralValue = "{" [ ElementList [ "," ] ] "}" . +ElementList = KeyedElement { "," KeyedElement } . +KeyedElement = [ Key ":" ] Element . +Key = FieldName | Expression | LiteralValue . +FieldName = identifier . +Element = Expression | LiteralValue .@@ -3450,22 +3450,21 @@ Primary expressions are the operands for unary and binary expressions.
-PrimaryExpr = - Operand | - Conversion | - MethodExpr | - PrimaryExpr Selector | - PrimaryExpr Index | - PrimaryExpr Slice | - PrimaryExpr TypeAssertion | - PrimaryExpr Arguments . +PrimaryExpr = Operand | + Conversion | + MethodExpr | + PrimaryExpr Selector | + PrimaryExpr Index | + PrimaryExpr Slice | + PrimaryExpr TypeAssertion | + PrimaryExpr Arguments . -Selector = "." identifier . -Index = "[" Expression [ "," ] "]" . -Slice = "[" [ Expression ] ":" [ Expression ] "]" | - "[" [ Expression ] ":" Expression ":" Expression "]" . -TypeAssertion = "." "(" Type ")" . -Arguments = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" . +Selector = "." identifier . +Index = "[" Expression [ "," ] "]" . +Slice = "[" [ Expression ] ":" [ Expression ] "]" | + "[" [ Expression ] ":" Expression ":" Expression "]" . +TypeAssertion = "." "(" Type ")" . +Arguments = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" .@@ -3638,8 +3637,8 @@ argument that is the receiver of the method.-MethodExpr = ReceiverType "." MethodName . -ReceiverType = Type . +MethodExpr = ReceiverType "." MethodName . +ReceiverType = Type .@@ -5916,11 +5915,10 @@ Statements control execution.
-Statement = - Declaration | LabeledStmt | SimpleStmt | - GoStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt | - FallthroughStmt | Block | IfStmt | SwitchStmt | SelectStmt | ForStmt | - DeferStmt . +Statement = Declaration | LabeledStmt | SimpleStmt | + GoStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt | + FallthroughStmt | Block | IfStmt | SwitchStmt | SelectStmt | ForStmt | + DeferStmt . SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment | ShortVarDecl .@@ -6132,7 +6130,7 @@ matching number of variables.Assignment = ExpressionList assign_op ExpressionList . -assign_op = [ add_op | mul_op ] "=" . +assign_op = [ add_op | mul_op ] "=" .@@ -6548,7 +6546,7 @@ The iteration may be controlled by a single condition, a "for" clause, or a "ran
-ForStmt = "for" [ Condition | ForClause | RangeClause ] Block . +ForStmt = "for" [ Condition | ForClause | RangeClause ] Block . Condition = Expression .@@ -6580,8 +6578,8 @@ an increment or decrement statement. The init statement may be aForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] . -InitStmt = SimpleStmt . -PostStmt = SimpleStmt . +InitStmt = SimpleStmt . +PostStmt = SimpleStmt .@@ -7909,7 +7907,7 @@ types, variables, and constants.-SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } . +SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .Package clause
@@ -7920,8 +7918,8 @@ to which the file belongs.-PackageClause = "package" PackageName . -PackageName = identifier . +PackageClause = "package" PackageName . +PackageName = identifier .@@ -7950,9 +7948,9 @@ that specifies the package to be imported.
-ImportDecl = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) . -ImportSpec = [ "." | PackageName ] ImportPath . -ImportPath = string_lit . +ImportDecl = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) . +ImportSpec = [ "." | PackageName ] ImportPath . +ImportPath = string_lit .