// Copyright 2010 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Example-based syntax error messages.
// See bisonerrors, Makefile, go.y.

static struct {
	int yystate;
	int yychar;
	char *msg;
} yymsg[] = {
	// Each line of the form % token list
	// is converted by bisonerrors into the yystate and yychar caused
	// by that token list.

	% loadsys package LIMPORT '(' LLITERAL import_package import_there ','
	"unexpected comma during import block",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header ';'
	"unexpected semicolon or newline before {",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LSWITCH if_header ';'
	"unexpected semicolon or newline before {",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFOR for_header ';'
	"unexpected semicolon or newline before {",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFOR ';' LBODY
	"unexpected semicolon or newline before {",

	% loadsys package imports LFUNC LNAME '(' ')' ';' '{'
	"unexpected semicolon or newline before {",

	% loadsys package imports LTYPE LNAME ';'
	"unexpected semicolon or newline in type declaration",

	% loadsys package imports LCHAN '}'
	"unexpected } in channel type",
	
	% loadsys package imports LCHAN ')'
	"unexpected ) in channel type",
	
	% loadsys package imports LCHAN ','
	"unexpected comma in channel type",

	% loadsys package imports LFUNC LNAME '(' ')' '{' if_stmt ';' LELSE
	"unexpected semicolon or newline before else",

	% loadsys package imports LTYPE LNAME LINTERFACE '{' LNAME ',' LNAME
	"name list not allowed in interface type",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFOR LVAR LNAME '=' LNAME
	"var declaration not allowed in for initializer",

	% loadsys package imports LVAR LNAME '[' ']' LNAME '{'
	"unexpected { at end of statement",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LVAR LNAME '[' ']' LNAME '{'
	"unexpected { at end of statement",
	
	% loadsys package imports LFUNC LNAME '(' ')' '{' LDEFER LNAME ';'
	"argument to go/defer must be function call",
	
	% loadsys package imports LVAR LNAME '=' LNAME '{' LNAME ';'
	"need trailing comma before newline in composite literal",
	
	% loadsys package imports LFUNC LNAME '(' ')' '{' LFUNC LNAME
	"nested func not allowed",

	% loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header loop_body LELSE ';'
	"else must be followed by if or statement block"
};
