/***********************************************************
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or
CNRI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.

STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

******************************************************************/

#include "pgenheaders.h"
#include "metagrammar.h"
#include "grammar.h"
#include "pgen.h"
static arc arcs_0_0[3] = {
	{2, 0},
	{3, 0},
	{4, 1},
};
static arc arcs_0_1[1] = {
	{0, 1},
};
static state states_0[2] = {
	{3, arcs_0_0},
	{1, arcs_0_1},
};
static arc arcs_1_0[1] = {
	{5, 1},
};
static arc arcs_1_1[1] = {
	{6, 2},
};
static arc arcs_1_2[1] = {
	{7, 3},
};
static arc arcs_1_3[1] = {
	{3, 4},
};
static arc arcs_1_4[1] = {
	{0, 4},
};
static state states_1[5] = {
	{1, arcs_1_0},
	{1, arcs_1_1},
	{1, arcs_1_2},
	{1, arcs_1_3},
	{1, arcs_1_4},
};
static arc arcs_2_0[1] = {
	{8, 1},
};
static arc arcs_2_1[2] = {
	{9, 0},
	{0, 1},
};
static state states_2[2] = {
	{1, arcs_2_0},
	{2, arcs_2_1},
};
static arc arcs_3_0[1] = {
	{10, 1},
};
static arc arcs_3_1[2] = {
	{10, 1},
	{0, 1},
};
static state states_3[2] = {
	{1, arcs_3_0},
	{2, arcs_3_1},
};
static arc arcs_4_0[2] = {
	{11, 1},
	{13, 2},
};
static arc arcs_4_1[1] = {
	{7, 3},
};
static arc arcs_4_2[3] = {
	{14, 4},
	{15, 4},
	{0, 2},
};
static arc arcs_4_3[1] = {
	{12, 4},
};
static arc arcs_4_4[1] = {
	{0, 4},
};
static state states_4[5] = {
	{2, arcs_4_0},
	{1, arcs_4_1},
	{3, arcs_4_2},
	{1, arcs_4_3},
	{1, arcs_4_4},
};
static arc arcs_5_0[3] = {
	{5, 1},
	{16, 1},
	{17, 2},
};
static arc arcs_5_1[1] = {
	{0, 1},
};
static arc arcs_5_2[1] = {
	{7, 3},
};
static arc arcs_5_3[1] = {
	{18, 1},
};
static state states_5[4] = {
	{3, arcs_5_0},
	{1, arcs_5_1},
	{1, arcs_5_2},
	{1, arcs_5_3},
};
static dfa dfas[6] = {
	{256, "MSTART", 0, 2, states_0,
	 "\070\000\000"},
	{257, "RULE", 0, 5, states_1,
	 "\040\000\000"},
	{258, "RHS", 0, 2, states_2,
	 "\040\010\003"},
	{259, "ALT", 0, 2, states_3,
	 "\040\010\003"},
	{260, "ITEM", 0, 5, states_4,
	 "\040\010\003"},
	{261, "ATOM", 0, 4, states_5,
	 "\040\000\003"},
};
static label labels[19] = {
	{0, "EMPTY"},
	{256, 0},
	{257, 0},
	{4, 0},
	{0, 0},
	{1, 0},
	{11, 0},
	{258, 0},
	{259, 0},
	{18, 0},
	{260, 0},
	{9, 0},
	{10, 0},
	{261, 0},
	{16, 0},
	{14, 0},
	{3, 0},
	{7, 0},
	{8, 0},
};
static grammar _PyParser_Grammar = {
	6,
	dfas,
	{19, labels},
	256
};

grammar *
meta_grammar()
{
	return &_PyParser_Grammar;
}
