// Code generated by gocc; DO NOT EDIT.

package parser

import "github.com/awalterschulze/gographviz/ast"

type (
	//TODO: change type and variable names to be consistent with other tables
	ProdTab      [numProductions]ProdTabEntry
	ProdTabEntry struct {
		String     string
		Id         string
		NTType     int
		Index      int
		NumSymbols int
		ReduceFunc func([]Attrib) (Attrib, error)
	}
	Attrib interface {
	}
)

var productionsTable = ProdTab{
	ProdTabEntry{
		String: `S' : DotGraph	<<  >>`,
		Id:         "S'",
		NTType:     0,
		Index:      0,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `DotGraph : graphx "{" "}"	<< ast.NewGraph(ast.GRAPH, ast.FALSE, nil, nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      1,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.FALSE, nil, nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict graphx "{" "}"	<< ast.NewGraph(ast.GRAPH, ast.TRUE, nil, nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      2,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.TRUE, nil, nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : graphx Id "{" "}"	<< ast.NewGraph(ast.GRAPH, ast.FALSE, X[1], nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      3,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.FALSE, X[1], nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict graphx Id "{" "}"	<< ast.NewGraph(ast.GRAPH, ast.TRUE, X[2], nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      4,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.TRUE, X[2], nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : graphx "{" StmtList "}"	<< ast.NewGraph(ast.GRAPH, ast.FALSE, nil, X[2]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      5,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.FALSE, nil, X[2])
		},
	},
	ProdTabEntry{
		String: `DotGraph : graphx Id "{" StmtList "}"	<< ast.NewGraph(ast.GRAPH, ast.FALSE, X[1], X[3]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      6,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.FALSE, X[1], X[3])
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict graphx "{" StmtList "}"	<< ast.NewGraph(ast.GRAPH, ast.TRUE, nil, X[3]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      7,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.TRUE, nil, X[3])
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict graphx Id "{" StmtList "}"	<< ast.NewGraph(ast.GRAPH, ast.TRUE, X[2], X[4]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      8,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.GRAPH, ast.TRUE, X[2], X[4])
		},
	},
	ProdTabEntry{
		String: `DotGraph : digraph "{" "}"	<< ast.NewGraph(ast.DIGRAPH, ast.FALSE, nil, nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      9,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.FALSE, nil, nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict digraph "{" "}"	<< ast.NewGraph(ast.DIGRAPH, ast.TRUE, nil, nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      10,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.TRUE, nil, nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : digraph Id "{" "}"	<< ast.NewGraph(ast.DIGRAPH, ast.FALSE, X[1], nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      11,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.FALSE, X[1], nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict digraph Id "{" "}"	<< ast.NewGraph(ast.DIGRAPH, ast.TRUE, X[2], nil) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      12,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.TRUE, X[2], nil)
		},
	},
	ProdTabEntry{
		String: `DotGraph : digraph "{" StmtList "}"	<< ast.NewGraph(ast.DIGRAPH, ast.FALSE, nil, X[2]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      13,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.FALSE, nil, X[2])
		},
	},
	ProdTabEntry{
		String: `DotGraph : digraph Id "{" StmtList "}"	<< ast.NewGraph(ast.DIGRAPH, ast.FALSE, X[1], X[3]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      14,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.FALSE, X[1], X[3])
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict digraph "{" StmtList "}"	<< ast.NewGraph(ast.DIGRAPH, ast.TRUE, nil, X[3]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      15,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.TRUE, nil, X[3])
		},
	},
	ProdTabEntry{
		String: `DotGraph : strict digraph Id "{" StmtList "}"	<< ast.NewGraph(ast.DIGRAPH, ast.TRUE, X[2], X[4]) >>`,
		Id:         "DotGraph",
		NTType:     1,
		Index:      16,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraph(ast.DIGRAPH, ast.TRUE, X[2], X[4])
		},
	},
	ProdTabEntry{
		String: `StmtList : Stmt1	<< ast.NewStmtList(X[0]) >>`,
		Id:         "StmtList",
		NTType:     2,
		Index:      17,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewStmtList(X[0])
		},
	},
	ProdTabEntry{
		String: `StmtList : StmtList Stmt1	<< ast.AppendStmtList(X[0], X[1]) >>`,
		Id:         "StmtList",
		NTType:     2,
		Index:      18,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendStmtList(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `Stmt1 : Stmt	<< X[0], nil >>`,
		Id:         "Stmt1",
		NTType:     3,
		Index:      19,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Stmt1 : Stmt ";"	<< X[0], nil >>`,
		Id:         "Stmt1",
		NTType:     3,
		Index:      20,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Stmt : Id "=" Id	<< ast.NewAttr(X[0], X[2]) >>`,
		Id:         "Stmt",
		NTType:     4,
		Index:      21,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewAttr(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `Stmt : NodeStmt	<< X[0], nil >>`,
		Id:         "Stmt",
		NTType:     4,
		Index:      22,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Stmt : EdgeStmt	<< X[0], nil >>`,
		Id:         "Stmt",
		NTType:     4,
		Index:      23,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Stmt : AttrStmt	<< X[0], nil >>`,
		Id:         "Stmt",
		NTType:     4,
		Index:      24,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Stmt : SubGraphStmt	<< X[0], nil >>`,
		Id:         "Stmt",
		NTType:     4,
		Index:      25,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `AttrStmt : graphx AttrList	<< ast.NewGraphAttrs(X[1]) >>`,
		Id:         "AttrStmt",
		NTType:     5,
		Index:      26,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewGraphAttrs(X[1])
		},
	},
	ProdTabEntry{
		String: `AttrStmt : node AttrList	<< ast.NewNodeAttrs(X[1]) >>`,
		Id:         "AttrStmt",
		NTType:     5,
		Index:      27,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewNodeAttrs(X[1])
		},
	},
	ProdTabEntry{
		String: `AttrStmt : edge AttrList	<< ast.NewEdgeAttrs(X[1]) >>`,
		Id:         "AttrStmt",
		NTType:     5,
		Index:      28,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeAttrs(X[1])
		},
	},
	ProdTabEntry{
		String: `AttrList : "[" "]"	<< ast.NewAttrList(nil) >>`,
		Id:         "AttrList",
		NTType:     6,
		Index:      29,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewAttrList(nil)
		},
	},
	ProdTabEntry{
		String: `AttrList : "[" AList "]"	<< ast.NewAttrList(X[1]) >>`,
		Id:         "AttrList",
		NTType:     6,
		Index:      30,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewAttrList(X[1])
		},
	},
	ProdTabEntry{
		String: `AttrList : AttrList "[" "]"	<< ast.AppendAttrList(X[0], nil) >>`,
		Id:         "AttrList",
		NTType:     6,
		Index:      31,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendAttrList(X[0], nil)
		},
	},
	ProdTabEntry{
		String: `AttrList : AttrList "[" AList "]"	<< ast.AppendAttrList(X[0], X[2]) >>`,
		Id:         "AttrList",
		NTType:     6,
		Index:      32,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendAttrList(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `AList : Attr	<< ast.NewAList(X[0]) >>`,
		Id:         "AList",
		NTType:     7,
		Index:      33,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewAList(X[0])
		},
	},
	ProdTabEntry{
		String: `AList : AList Attr	<< ast.AppendAList(X[0], X[1]) >>`,
		Id:         "AList",
		NTType:     7,
		Index:      34,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendAList(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `AList : AList "," Attr	<< ast.AppendAList(X[0], X[2]) >>`,
		Id:         "AList",
		NTType:     7,
		Index:      35,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendAList(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `Attr : Id	<< ast.NewAttr(X[0], nil) >>`,
		Id:         "Attr",
		NTType:     8,
		Index:      36,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewAttr(X[0], nil)
		},
	},
	ProdTabEntry{
		String: `Attr : Id "=" Id	<< ast.NewAttr(X[0], X[2]) >>`,
		Id:         "Attr",
		NTType:     8,
		Index:      37,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewAttr(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `EdgeStmt : NodeId EdgeRHS	<< ast.NewEdgeStmt(X[0], X[1], nil) >>`,
		Id:         "EdgeStmt",
		NTType:     9,
		Index:      38,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeStmt(X[0], X[1], nil)
		},
	},
	ProdTabEntry{
		String: `EdgeStmt : NodeId EdgeRHS AttrList	<< ast.NewEdgeStmt(X[0], X[1], X[2]) >>`,
		Id:         "EdgeStmt",
		NTType:     9,
		Index:      39,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeStmt(X[0], X[1], X[2])
		},
	},
	ProdTabEntry{
		String: `EdgeStmt : SubGraphStmt EdgeRHS	<< ast.NewEdgeStmt(X[0], X[1], nil) >>`,
		Id:         "EdgeStmt",
		NTType:     9,
		Index:      40,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeStmt(X[0], X[1], nil)
		},
	},
	ProdTabEntry{
		String: `EdgeStmt : SubGraphStmt EdgeRHS AttrList	<< ast.NewEdgeStmt(X[0], X[1], X[2]) >>`,
		Id:         "EdgeStmt",
		NTType:     9,
		Index:      41,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeStmt(X[0], X[1], X[2])
		},
	},
	ProdTabEntry{
		String: `EdgeRHS : EdgeOp NodeId	<< ast.NewEdgeRHS(X[0], X[1]) >>`,
		Id:         "EdgeRHS",
		NTType:     10,
		Index:      42,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeRHS(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `EdgeRHS : EdgeOp SubGraphStmt	<< ast.NewEdgeRHS(X[0], X[1]) >>`,
		Id:         "EdgeRHS",
		NTType:     10,
		Index:      43,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewEdgeRHS(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `EdgeRHS : EdgeRHS EdgeOp NodeId	<< ast.AppendEdgeRHS(X[0], X[1], X[2]) >>`,
		Id:         "EdgeRHS",
		NTType:     10,
		Index:      44,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendEdgeRHS(X[0], X[1], X[2])
		},
	},
	ProdTabEntry{
		String: `EdgeRHS : EdgeRHS EdgeOp SubGraphStmt	<< ast.AppendEdgeRHS(X[0], X[1], X[2]) >>`,
		Id:         "EdgeRHS",
		NTType:     10,
		Index:      45,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.AppendEdgeRHS(X[0], X[1], X[2])
		},
	},
	ProdTabEntry{
		String: `NodeStmt : NodeId	<< ast.NewNodeStmt(X[0], nil) >>`,
		Id:         "NodeStmt",
		NTType:     11,
		Index:      46,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewNodeStmt(X[0], nil)
		},
	},
	ProdTabEntry{
		String: `NodeStmt : NodeId AttrList	<< ast.NewNodeStmt(X[0], X[1]) >>`,
		Id:         "NodeStmt",
		NTType:     11,
		Index:      47,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewNodeStmt(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `NodeId : Id	<< ast.NewNodeID(X[0], nil) >>`,
		Id:         "NodeId",
		NTType:     12,
		Index:      48,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewNodeID(X[0], nil)
		},
	},
	ProdTabEntry{
		String: `NodeId : Id Port	<< ast.NewNodeID(X[0], X[1]) >>`,
		Id:         "NodeId",
		NTType:     12,
		Index:      49,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewNodeID(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `Port : ":" Id	<< ast.NewPort(X[1], nil), nil >>`,
		Id:         "Port",
		NTType:     13,
		Index:      50,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewPort(X[1], nil), nil
		},
	},
	ProdTabEntry{
		String: `Port : ":" Id ":" Id	<< ast.NewPort(X[1], X[3]), nil >>`,
		Id:         "Port",
		NTType:     13,
		Index:      51,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewPort(X[1], X[3]), nil
		},
	},
	ProdTabEntry{
		String: `SubGraphStmt : "{" StmtList "}"	<< ast.NewSubGraph(nil, X[1]) >>`,
		Id:         "SubGraphStmt",
		NTType:     14,
		Index:      52,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewSubGraph(nil, X[1])
		},
	},
	ProdTabEntry{
		String: `SubGraphStmt : subgraph "{" StmtList "}"	<< ast.NewSubGraph(nil, X[2]) >>`,
		Id:         "SubGraphStmt",
		NTType:     14,
		Index:      53,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewSubGraph(nil, X[2])
		},
	},
	ProdTabEntry{
		String: `SubGraphStmt : subgraph Id "{" StmtList "}"	<< ast.NewSubGraph(X[1], X[3]) >>`,
		Id:         "SubGraphStmt",
		NTType:     14,
		Index:      54,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewSubGraph(X[1], X[3])
		},
	},
	ProdTabEntry{
		String: `SubGraphStmt : subgraph "{" "}"	<< ast.NewSubGraph(nil, nil) >>`,
		Id:         "SubGraphStmt",
		NTType:     14,
		Index:      55,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewSubGraph(nil, nil)
		},
	},
	ProdTabEntry{
		String: `SubGraphStmt : subgraph Id "{" "}"	<< ast.NewSubGraph(X[1], nil) >>`,
		Id:         "SubGraphStmt",
		NTType:     14,
		Index:      56,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewSubGraph(X[1], nil)
		},
	},
	ProdTabEntry{
		String: `EdgeOp : "->"	<< ast.DIRECTED, nil >>`,
		Id:         "EdgeOp",
		NTType:     15,
		Index:      57,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.DIRECTED, nil
		},
	},
	ProdTabEntry{
		String: `EdgeOp : "--"	<< ast.UNDIRECTED, nil >>`,
		Id:         "EdgeOp",
		NTType:     15,
		Index:      58,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.UNDIRECTED, nil
		},
	},
	ProdTabEntry{
		String: `Id : id	<< ast.NewID(X[0]) >>`,
		Id:         "Id",
		NTType:     16,
		Index:      59,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return ast.NewID(X[0])
		},
	},
}
