// Code generated by gocc; DO NOT EDIT.

package parser

import "miller/src/dsl"

type (
	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' : Root	<<  >>`,
		Id:         "S'",
		NTType:     0,
		Index:      0,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Root : StatementBlock	<< dsl.NewAST(X[0]) >>`,
		Id:         "Root",
		NTType:     1,
		Index:      1,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewAST(X[0])
		},
	},
	ProdTabEntry{
		String: `StatementBlock : empty	<< dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock) >>`,
		Id:         "StatementBlock",
		NTType:     2,
		Index:      2,
		NumSymbols: 0,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `StatementBlock : NonEmptyStatementBlock	<< dsl.Wrap(X[0]) >>`,
		Id:         "StatementBlock",
		NTType:     2,
		Index:      3,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.Wrap(X[0])
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracelessStatement	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      4,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracefulStatement	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      5,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : ";" StatementBlock	<< dsl.Wrap(X[1]) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      6,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.Wrap(X[1])
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracelessStatement ";" StatementBlock	<< dsl.PrependChild(X[2], X[0]) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      7,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(X[2], X[0])
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracefulStatement ";" StatementBlock	<< dsl.PrependChild(X[2], X[0]) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      8,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(X[2], X[0])
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracefulStatement BracefulStatement StatementBlock	<< dsl.PrependTwoChildren(X[2], X[0], X[1]) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      9,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependTwoChildren(X[2], X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracefulStatement BracelessStatement	<< dsl.NewASTNodeBinary(nil, X[0], X[1], dsl.NodeTypeStatementBlock) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      10,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(nil, X[0], X[1], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracefulStatement BracelessStatement ";"	<< dsl.NewASTNodeBinary(nil, X[0], X[1], dsl.NodeTypeStatementBlock) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      11,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(nil, X[0], X[1], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `NonEmptyStatementBlock : BracefulStatement BracelessStatement ";" NonEmptyStatementBlock	<< dsl.PrependTwoChildren(X[3], X[0], X[1]) >>`,
		Id:         "NonEmptyStatementBlock",
		NTType:     3,
		Index:      12,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependTwoChildren(X[3], X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `StatementBlockInBraces : "{" StatementBlock "}"	<< dsl.Wrap(X[1]) >>`,
		Id:         "StatementBlockInBraces",
		NTType:     4,
		Index:      13,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.Wrap(X[1])
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : Assignment	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      14,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : Unset	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      15,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : BareBoolean	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      16,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : FilterStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      17,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : PrintStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      18,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : PrintnStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      19,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : EprintStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      20,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : EprintnStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      21,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : DumpStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      22,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : EdumpStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      23,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : TeeStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      24,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : EmitFStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      25,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : EmitStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      26,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : EmitPStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      27,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : DoWhileLoop	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      28,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : BreakStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      29,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : ContinueStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      30,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : ReturnStatement	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      31,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracelessStatement : SubroutineCallsite	<<  >>`,
		Id:         "BracelessStatement",
		NTType:     5,
		Index:      32,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "=" Rvalue	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeAssignment) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      33,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeAssignment)
		},
	},
	ProdTabEntry{
		String: `Unset : unset Lvalue	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeUnset) >>`,
		Id:         "Unset",
		NTType:     7,
		Index:      34,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeUnset)
		},
	},
	ProdTabEntry{
		String: `Lvalue : Rvalue	<<  >>`,
		Id:         "Lvalue",
		NTType:     8,
		Index:      35,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Lvalue : Typedecl LocalVariable	<< dsl.AppendChild(X[1], X[0]) >>`,
		Id:         "Lvalue",
		NTType:     8,
		Index:      36,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[1], X[0])
		},
	},
	ProdTabEntry{
		String: `BareBoolean : Rvalue	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeBareBoolean) >>`,
		Id:         "BareBoolean",
		NTType:     9,
		Index:      37,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeBareBoolean)
		},
	},
	ProdTabEntry{
		String: `FilterStatement : filter Rvalue	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeFilterStatement) >>`,
		Id:         "FilterStatement",
		NTType:     10,
		Index:      38,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeFilterStatement)
		},
	},
	ProdTabEntry{
		String: `Redirector : ">" RedirectTarget	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeRedirectWrite) >>`,
		Id:         "Redirector",
		NTType:     11,
		Index:      39,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeRedirectWrite)
		},
	},
	ProdTabEntry{
		String: `Redirector : ">>" RedirectTarget	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeRedirectAppend) >>`,
		Id:         "Redirector",
		NTType:     11,
		Index:      40,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeRedirectAppend)
		},
	},
	ProdTabEntry{
		String: `Redirector : "|" RedirectTarget	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeRedirectPipe) >>`,
		Id:         "Redirector",
		NTType:     11,
		Index:      41,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeRedirectPipe)
		},
	},
	ProdTabEntry{
		String: `RedirectTarget : stdout	<< dsl.NewASTNodeZary(X[0], dsl.NodeTypeRedirectTargetStdout) >>`,
		Id:         "RedirectTarget",
		NTType:     12,
		Index:      42,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(X[0], dsl.NodeTypeRedirectTargetStdout)
		},
	},
	ProdTabEntry{
		String: `RedirectTarget : stderr	<< dsl.NewASTNodeZary(X[0], dsl.NodeTypeRedirectTargetStderr) >>`,
		Id:         "RedirectTarget",
		NTType:     12,
		Index:      43,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(X[0], dsl.NodeTypeRedirectTargetStderr)
		},
	},
	ProdTabEntry{
		String: `RedirectTarget : Rvalue	<<  >>`,
		Id:         "RedirectTarget",
		NTType:     12,
		Index:      44,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `PrintStatement : print	<< dsl.NewASTNodeBinary(
        X[0], // print
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypePrintStatement,
      ) >>`,
		Id:         "PrintStatement",
		NTType:     13,
		Index:      45,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // print
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypePrintStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintStatement : print Redirector	<< dsl.NewASTNodeBinary(
        X[0], // print
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
        X[1], // redirect
        dsl.NodeTypePrintStatement,
      ) >>`,
		Id:         "PrintStatement",
		NTType:     13,
		Index:      46,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // print
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
				X[1], // redirect
				dsl.NodeTypePrintStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintStatement : print FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // print
        X[1], // printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypePrintStatement,
      ) >>`,
		Id:         "PrintStatement",
		NTType:     13,
		Index:      47,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // print
				X[1], // printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypePrintStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintStatement : print Redirector "," FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // print
        X[3], // printables
        X[1], // redirect
        dsl.NodeTypePrintStatement,
      ) >>`,
		Id:         "PrintStatement",
		NTType:     13,
		Index:      48,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // print
				X[3], // printables
				X[1], // redirect
				dsl.NodeTypePrintStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintnStatement : printn	<< dsl.NewASTNodeBinary(
        X[0], // printn
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypePrintnStatement,
      ) >>`,
		Id:         "PrintnStatement",
		NTType:     14,
		Index:      49,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // printn
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypePrintnStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintnStatement : printn Redirector	<< dsl.NewASTNodeBinary(
        X[0], // printn
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
        X[1], // redirect
        dsl.NodeTypePrintnStatement,
      ) >>`,
		Id:         "PrintnStatement",
		NTType:     14,
		Index:      50,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // printn
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printable
				X[1], // redirect
				dsl.NodeTypePrintnStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintnStatement : printn FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // printn
        X[1], // printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypePrintnStatement,
      ) >>`,
		Id:         "PrintnStatement",
		NTType:     14,
		Index:      51,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // printn
				X[1], // printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypePrintnStatement,
			)
		},
	},
	ProdTabEntry{
		String: `PrintnStatement : printn Redirector "," FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // printn
        X[3], // printables
        X[1], // redirect
        dsl.NodeTypePrintnStatement,
      ) >>`,
		Id:         "PrintnStatement",
		NTType:     14,
		Index:      52,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // printn
				X[3], // printables
				X[1], // redirect
				dsl.NodeTypePrintnStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EprintStatement : eprint	<< dsl.NewASTNodeBinary(
        X[0], // eprint
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEprintStatement,
      ) >>`,
		Id:         "EprintStatement",
		NTType:     15,
		Index:      53,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // eprint
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEprintStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EprintStatement : eprint FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // eprint
        X[1], // printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEprintStatement,
      ) >>`,
		Id:         "EprintStatement",
		NTType:     15,
		Index:      54,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // eprint
				X[1], // printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEprintStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EprintnStatement : eprintn	<< dsl.NewASTNodeBinary(
        X[0], // eprint
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEprintnStatement,
      ) >>`,
		Id:         "EprintnStatement",
		NTType:     16,
		Index:      55,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // eprint
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEprintnStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EprintnStatement : eprintn FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // eprintn
        X[1], // printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEprintnStatement,
      ) >>`,
		Id:         "EprintnStatement",
		NTType:     16,
		Index:      56,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // eprintn
				X[1], // printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEprintnStatement,
			)
		},
	},
	ProdTabEntry{
		String: `DumpStatement : dump	<< dsl.NewASTNodeBinary(
        X[0], // dump
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no dumpable
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeDumpStatement,
      ) >>`,
		Id:         "DumpStatement",
		NTType:     17,
		Index:      57,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // dump
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no dumpable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeDumpStatement,
			)
		},
	},
	ProdTabEntry{
		String: `DumpStatement : dump Redirector	<< dsl.NewASTNodeBinary(
        X[0], // dump
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no dumpable
        X[1], // redirect
        dsl.NodeTypeDumpStatement,
      ) >>`,
		Id:         "DumpStatement",
		NTType:     17,
		Index:      58,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // dump
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no dumpable
				X[1], // redirect
				dsl.NodeTypeDumpStatement,
			)
		},
	},
	ProdTabEntry{
		String: `DumpStatement : dump FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // dump
        X[1], // printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeDumpStatement,
      ) >>`,
		Id:         "DumpStatement",
		NTType:     17,
		Index:      59,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // dump
				X[1], // printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeDumpStatement,
			)
		},
	},
	ProdTabEntry{
		String: `DumpStatement : dump Redirector "," FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // dump
        X[3], // printables
        X[1], // redirect
        dsl.NodeTypeDumpStatement,
      ) >>`,
		Id:         "DumpStatement",
		NTType:     17,
		Index:      60,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // dump
				X[3], // printables
				X[1], // redirect
				dsl.NodeTypeDumpStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EdumpStatement : edump	<< dsl.NewASTNodeBinary(
        X[0], // edump
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no dumpable
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEdumpStatement,
      ) >>`,
		Id:         "EdumpStatement",
		NTType:     18,
		Index:      61,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // edump
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no dumpable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEdumpStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EdumpStatement : edump FcnArgs	<< dsl.NewASTNodeBinary(
        X[0], // edump
        X[1], // printables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEdumpStatement,
      ) >>`,
		Id:         "EdumpStatement",
		NTType:     18,
		Index:      62,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // edump
				X[1], // printables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEdumpStatement,
			)
		},
	},
	ProdTabEntry{
		String: `TeeStatement : tee Redirector "," FullSrec	<< dsl.NewASTNodeBinary(X[0], X[3], X[1], dsl.NodeTypeTeeStatement) >>`,
		Id:         "TeeStatement",
		NTType:     19,
		Index:      63,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[0], X[3], X[1], dsl.NodeTypeTeeStatement)
		},
	},
	ProdTabEntry{
		String: `EmitFStatement : emitf EmittableList	<< dsl.NewASTNodeBinary(
        X[0], // emitf
        X[1], // emittables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitFStatement,
      ) >>`,
		Id:         "EmitFStatement",
		NTType:     20,
		Index:      64,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // emitf
				X[1], // emittables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitFStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitFStatement : emitf Redirector "," EmittableList	<< dsl.NewASTNodeBinary(
        X[0], // emitf
        X[3], // emittables
        X[1], // redirect
        dsl.NodeTypeEmitFStatement,
      ) >>`,
		Id:         "EmitFStatement",
		NTType:     20,
		Index:      65,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[0], // emitf
				X[3], // emittables
				X[1], // redirect
				dsl.NodeTypeEmitFStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit EmittableAsList	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[1], // Emittable
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      66,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[1], // Emittable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit Redirector "," EmittableAsList	<< dsl.NewASTNodeTernary(
      X[0], // emit
      X[3], // Emittable
      dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
      X[1], // redirect
      dsl.NodeTypeEmitStatement,
    ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      67,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[3], // Emittable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				X[1], // redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit "(" EmittableList ")"	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[2], // emittables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      68,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[2], // emittables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit Redirector "," "(" EmittableList ")"	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[4], // emittables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
        X[1], // redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      69,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[4], // emittables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				X[1], // redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit EmittableAsList "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[1], // emittable
        X[3], // keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      70,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[1], // emittable
				X[3], // keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit Redirector "," EmittableAsList "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[3], // emittable
        X[5], // keys
        X[1], // redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      71,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[3], // emittable
				X[5], // keys
				X[1], // redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit "(" EmittableList ")" "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[2], // emittable
        X[5], // keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      72,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[2], // emittable
				X[5], // keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitStatement : emit Redirector "," "(" EmittableList ")" "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emit
        X[4], // emittables
        X[7], // keys
        X[1], // redirect
        dsl.NodeTypeEmitStatement,
      ) >>`,
		Id:         "EmitStatement",
		NTType:     21,
		Index:      73,
		NumSymbols: 8,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emit
				X[4], // emittables
				X[7], // keys
				X[1], // redirect
				dsl.NodeTypeEmitStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp EmittableAsList	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[1], // emittable
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      74,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[1], // emittable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp Redirector "," EmittableAsList	<< dsl.NewASTNodeTernary(
      X[0], // emitp
      X[3], // emittable
      dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
      X[1], // redirect
      dsl.NodeTypeEmitPStatement,
    ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      75,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[3], // emittable
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				X[1], // redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp "(" EmittableList ")"	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[2], // emittables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      76,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[2], // emittables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp Redirector "," "(" EmittableList ")"	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[4], // emittables
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
        X[1], // redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      77,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[4], // emittables
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no keys
				X[1], // redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp EmittableAsList "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[1], // emittable
        X[3], // keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      78,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[1], // emittable
				X[3], // keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp Redirector "," EmittableAsList "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[3], // emittable
        X[5], // keys
        X[1], // redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      79,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[3], // emittable
				X[5], // keys
				X[1], // redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp "(" EmittableList ")" "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[2], // emittable
        X[5], // keys
        dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      80,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[2], // emittable
				X[5], // keys
				dsl.NewASTNodeNestable(nil, dsl.NodeTypeNoOp), // no redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmitPStatement : emitp Redirector "," "(" EmittableList ")" "," EmitKeys	<< dsl.NewASTNodeTernary(
        X[0], // emitp
        X[4], // emittable
        X[7], // keys
        X[1], // redirect
        dsl.NodeTypeEmitPStatement,
      ) >>`,
		Id:         "EmitPStatement",
		NTType:     22,
		Index:      81,
		NumSymbols: 8,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // emitp
				X[4], // emittable
				X[7], // keys
				X[1], // redirect
				dsl.NodeTypeEmitPStatement,
			)
		},
	},
	ProdTabEntry{
		String: `EmittableList : Emittable	<< dsl.NewASTNodeUnary(
        nil,
        X[0],
        dsl.NodeTypeEmittableList,
      ) >>`,
		Id:         "EmittableList",
		NTType:     23,
		Index:      82,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeEmittableList,
			)
		},
	},
	ProdTabEntry{
		String: `EmittableList : Emittable "," EmittableList	<< dsl.PrependChild(
      X[2],
      X[0],
    ) >>`,
		Id:         "EmittableList",
		NTType:     23,
		Index:      83,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(
				X[2],
				X[0],
			)
		},
	},
	ProdTabEntry{
		String: `EmittableAsList : Emittable	<< dsl.NewASTNodeUnary(
    nil,
    X[0],
    dsl.NodeTypeEmittableList,
  ) >>`,
		Id:         "EmittableAsList",
		NTType:     24,
		Index:      84,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeEmittableList,
			)
		},
	},
	ProdTabEntry{
		String: `Emittable : LocalVariable	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      85,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : FullOosvar	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      86,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : DirectOosvarValue	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      87,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : BracedOosvarValue	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      88,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : IndirectOosvarValue	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      89,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : FullSrec	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      90,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : DirectFieldValue	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      91,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : BracedFieldValue	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      92,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : IndirectFieldValue	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      93,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `Emittable : MapLiteral	<<  >>`,
		Id:         "Emittable",
		NTType:     25,
		Index:      94,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `EmitKeys : Rvalue	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeEmitKeys,
    ) >>`,
		Id:         "EmitKeys",
		NTType:     26,
		Index:      95,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeEmitKeys,
			)
		},
	},
	ProdTabEntry{
		String: `EmitKeys : Rvalue "," EmitKeys	<< dsl.PrependChild(
      X[2],
      X[0],
    ) >>`,
		Id:         "EmitKeys",
		NTType:     26,
		Index:      96,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(
				X[2],
				X[0],
			)
		},
	},
	ProdTabEntry{
		String: `FieldValue : DirectFieldValue	<<  >>`,
		Id:         "FieldValue",
		NTType:     27,
		Index:      97,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FieldValue : IndirectFieldValue	<<  >>`,
		Id:         "FieldValue",
		NTType:     27,
		Index:      98,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FieldValue : BracedFieldValue	<<  >>`,
		Id:         "FieldValue",
		NTType:     27,
		Index:      99,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FieldValue : PositionalFieldName	<<  >>`,
		Id:         "FieldValue",
		NTType:     27,
		Index:      100,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FieldValue : PositionalFieldValue	<<  >>`,
		Id:         "FieldValue",
		NTType:     27,
		Index:      101,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `DirectFieldValue : field_name	<< dsl.NewASTNodeStripDollarOrAtSign(X[0], dsl.NodeTypeDirectFieldValue) >>`,
		Id:         "DirectFieldValue",
		NTType:     28,
		Index:      102,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeStripDollarOrAtSign(X[0], dsl.NodeTypeDirectFieldValue)
		},
	},
	ProdTabEntry{
		String: `IndirectFieldValue : "$[" Rvalue "]"	<< dsl.NewASTNodeUnary(dsl.NewASTToken("$[]", X[0]), X[1], dsl.NodeTypeIndirectFieldValue) >>`,
		Id:         "IndirectFieldValue",
		NTType:     29,
		Index:      103,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(dsl.NewASTToken("$[]", X[0]), X[1], dsl.NodeTypeIndirectFieldValue)
		},
	},
	ProdTabEntry{
		String: `BracedFieldValue : braced_field_name	<< dsl.NewASTNodeStripDollarOrAtSignAndCurlyBraces(X[0], dsl.NodeTypeDirectFieldValue) >>`,
		Id:         "BracedFieldValue",
		NTType:     30,
		Index:      104,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeStripDollarOrAtSignAndCurlyBraces(X[0], dsl.NodeTypeDirectFieldValue)
		},
	},
	ProdTabEntry{
		String: `PositionalFieldName : "$[[" Rvalue "]" "]"	<< dsl.NewASTNodeUnary(dsl.NewASTToken("$[]", X[0]), X[1], dsl.NodeTypePositionalFieldName) >>`,
		Id:         "PositionalFieldName",
		NTType:     31,
		Index:      105,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(dsl.NewASTToken("$[]", X[0]), X[1], dsl.NodeTypePositionalFieldName)
		},
	},
	ProdTabEntry{
		String: `PositionalFieldValue : "$[[[" Rvalue "]" "]" "]"	<< dsl.NewASTNodeUnary(dsl.NewASTToken("$[]", X[0]), X[1], dsl.NodeTypePositionalFieldValue) >>`,
		Id:         "PositionalFieldValue",
		NTType:     32,
		Index:      106,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(dsl.NewASTToken("$[]", X[0]), X[1], dsl.NodeTypePositionalFieldValue)
		},
	},
	ProdTabEntry{
		String: `FullSrec : full_srec	<< dsl.NewASTNode(X[0], dsl.NodeTypeFullSrec) >>`,
		Id:         "FullSrec",
		NTType:     33,
		Index:      107,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeFullSrec)
		},
	},
	ProdTabEntry{
		String: `OosvarValue : DirectOosvarValue	<<  >>`,
		Id:         "OosvarValue",
		NTType:     34,
		Index:      108,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `OosvarValue : IndirectOosvarValue	<<  >>`,
		Id:         "OosvarValue",
		NTType:     34,
		Index:      109,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `OosvarValue : BracedOosvarValue	<<  >>`,
		Id:         "OosvarValue",
		NTType:     34,
		Index:      110,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `DirectOosvarValue : oosvar_name	<< dsl.NewASTNodeStripDollarOrAtSign(X[0], dsl.NodeTypeDirectOosvarValue) >>`,
		Id:         "DirectOosvarValue",
		NTType:     35,
		Index:      111,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeStripDollarOrAtSign(X[0], dsl.NodeTypeDirectOosvarValue)
		},
	},
	ProdTabEntry{
		String: `IndirectOosvarValue : "@[" Rvalue "]"	<< dsl.NewASTNodeUnary(dsl.NewASTToken("@[]", X[0]), X[1], dsl.NodeTypeIndirectOosvarValue) >>`,
		Id:         "IndirectOosvarValue",
		NTType:     36,
		Index:      112,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(dsl.NewASTToken("@[]", X[0]), X[1], dsl.NodeTypeIndirectOosvarValue)
		},
	},
	ProdTabEntry{
		String: `BracedOosvarValue : braced_oosvar_name	<< dsl.NewASTNodeStripDollarOrAtSignAndCurlyBraces(X[0], dsl.NodeTypeDirectOosvarValue) >>`,
		Id:         "BracedOosvarValue",
		NTType:     37,
		Index:      113,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeStripDollarOrAtSignAndCurlyBraces(X[0], dsl.NodeTypeDirectOosvarValue)
		},
	},
	ProdTabEntry{
		String: `FullOosvar : full_oosvar	<< dsl.NewASTNode(X[0], dsl.NodeTypeFullOosvar) >>`,
		Id:         "FullOosvar",
		NTType:     38,
		Index:      114,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeFullOosvar)
		},
	},
	ProdTabEntry{
		String: `FullOosvar : all	<< dsl.NewASTNode(X[0], dsl.NodeTypeFullOosvar) >>`,
		Id:         "FullOosvar",
		NTType:     38,
		Index:      115,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeFullOosvar)
		},
	},
	ProdTabEntry{
		String: `LocalVariable : non_sigil_name	<< dsl.NewASTNode(X[0], dsl.NodeTypeLocalVariable) >>`,
		Id:         "LocalVariable",
		NTType:     39,
		Index:      116,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeLocalVariable)
		},
	},
	ProdTabEntry{
		String: `Typedecl : arr	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      117,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : bool	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      118,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : float	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      119,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : int	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      120,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : map	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      121,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : num	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      122,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : str	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      123,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Typedecl : var	<< dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl) >>`,
		Id:         "Typedecl",
		NTType:     40,
		Index:      124,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeTypedecl)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "||=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("||", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      125,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("||", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "^^=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("^^", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      126,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("^^", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "&&=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("&&", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      127,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("&&", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "??=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("??", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      128,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("??", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "???=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("???", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      129,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("???", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "|=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("|", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      130,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("|", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "&=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("^", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      131,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("^", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "^=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("^", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      132,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("^", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "<<=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("<<", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      133,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("<<", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue ">>=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken(">"+">", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      134,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken(">"+">", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue ">>>=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken(">"+">"+">", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      135,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken(">"+">"+">", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "+=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("+", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      136,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("+", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue ".=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken(".", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      137,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken(".", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "-=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("-", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      138,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("-", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "*=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("*", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      139,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("*", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "/=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("/", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      140,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("/", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "//=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("//", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      141,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("//", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "%=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("%", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      142,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("%", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Assignment : Lvalue "**=" Rvalue	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("=", X[1]),
      X[0],
      dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("**", X[1]), X[0], X[2], dsl.NodeTypeOperator),
      dsl.NodeTypeAssignment,
    ) >>`,
		Id:         "Assignment",
		NTType:     6,
		Index:      143,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("=", X[1]),
				X[0],
				dsl.NewASTNodeBinaryNestable(dsl.NewASTToken("**", X[1]), X[0], X[2], dsl.NodeTypeOperator),
				dsl.NodeTypeAssignment,
			)
		},
	},
	ProdTabEntry{
		String: `Rvalue : PrecedenceChainStart	<<  >>`,
		Id:         "Rvalue",
		NTType:     41,
		Index:      144,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `PrecedenceChainStart : TernaryTerm	<<  >>`,
		Id:         "PrecedenceChainStart",
		NTType:     42,
		Index:      145,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `TernaryTerm : LogicalOrTerm "?" TernaryTerm ":" TernaryTerm	<< dsl.NewASTNodeTernary(dsl.NewASTToken("?:", X[1]), X[0], X[2], X[4], dsl.NodeTypeOperator) >>`,
		Id:         "TernaryTerm",
		NTType:     43,
		Index:      146,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(dsl.NewASTToken("?:", X[1]), X[0], X[2], X[4], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `TernaryTerm : LogicalOrTerm	<<  >>`,
		Id:         "TernaryTerm",
		NTType:     43,
		Index:      147,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `LogicalOrTerm : LogicalOrTerm "||" LogicalXORTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "LogicalOrTerm",
		NTType:     44,
		Index:      148,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `LogicalOrTerm : LogicalXORTerm	<<  >>`,
		Id:         "LogicalOrTerm",
		NTType:     44,
		Index:      149,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `LogicalXORTerm : LogicalXORTerm "^^" LogicalAndTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "LogicalXORTerm",
		NTType:     45,
		Index:      150,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `LogicalXORTerm : LogicalAndTerm	<<  >>`,
		Id:         "LogicalXORTerm",
		NTType:     45,
		Index:      151,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `LogicalAndTerm : LogicalAndTerm "&&" AbsentCoalesceTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "LogicalAndTerm",
		NTType:     46,
		Index:      152,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `LogicalAndTerm : AbsentCoalesceTerm	<<  >>`,
		Id:         "LogicalAndTerm",
		NTType:     46,
		Index:      153,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `AbsentCoalesceTerm : AbsentCoalesceTerm "??" EmptyCoalesceTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "AbsentCoalesceTerm",
		NTType:     47,
		Index:      154,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `AbsentCoalesceTerm : EmptyCoalesceTerm	<<  >>`,
		Id:         "AbsentCoalesceTerm",
		NTType:     47,
		Index:      155,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `EmptyCoalesceTerm : EmptyCoalesceTerm "???" EqneTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "EmptyCoalesceTerm",
		NTType:     48,
		Index:      156,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `EmptyCoalesceTerm : EqneTerm	<<  >>`,
		Id:         "EmptyCoalesceTerm",
		NTType:     48,
		Index:      157,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `EqneTerm : EqneTerm "=~" CmpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "EqneTerm",
		NTType:     49,
		Index:      158,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `EqneTerm : EqneTerm "!=~" CmpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "EqneTerm",
		NTType:     49,
		Index:      159,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `EqneTerm : EqneTerm "==" CmpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "EqneTerm",
		NTType:     49,
		Index:      160,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `EqneTerm : EqneTerm "!=" CmpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "EqneTerm",
		NTType:     49,
		Index:      161,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `EqneTerm : CmpTerm	<<  >>`,
		Id:         "EqneTerm",
		NTType:     49,
		Index:      162,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `CmpTerm : CmpTerm ">" BitwiseORTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "CmpTerm",
		NTType:     50,
		Index:      163,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `CmpTerm : CmpTerm ">=" BitwiseORTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "CmpTerm",
		NTType:     50,
		Index:      164,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `CmpTerm : CmpTerm "<" BitwiseORTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "CmpTerm",
		NTType:     50,
		Index:      165,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `CmpTerm : CmpTerm "<=" BitwiseORTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "CmpTerm",
		NTType:     50,
		Index:      166,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `CmpTerm : BitwiseORTerm	<<  >>`,
		Id:         "CmpTerm",
		NTType:     50,
		Index:      167,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BitwiseORTerm : BitwiseORTerm "|" BitwiseXORTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "BitwiseORTerm",
		NTType:     51,
		Index:      168,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `BitwiseORTerm : BitwiseXORTerm	<<  >>`,
		Id:         "BitwiseORTerm",
		NTType:     51,
		Index:      169,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BitwiseXORTerm : BitwiseXORTerm "^" BitwiseANDTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "BitwiseXORTerm",
		NTType:     52,
		Index:      170,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `BitwiseXORTerm : BitwiseANDTerm	<<  >>`,
		Id:         "BitwiseXORTerm",
		NTType:     52,
		Index:      171,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BitwiseANDTerm : BitwiseANDTerm "&" BitwiseShiftTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "BitwiseANDTerm",
		NTType:     53,
		Index:      172,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `BitwiseANDTerm : BitwiseShiftTerm	<<  >>`,
		Id:         "BitwiseANDTerm",
		NTType:     53,
		Index:      173,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BitwiseShiftTerm : BitwiseShiftTerm "<<" AddsubdotTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "BitwiseShiftTerm",
		NTType:     54,
		Index:      174,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `BitwiseShiftTerm : BitwiseShiftTerm ">>" AddsubdotTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "BitwiseShiftTerm",
		NTType:     54,
		Index:      175,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `BitwiseShiftTerm : BitwiseShiftTerm ">>>" AddsubdotTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "BitwiseShiftTerm",
		NTType:     54,
		Index:      176,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `BitwiseShiftTerm : AddsubdotTerm	<<  >>`,
		Id:         "BitwiseShiftTerm",
		NTType:     54,
		Index:      177,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `AddsubdotTerm : AddsubdotTerm "+" MuldivTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "AddsubdotTerm",
		NTType:     55,
		Index:      178,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `AddsubdotTerm : AddsubdotTerm "-" MuldivTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "AddsubdotTerm",
		NTType:     55,
		Index:      179,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `AddsubdotTerm : AddsubdotTerm ".+" MuldivTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "AddsubdotTerm",
		NTType:     55,
		Index:      180,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `AddsubdotTerm : AddsubdotTerm ".-" MuldivTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "AddsubdotTerm",
		NTType:     55,
		Index:      181,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `AddsubdotTerm : AddsubdotTerm "." MuldivTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "AddsubdotTerm",
		NTType:     55,
		Index:      182,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `AddsubdotTerm : MuldivTerm	<<  >>`,
		Id:         "AddsubdotTerm",
		NTType:     55,
		Index:      183,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm "*" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      184,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm "/" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      185,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm "//" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      186,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm "%" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      187,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm ".*" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      188,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm "./" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      189,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : MuldivTerm ".//" UnaryOpTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      190,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `MuldivTerm : UnaryOpTerm	<<  >>`,
		Id:         "MuldivTerm",
		NTType:     56,
		Index:      191,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : "+" UnaryOpTerm	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator) >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      192,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : "-" UnaryOpTerm	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator) >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      193,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : ".+" UnaryOpTerm	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator) >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      194,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : ".-" UnaryOpTerm	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator) >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      195,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : "!" UnaryOpTerm	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator) >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      196,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : "~" UnaryOpTerm	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator) >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      197,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `UnaryOpTerm : PowTerm	<<  >>`,
		Id:         "UnaryOpTerm",
		NTType:     57,
		Index:      198,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `PowTerm : PrecedenceChainEnd "**" PowTerm	<< dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator) >>`,
		Id:         "PowTerm",
		NTType:     58,
		Index:      199,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[1], X[0], X[2], dsl.NodeTypeOperator)
		},
	},
	ProdTabEntry{
		String: `PowTerm : PrecedenceChainEnd	<<  >>`,
		Id:         "PowTerm",
		NTType:     58,
		Index:      200,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `PrecedenceChainEnd : "(" Rvalue ")"	<< dsl.Nestable(X[1]) >>`,
		Id:         "PrecedenceChainEnd",
		NTType:     59,
		Index:      201,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.Nestable(X[1])
		},
	},
	ProdTabEntry{
		String: `PrecedenceChainEnd : MlrvalOrFunction	<<  >>`,
		Id:         "PrecedenceChainEnd",
		NTType:     59,
		Index:      202,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : FieldValue	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      203,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : FullSrec	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      204,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : OosvarValue	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      205,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : FullOosvar	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      206,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : LocalVariable	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      207,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : string_literal	<< dsl.NewASTNodeStripDoubleQuotePair(X[0], dsl.NodeTypeStringLiteral) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      208,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeStripDoubleQuotePair(X[0], dsl.NodeTypeStringLiteral)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : regex_case_insensitive	<< dsl.NewASTNode(X[0], dsl.NodeTypeRegexCaseInsensitive) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      209,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeRegexCaseInsensitive)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : int_literal	<< dsl.NewASTNode(X[0], dsl.NodeTypeIntLiteral) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      210,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeIntLiteral)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : float_literal	<< dsl.NewASTNode(X[0], dsl.NodeTypeFloatLiteral) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      211,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeFloatLiteral)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : boolean_literal	<< dsl.NewASTNode(X[0], dsl.NodeTypeBoolLiteral) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      212,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeBoolLiteral)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : const_M_PI	<< dsl.NewASTNode(
      X[0],
      dsl.NodeTypeConstant,
    ) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      213,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(
				X[0],
				dsl.NodeTypeConstant,
			)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : const_M_E	<< dsl.NewASTNode(
      X[0],
      dsl.NodeTypeConstant,
    ) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      214,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(
				X[0],
				dsl.NodeTypeConstant,
			)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : panic	<< dsl.NewASTNode(X[0], dsl.NodeTypePanic) >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      215,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypePanic)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ArrayLiteral	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      216,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ArrayLiteral : "[" "]"	<< dsl.NewASTNodeZary(
      dsl.NewASTToken("[]", X[0]),
      dsl.NodeTypeArrayLiteral,
    ) >>`,
		Id:         "ArrayLiteral",
		NTType:     61,
		Index:      217,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(
				dsl.NewASTToken("[]", X[0]),
				dsl.NodeTypeArrayLiteral,
			)
		},
	},
	ProdTabEntry{
		String: `ArrayLiteral : "[" ArrayLiteralElements "]"	<< dsl.AdoptChildren(
        dsl.NewASTNodeNestable(
          dsl.NewASTToken("[]", X[0]),
          dsl.NodeTypeArrayLiteral,
        ),
        X[1],
      ) >>`,
		Id:         "ArrayLiteral",
		NTType:     61,
		Index:      218,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AdoptChildren(
				dsl.NewASTNodeNestable(
					dsl.NewASTToken("[]", X[0]),
					dsl.NodeTypeArrayLiteral,
				),
				X[1],
			)
		},
	},
	ProdTabEntry{
		String: `ArrayLiteralElements : Rvalue	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeArrayLiteral,
    ) >>`,
		Id:         "ArrayLiteralElements",
		NTType:     62,
		Index:      219,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeArrayLiteral,
			)
		},
	},
	ProdTabEntry{
		String: `ArrayLiteralElements : Rvalue ","	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeArrayLiteral,
    ) >>`,
		Id:         "ArrayLiteralElements",
		NTType:     62,
		Index:      220,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeArrayLiteral,
			)
		},
	},
	ProdTabEntry{
		String: `ArrayLiteralElements : Rvalue "," ArrayLiteralElements	<< dsl.PrependChild(
      X[2],
      X[0],
    ) >>`,
		Id:         "ArrayLiteralElements",
		NTType:     62,
		Index:      221,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(
				X[2],
				X[0],
			)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : MapLiteral	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      222,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MapLiteral : "{" "}"	<< dsl.NewASTNodeZary(
      dsl.NewASTToken("{}", X[0]),
      dsl.NodeTypeMapLiteral,
    ) >>`,
		Id:         "MapLiteral",
		NTType:     63,
		Index:      223,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(
				dsl.NewASTToken("{}", X[0]),
				dsl.NodeTypeMapLiteral,
			)
		},
	},
	ProdTabEntry{
		String: `MapLiteral : "{" MapLiteralKeyValuePairs "}"	<< dsl.AdoptChildren(
        dsl.NewASTNodeNestable(
          dsl.NewASTToken("{}", X[0]),
          dsl.NodeTypeMapLiteral,
        ),
        X[1],
      ) >>`,
		Id:         "MapLiteral",
		NTType:     63,
		Index:      224,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AdoptChildren(
				dsl.NewASTNodeNestable(
					dsl.NewASTToken("{}", X[0]),
					dsl.NodeTypeMapLiteral,
				),
				X[1],
			)
		},
	},
	ProdTabEntry{
		String: `MapLiteralKeyValuePairs : MapLiteralKeyValuePair	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeMapLiteral,
    ) >>`,
		Id:         "MapLiteralKeyValuePairs",
		NTType:     64,
		Index:      225,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeMapLiteral,
			)
		},
	},
	ProdTabEntry{
		String: `MapLiteralKeyValuePairs : MapLiteralKeyValuePair ","	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeMapLiteral,
    ) >>`,
		Id:         "MapLiteralKeyValuePairs",
		NTType:     64,
		Index:      226,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeMapLiteral,
			)
		},
	},
	ProdTabEntry{
		String: `MapLiteralKeyValuePairs : MapLiteralKeyValuePair "," MapLiteralKeyValuePairs	<< dsl.PrependChild(
      X[2],
      X[0],
    ) >>`,
		Id:         "MapLiteralKeyValuePairs",
		NTType:     64,
		Index:      227,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(
				X[2],
				X[0],
			)
		},
	},
	ProdTabEntry{
		String: `MapLiteralKeyValuePair : Rvalue ":" Rvalue	<< dsl.NewASTNodeBinary(
      X[1],
      X[0],
      X[2],
      dsl.NodeTypeMapLiteralKeyValuePair,
    ) >>`,
		Id:         "MapLiteralKeyValuePair",
		NTType:     65,
		Index:      228,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[1],
				X[0],
				X[2],
				dsl.NodeTypeMapLiteralKeyValuePair,
			)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ContextVariable	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      229,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_IPS	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      230,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_IFS	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      231,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_IRS	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      232,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_OPS	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      233,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_OFS	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      234,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_ORS	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      235,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_OFLATSEP	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      236,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_NF	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      237,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_NR	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      238,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_FNR	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      239,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_FILENAME	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      240,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `ContextVariable : ctx_FILENUM	<< dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable) >>`,
		Id:         "ContextVariable",
		NTType:     66,
		Index:      241,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeContextVariable)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ENV	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      242,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ENV : env "[" Rvalue "]"	<< dsl.NewASTNodeUnary(
      X[0],
      X[2],
      dsl.NodeTypeEnvironmentVariable,
    ) >>`,
		Id:         "ENV",
		NTType:     67,
		Index:      243,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				X[0],
				X[2],
				dsl.NodeTypeEnvironmentVariable,
			)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ArrayOrMapIndexAccess	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      244,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ArrayOrMapPositionalNameAccess	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      245,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ArrayOrMapPositionalValueAccess	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      246,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : ArraySliceAccess	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      247,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ArrayOrMapIndexAccess : MlrvalOrFunction "[" Rvalue "]"	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      X[2],
      dsl.NodeTypeArrayOrMapIndexAccess,
    ) >>`,
		Id:         "ArrayOrMapIndexAccess",
		NTType:     68,
		Index:      248,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				X[2],
				dsl.NodeTypeArrayOrMapIndexAccess,
			)
		},
	},
	ProdTabEntry{
		String: `ArrayOrMapPositionalNameAccess : MlrvalOrFunction "[[" Rvalue "]" "]"	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      X[2],
      dsl.NodeTypeArrayOrMapPositionalNameAccess,
    ) >>`,
		Id:         "ArrayOrMapPositionalNameAccess",
		NTType:     69,
		Index:      249,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				X[2],
				dsl.NodeTypeArrayOrMapPositionalNameAccess,
			)
		},
	},
	ProdTabEntry{
		String: `ArrayOrMapPositionalValueAccess : MlrvalOrFunction "[[[" Rvalue "]" "]" "]"	<< dsl.NewASTNodeBinary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      X[2],
      dsl.NodeTypeArrayOrMapPositionalValueAccess,
    ) >>`,
		Id:         "ArrayOrMapPositionalValueAccess",
		NTType:     70,
		Index:      250,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				X[2],
				dsl.NodeTypeArrayOrMapPositionalValueAccess,
			)
		},
	},
	ProdTabEntry{
		String: `ArraySliceAccess : MlrvalOrFunction "[" Rvalue ":" Rvalue "]"	<< dsl.NewASTNodeTernary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      X[2],
      X[4],
      dsl.NodeTypeArraySliceAccess,
    ) >>`,
		Id:         "ArraySliceAccess",
		NTType:     71,
		Index:      251,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				X[2],
				X[4],
				dsl.NodeTypeArraySliceAccess,
			)
		},
	},
	ProdTabEntry{
		String: `ArraySliceAccess : MlrvalOrFunction "[" ":" Rvalue "]"	<< dsl.NewASTNodeTernary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      dsl.NewASTNodeNestable(
        X[2],
        dsl.NodeTypeArraySliceEmptyLowerIndex,
      ),
      X[3],
      dsl.NodeTypeArraySliceAccess,
    ) >>`,
		Id:         "ArraySliceAccess",
		NTType:     71,
		Index:      252,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				dsl.NewASTNodeNestable(
					X[2],
					dsl.NodeTypeArraySliceEmptyLowerIndex,
				),
				X[3],
				dsl.NodeTypeArraySliceAccess,
			)
		},
	},
	ProdTabEntry{
		String: `ArraySliceAccess : MlrvalOrFunction "[" Rvalue ":" "]"	<< dsl.NewASTNodeTernary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      X[2],
      dsl.NewASTNodeNestable(
        X[3],
        dsl.NodeTypeArraySliceEmptyUpperIndex,
      ),
      dsl.NodeTypeArraySliceAccess,
    ) >>`,
		Id:         "ArraySliceAccess",
		NTType:     71,
		Index:      253,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				X[2],
				dsl.NewASTNodeNestable(
					X[3],
					dsl.NodeTypeArraySliceEmptyUpperIndex,
				),
				dsl.NodeTypeArraySliceAccess,
			)
		},
	},
	ProdTabEntry{
		String: `ArraySliceAccess : MlrvalOrFunction "[" ":" "]"	<< dsl.NewASTNodeTernary(
      dsl.NewASTToken("[]", X[1]),
      X[0],
      dsl.NewASTNodeNestable(
        X[2],
        dsl.NodeTypeArraySliceEmptyLowerIndex,
      ),
      dsl.NewASTNodeNestable(
        X[2],
        dsl.NodeTypeArraySliceEmptyUpperIndex,
      ),
      dsl.NodeTypeArraySliceAccess,
    ) >>`,
		Id:         "ArraySliceAccess",
		NTType:     71,
		Index:      254,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				dsl.NewASTToken("[]", X[1]),
				X[0],
				dsl.NewASTNodeNestable(
					X[2],
					dsl.NodeTypeArraySliceEmptyLowerIndex,
				),
				dsl.NewASTNodeNestable(
					X[2],
					dsl.NodeTypeArraySliceEmptyUpperIndex,
				),
				dsl.NodeTypeArraySliceAccess,
			)
		},
	},
	ProdTabEntry{
		String: `MlrvalOrFunction : FunctionCallsite	<<  >>`,
		Id:         "MlrvalOrFunction",
		NTType:     60,
		Index:      255,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FunctionCallsite : FunctionName "(" ")"	<< dsl.NewASTNodeZary(
      X[0],
      dsl.NodeTypeFunctionCallsite,
    ) >>`,
		Id:         "FunctionCallsite",
		NTType:     72,
		Index:      256,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(
				X[0],
				dsl.NodeTypeFunctionCallsite,
			)
		},
	},
	ProdTabEntry{
		String: `FunctionCallsite : FunctionName "(" FcnArgs ")"	<< dsl.AdoptChildren(
        dsl.NewASTNodeNestable(
          X[0],
          dsl.NodeTypeFunctionCallsite,
        ),
        X[2],
      ) >>`,
		Id:         "FunctionCallsite",
		NTType:     72,
		Index:      257,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AdoptChildren(
				dsl.NewASTNodeNestable(
					X[0],
					dsl.NodeTypeFunctionCallsite,
				),
				X[2],
			)
		},
	},
	ProdTabEntry{
		String: `FunctionName : non_sigil_name	<<  >>`,
		Id:         "FunctionName",
		NTType:     73,
		Index:      258,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FunctionName : int	<<  >>`,
		Id:         "FunctionName",
		NTType:     73,
		Index:      259,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FunctionName : float	<<  >>`,
		Id:         "FunctionName",
		NTType:     73,
		Index:      260,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `FcnArgs : Rvalue	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeFunctionCallsite,
    ) >>`,
		Id:         "FcnArgs",
		NTType:     74,
		Index:      261,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeFunctionCallsite,
			)
		},
	},
	ProdTabEntry{
		String: `FcnArgs : Rvalue ","	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeFunctionCallsite,
    ) >>`,
		Id:         "FcnArgs",
		NTType:     74,
		Index:      262,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeFunctionCallsite,
			)
		},
	},
	ProdTabEntry{
		String: `FcnArgs : Rvalue "," FcnArgs	<< dsl.PrependChild(
      X[2],
      X[0],
    ) >>`,
		Id:         "FcnArgs",
		NTType:     74,
		Index:      263,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(
				X[2],
				X[0],
			)
		},
	},
	ProdTabEntry{
		String: `SubroutineCallsite : call SubroutineName "(" ")"	<< dsl.NewASTNodeZary(
      X[1],
      dsl.NodeTypeSubroutineCallsite,
    ) >>`,
		Id:         "SubroutineCallsite",
		NTType:     75,
		Index:      264,
		NumSymbols: 4,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(
				X[1],
				dsl.NodeTypeSubroutineCallsite,
			)
		},
	},
	ProdTabEntry{
		String: `SubroutineCallsite : call SubroutineName "(" FcnArgs ")"	<< dsl.AdoptChildren(
        dsl.NewASTNodeNestable(
          X[1],
          dsl.NodeTypeSubroutineCallsite,
        ),
        X[3],
      ) >>`,
		Id:         "SubroutineCallsite",
		NTType:     75,
		Index:      265,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AdoptChildren(
				dsl.NewASTNodeNestable(
					X[1],
					dsl.NodeTypeSubroutineCallsite,
				),
				X[3],
			)
		},
	},
	ProdTabEntry{
		String: `SubroutineName : non_sigil_name	<<  >>`,
		Id:         "SubroutineName",
		NTType:     76,
		Index:      266,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : BeginBlock	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      267,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : EndBlock	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      268,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : CondBlock	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      269,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : IfChain	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      270,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : WhileLoop	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      271,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : ForLoop	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      272,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : FunctionDefinition	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      273,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BracefulStatement : SubroutineDefinition	<<  >>`,
		Id:         "BracefulStatement",
		NTType:     77,
		Index:      274,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `BeginBlock : begin StatementBlockInBraces	<< dsl.NewASTNodeUnary(nil, X[1], dsl.NodeTypeBeginBlock) >>`,
		Id:         "BeginBlock",
		NTType:     78,
		Index:      275,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[1], dsl.NodeTypeBeginBlock)
		},
	},
	ProdTabEntry{
		String: `EndBlock : end StatementBlockInBraces	<< dsl.NewASTNodeUnary(nil, X[1], dsl.NodeTypeEndBlock) >>`,
		Id:         "EndBlock",
		NTType:     79,
		Index:      276,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[1], dsl.NodeTypeEndBlock)
		},
	},
	ProdTabEntry{
		String: `CondBlock : Rvalue StatementBlockInBraces	<< dsl.NewASTNodeBinary(nil, X[0], X[1], dsl.NodeTypeCondBlock) >>`,
		Id:         "CondBlock",
		NTType:     80,
		Index:      277,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(nil, X[0], X[1], dsl.NodeTypeCondBlock)
		},
	},
	ProdTabEntry{
		String: `IfChain : IfElifStar	<<  >>`,
		Id:         "IfChain",
		NTType:     81,
		Index:      278,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `IfChain : IfElifStar ElseBlock	<< dsl.AppendChild(X[0], X[1]) >>`,
		Id:         "IfChain",
		NTType:     81,
		Index:      279,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `IfElifStar : IfBlock	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeIfChain) >>`,
		Id:         "IfElifStar",
		NTType:     82,
		Index:      280,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeIfChain)
		},
	},
	ProdTabEntry{
		String: `IfElifStar : IfElifStar ElifBlock	<< dsl.AppendChild(X[0], X[1]) >>`,
		Id:         "IfElifStar",
		NTType:     82,
		Index:      281,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[0], X[1])
		},
	},
	ProdTabEntry{
		String: `IfBlock : if "(" Rvalue ")" StatementBlockInBraces	<< dsl.NewASTNodeBinary(X[0], X[2], X[4], dsl.NodeTypeIfItem) >>`,
		Id:         "IfBlock",
		NTType:     83,
		Index:      282,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[0], X[2], X[4], dsl.NodeTypeIfItem)
		},
	},
	ProdTabEntry{
		String: `ElifBlock : elif "(" Rvalue ")" StatementBlockInBraces	<< dsl.NewASTNodeBinary(X[0], X[2], X[4], dsl.NodeTypeIfItem) >>`,
		Id:         "ElifBlock",
		NTType:     84,
		Index:      283,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[0], X[2], X[4], dsl.NodeTypeIfItem)
		},
	},
	ProdTabEntry{
		String: `ElseBlock : else StatementBlockInBraces	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeIfItem) >>`,
		Id:         "ElseBlock",
		NTType:     85,
		Index:      284,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeIfItem)
		},
	},
	ProdTabEntry{
		String: `WhileLoop : while "(" Rvalue ")" StatementBlockInBraces	<< dsl.NewASTNodeBinary(X[0], X[2], X[4], dsl.NodeTypeWhileLoop) >>`,
		Id:         "WhileLoop",
		NTType:     86,
		Index:      285,
		NumSymbols: 5,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[0], X[2], X[4], dsl.NodeTypeWhileLoop)
		},
	},
	ProdTabEntry{
		String: `DoWhileLoop : do StatementBlockInBraces while "(" Rvalue ")"	<< dsl.NewASTNodeBinary(X[0], X[1], X[4], dsl.NodeTypeDoWhileLoop) >>`,
		Id:         "DoWhileLoop",
		NTType:     87,
		Index:      286,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(X[0], X[1], X[4], dsl.NodeTypeDoWhileLoop)
		},
	},
	ProdTabEntry{
		String: `ForLoop : ForLoopOneVariable	<<  >>`,
		Id:         "ForLoop",
		NTType:     88,
		Index:      287,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ForLoop : ForLoopTwoVariable	<<  >>`,
		Id:         "ForLoop",
		NTType:     88,
		Index:      288,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ForLoop : ForLoopMultivariable	<<  >>`,
		Id:         "ForLoop",
		NTType:     88,
		Index:      289,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ForLoop : TripleForLoop	<<  >>`,
		Id:         "ForLoop",
		NTType:     88,
		Index:      290,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `ForLoopOneVariable : for "(" LocalVariable in Rvalue ")" StatementBlockInBraces	<< dsl.NewASTNodeTernary(
     X[0], // "for"
     X[2], // k, etc.
     X[4], // $*, etc.
     X[6], // { ... }
     dsl.NodeTypeForLoopOneVariable,
   ); >>`,
		Id:         "ForLoopOneVariable",
		NTType:     89,
		Index:      291,
		NumSymbols: 7,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[0], // "for"
				X[2], // k, etc.
				X[4], // $*, etc.
				X[6], // { ... }
				dsl.NodeTypeForLoopOneVariable,
			)
		},
	},
	ProdTabEntry{
		String: `ForLoopTwoVariable : for "(" LocalVariable "," LocalVariable in Rvalue ")" StatementBlockInBraces	<< dsl.NewASTNodeQuaternary(
     X[0], // "for"
     X[2], // k, etc.
     X[4], // v, etc.
     X[6], // $*, etc.
     X[8], // { ... }
     dsl.NodeTypeForLoopTwoVariable,
   ); >>`,
		Id:         "ForLoopTwoVariable",
		NTType:     90,
		Index:      292,
		NumSymbols: 9,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeQuaternary(
				X[0], // "for"
				X[2], // k, etc.
				X[4], // v, etc.
				X[6], // $*, etc.
				X[8], // { ... }
				dsl.NodeTypeForLoopTwoVariable,
			)
		},
	},
	ProdTabEntry{
		String: `ForLoopMultivariable : for "(" "(" MultiIndex ")" "," LocalVariable in Rvalue ")" StatementBlockInBraces	<< dsl.NewASTNodeQuaternary(
     X[0], // "for"
     X[3], // (k1, k2), etc.
     X[6], // v, etc.
     X[8], // $*, etc.
     X[10], // { ... }
     dsl.NodeTypeForLoopMultivariable,
   ); >>`,
		Id:         "ForLoopMultivariable",
		NTType:     91,
		Index:      293,
		NumSymbols: 11,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeQuaternary(
				X[0],  // "for"
				X[3],  // (k1, k2), etc.
				X[6],  // v, etc.
				X[8],  // $*, etc.
				X[10], // { ... }
				dsl.NodeTypeForLoopMultivariable,
			)
		},
	},
	ProdTabEntry{
		String: `MultiIndex : LocalVariable "," LocalVariable	<< dsl.NewASTNodeBinary(
      nil,
      X[0],
      X[2],
      dsl.NodeTypeParameterList,
    ) >>`,
		Id:         "MultiIndex",
		NTType:     92,
		Index:      294,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				nil,
				X[0],
				X[2],
				dsl.NodeTypeParameterList,
			)
		},
	},
	ProdTabEntry{
		String: `MultiIndex : MultiIndex "," LocalVariable	<< dsl.AppendChild(
      X[0],
      X[2],
    ) >>`,
		Id:         "MultiIndex",
		NTType:     92,
		Index:      295,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(
				X[0],
				X[2],
			)
		},
	},
	ProdTabEntry{
		String: `TripleForLoop : for "(" TripleForStart ";" TripleForContinuation ";" TripleForUpdate ")" StatementBlockInBraces	<< dsl.NewASTNodeQuaternary(
     X[0], // for
     X[2], // start
     X[4], // continuation
     X[6], // update
     X[8], // body
     dsl.NodeTypeTripleForLoop,
   ); >>`,
		Id:         "TripleForLoop",
		NTType:     93,
		Index:      296,
		NumSymbols: 9,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeQuaternary(
				X[0], // for
				X[2], // start
				X[4], // continuation
				X[6], // update
				X[8], // body
				dsl.NodeTypeTripleForLoop,
			)
		},
	},
	ProdTabEntry{
		String: `TripleForStart : empty	<< dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock) >>`,
		Id:         "TripleForStart",
		NTType:     94,
		Index:      297,
		NumSymbols: 0,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `TripleForStart : Assignment	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock) >>`,
		Id:         "TripleForStart",
		NTType:     94,
		Index:      298,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `TripleForStart : TripleForStart "," Assignment	<< dsl.AppendChild(X[0], X[2]) >>`,
		Id:         "TripleForStart",
		NTType:     94,
		Index:      299,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `TripleForContinuation : empty	<< dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock) >>`,
		Id:         "TripleForContinuation",
		NTType:     95,
		Index:      300,
		NumSymbols: 0,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `TripleForContinuation : TripleForContinuationItem	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock) >>`,
		Id:         "TripleForContinuation",
		NTType:     95,
		Index:      301,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `TripleForContinuation : TripleForContinuation "," TripleForContinuationItem	<< dsl.AppendChild(X[0], X[2]) >>`,
		Id:         "TripleForContinuation",
		NTType:     95,
		Index:      302,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `TripleForContinuationItem : Assignment	<<  >>`,
		Id:         "TripleForContinuationItem",
		NTType:     96,
		Index:      303,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `TripleForContinuationItem : BareBoolean	<<  >>`,
		Id:         "TripleForContinuationItem",
		NTType:     96,
		Index:      304,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return X[0], nil
		},
	},
	ProdTabEntry{
		String: `TripleForUpdate : empty	<< dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock) >>`,
		Id:         "TripleForUpdate",
		NTType:     97,
		Index:      305,
		NumSymbols: 0,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(nil, dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `TripleForUpdate : Assignment	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock) >>`,
		Id:         "TripleForUpdate",
		NTType:     97,
		Index:      306,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeStatementBlock)
		},
	},
	ProdTabEntry{
		String: `TripleForUpdate : TripleForUpdate "," Assignment	<< dsl.AppendChild(X[0], X[2]) >>`,
		Id:         "TripleForUpdate",
		NTType:     97,
		Index:      307,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[0], X[2])
		},
	},
	ProdTabEntry{
		String: `BreakStatement : break	<< dsl.NewASTNodeZary(X[0], dsl.NodeTypeBreak) >>`,
		Id:         "BreakStatement",
		NTType:     98,
		Index:      308,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(X[0], dsl.NodeTypeBreak)
		},
	},
	ProdTabEntry{
		String: `ContinueStatement : continue	<< dsl.NewASTNodeZary(X[0], dsl.NodeTypeContinue) >>`,
		Id:         "ContinueStatement",
		NTType:     99,
		Index:      309,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(X[0], dsl.NodeTypeContinue)
		},
	},
	ProdTabEntry{
		String: `FunctionDefinition : func non_sigil_name "(" FuncOrSubrParameterList ")" StatementBlockInBraces	<< dsl.NewASTNodeBinary(
      X[1],
      X[3], // parameter list
      X[5], // { ... }
      dsl.NodeTypeFunctionDefinition,
    ); >>`,
		Id:         "FunctionDefinition",
		NTType:     100,
		Index:      310,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[1],
				X[3], // parameter list
				X[5], // { ... }
				dsl.NodeTypeFunctionDefinition,
			)
		},
	},
	ProdTabEntry{
		String: `FunctionDefinition : func non_sigil_name "(" FuncOrSubrParameterList ")" ":" Typedecl StatementBlockInBraces	<< dsl.NewASTNodeTernary(
      X[1],
      X[3], // parameter list
      X[7], // {...}
      X[6], // return type
      dsl.NodeTypeFunctionDefinition,
    ); >>`,
		Id:         "FunctionDefinition",
		NTType:     100,
		Index:      311,
		NumSymbols: 8,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeTernary(
				X[1],
				X[3], // parameter list
				X[7], // {...}
				X[6], // return type
				dsl.NodeTypeFunctionDefinition,
			)
		},
	},
	ProdTabEntry{
		String: `SubroutineDefinition : subr non_sigil_name "(" FuncOrSubrParameterList ")" StatementBlockInBraces	<< dsl.NewASTNodeBinary(
      X[1],
      X[3], // parameter list
      X[5], // { ... }
      dsl.NodeTypeSubroutineDefinition,
    ); >>`,
		Id:         "SubroutineDefinition",
		NTType:     101,
		Index:      312,
		NumSymbols: 6,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeBinary(
				X[1],
				X[3], // parameter list
				X[5], // { ... }
				dsl.NodeTypeSubroutineDefinition,
			)
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrParameterList : empty	<< dsl.NewASTNodeZary(nil, dsl.NodeTypeParameterList) >>`,
		Id:         "FuncOrSubrParameterList",
		NTType:     102,
		Index:      313,
		NumSymbols: 0,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(nil, dsl.NodeTypeParameterList)
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrParameterList : FuncOrSubrNonEmptyParameterList	<< dsl.Wrap(X[0]) >>`,
		Id:         "FuncOrSubrParameterList",
		NTType:     102,
		Index:      314,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.Wrap(X[0])
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrNonEmptyParameterList : FuncOrSubrParameter	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeParameterList) >>`,
		Id:         "FuncOrSubrNonEmptyParameterList",
		NTType:     103,
		Index:      315,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeParameterList)
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrNonEmptyParameterList : FuncOrSubrParameter ","	<< dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeParameterList) >>`,
		Id:         "FuncOrSubrNonEmptyParameterList",
		NTType:     103,
		Index:      316,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(nil, X[0], dsl.NodeTypeParameterList)
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrNonEmptyParameterList : FuncOrSubrParameter "," FuncOrSubrNonEmptyParameterList	<< dsl.PrependChild(X[2], X[0]) >>`,
		Id:         "FuncOrSubrNonEmptyParameterList",
		NTType:     103,
		Index:      317,
		NumSymbols: 3,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.PrependChild(X[2], X[0])
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrParameter : UntypedFuncOrSubrParameterName	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeParameter,
    ) >>`,
		Id:         "FuncOrSubrParameter",
		NTType:     104,
		Index:      318,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeParameter,
			)
		},
	},
	ProdTabEntry{
		String: `FuncOrSubrParameter : TypedFuncOrSubrParameterName	<< dsl.NewASTNodeUnary(
      nil,
      X[0],
      dsl.NodeTypeParameter,
    ) >>`,
		Id:         "FuncOrSubrParameter",
		NTType:     104,
		Index:      319,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(
				nil,
				X[0],
				dsl.NodeTypeParameter,
			)
		},
	},
	ProdTabEntry{
		String: `UntypedFuncOrSubrParameterName : non_sigil_name	<< dsl.NewASTNode(X[0], dsl.NodeTypeParameterName) >>`,
		Id:         "UntypedFuncOrSubrParameterName",
		NTType:     105,
		Index:      320,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNode(X[0], dsl.NodeTypeParameterName)
		},
	},
	ProdTabEntry{
		String: `TypedFuncOrSubrParameterName : Typedecl UntypedFuncOrSubrParameterName	<< dsl.AppendChild(X[1], X[0]) >>`,
		Id:         "TypedFuncOrSubrParameterName",
		NTType:     106,
		Index:      321,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.AppendChild(X[1], X[0])
		},
	},
	ProdTabEntry{
		String: `ReturnStatement : return Rvalue	<< dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeReturn) >>`,
		Id:         "ReturnStatement",
		NTType:     107,
		Index:      322,
		NumSymbols: 2,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeReturn)
		},
	},
	ProdTabEntry{
		String: `ReturnStatement : return	<< dsl.NewASTNodeZary(X[0], dsl.NodeTypeReturn) >>`,
		Id:         "ReturnStatement",
		NTType:     107,
		Index:      323,
		NumSymbols: 1,
		ReduceFunc: func(X []Attrib) (Attrib, error) {
			return dsl.NewASTNodeZary(X[0], dsl.NodeTypeReturn)
		},
	},
}
