/// Generated by rustemo. Do not edit manually!
use std::fmt::Debug;
use std::hash::Hash;
use rustemo::{
    Result, Input as InputT, Lexer, Token, TokenRecognizer as TokenRecognizerT, Parser,
    ParserDefinition, State as StateT, Builder,
};
use rustemo::regex::Regex;
use rustemo::once_cell::sync::Lazy;
use rustemo::StringLexer;
use rustemo::LRBuilder;
use super::pgs_actions;
use rustemo::{LRParser, LRContext};
use rustemo::Action::{self, Shift, Reduce, Accept};
#[allow(unused_imports)]
use rustemo::debug::{log, logn};
#[allow(unused_imports)]
#[cfg(debug_assertions)]
use rustemo::colored::*;
pub type Input = str;
const STATE_COUNT: usize = 170usize;
const MAX_RECOGNIZERS: usize = 11usize;
#[allow(dead_code)]
const TERMINAL_COUNT: usize = 53usize;
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum TokenKind {
    #[default]
    STOP,
    WS,
    CommentLine,
    NotComment,
    START_COMMENT,
    END_COMMENT,
    IDENTIFIER,
    SEMICOLON,
    CREATE,
    NODE,
    EDGE,
    GRAPH,
    TYPE,
    OPEN_PAREN,
    CLOSE_PAREN,
    OPEN_ARROW,
    CLOSE_ARROW,
    OPEN_CURLY,
    CLOSE_CURLY,
    COLON,
    COMMA,
    BAR,
    DOUBLE_BAR,
    PLUS,
    STAR,
    QUESTION,
    INTEGER_NAME,
    BOOL_NAME,
    STRING_NAME,
    DATE_NAME,
    NUMBER,
    OPTIONAL,
    AMPERSAND,
    AT,
    CHECK,
    TRUE,
    FALSE,
    GT,
    LT,
    GE,
    LE,
    EQUALS,
    QUOTED_STRING,
    REGEX,
    AND,
    OR,
    NOT,
    ANY,
    DATE,
    STRICT,
    LOOSE,
    ABSTRACT,
    IMPORTS,
}
use TokenKind as TK;
impl From<TokenKind> for usize {
    fn from(t: TokenKind) -> Self {
        t as usize
    }
}
#[allow(clippy::enum_variant_names)]
#[derive(Clone, Copy, PartialEq)]
pub enum ProdKind {
    PgsP1,
    CreateType1P1,
    CreateType1P2,
    CreateTypeP1,
    CreateTypeP2,
    CreateTypeP3,
    CreateNodeTypeP1,
    CreateEdgeTypeP1,
    CreateGraphTypeP1,
    NodeTypeP1,
    TypeNameOptP1,
    TypeNameOptP2,
    EdgeTypeP1,
    GraphTypeP1,
    GraphTypeModeOptP1,
    GraphTypeModeOptP2,
    GraphTypeElementsOptP1,
    GraphTypeElementsOptP2,
    GraphTypeImportsP1,
    ImportsP1,
    TypeName1P1,
    TypeName1P2,
    GraphTypeModeP1,
    GraphTypeModeP2,
    GraphTypeElementsP1,
    GraphTypeElementsP2,
    GraphTypeElementsP3,
    TypeNameP1,
    EndpointTypeP1,
    LabelPropertySpecP1,
    LabelSpecOptP1,
    LabelSpecOptP2,
    PropertySpecOptP1,
    PropertySpecOptP2,
    LabelSpecP1,
    LabelsP1,
    MoreLabelsOptP1,
    MoreLabelsOptP2,
    MoreLabelsAndLabels,
    MoreLabelsOrLabels,
    SingleLabelSingleLabel,
    SingleLabelTypeName,
    PropertySpecP1,
    PropertiesEachOf,
    PropertiesOneOf,
    PropertiesParen,
    PropertiesBaseProperty,
    OPTIONALOptP1,
    OPTIONALOptP2,
    PropertyP1,
    keyP1,
    TypeSpecP1,
    MoreTypesOptP1,
    MoreTypesOptP2,
    MoreTypesIntersectionType,
    MoreTypesUnionType,
    SimpleTypeStringSpec,
    CardOptP1,
    CardOptP2,
    CheckOptP1,
    CheckOptP2,
    SimpleTypeInteger,
    SimpleTypeDate,
    SimpleTypeBool,
    SimpleTypeAny,
    SimpleTypeCond,
    CheckP1,
    CondP1,
    CondP2,
    CondGT,
    CondGE,
    CondLT,
    CondLE,
    CondEQ,
    CondRegex,
    CondAnd,
    CondOR,
    CondNot,
    CondParenCond,
    CardOptional,
    CardOneOrMore,
    CardZeroOrMore,
    CardRange,
    MaxP1,
    MaxStar,
    SingleValueStringValue,
    SingleValueNumberValue,
    SingleValueDateValue,
    SingleValueBooleanValue,
    BOOLP1,
    BOOLP2,
    LayoutP1,
    LayoutItem1P1,
    LayoutItem1P2,
    LayoutItem0P1,
    LayoutItem0P2,
    LayoutItemP1,
    LayoutItemP2,
    CommentP1,
    CommentP2,
    CorncsP1,
    Cornc1P1,
    Cornc1P2,
    Cornc0P1,
    Cornc0P2,
    CorncP1,
    CorncP2,
    CorncP3,
}
use ProdKind as PK;
impl std::fmt::Debug for ProdKind {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let name = match self {
            ProdKind::PgsP1 => "Pgs: CreateType1",
            ProdKind::CreateType1P1 => "CreateType1: CreateType1 SEMICOLON CreateType",
            ProdKind::CreateType1P2 => "CreateType1: CreateType",
            ProdKind::CreateTypeP1 => "CreateType: CreateNodeType",
            ProdKind::CreateTypeP2 => "CreateType: CreateEdgeType",
            ProdKind::CreateTypeP3 => "CreateType: CreateGraphType",
            ProdKind::CreateNodeTypeP1 => "CreateNodeType: CREATE NODE TYPE NodeType",
            ProdKind::CreateEdgeTypeP1 => "CreateEdgeType: CREATE EDGE TYPE EdgeType",
            ProdKind::CreateGraphTypeP1 => "CreateGraphType: CREATE GRAPH TYPE GraphType",
            ProdKind::NodeTypeP1 => {
                "NodeType: OPEN_PAREN TypeNameOpt LabelPropertySpec CLOSE_PAREN"
            }
            ProdKind::TypeNameOptP1 => "TypeNameOpt: TypeName",
            ProdKind::TypeNameOptP2 => "TypeNameOpt: ",
            ProdKind::EdgeTypeP1 => {
                "EdgeType: EndpointType OPEN_ARROW TypeNameOpt LabelPropertySpec CLOSE_ARROW EndpointType"
            }
            ProdKind::GraphTypeP1 => {
                "GraphType: TypeName GraphTypeModeOpt OPEN_CURLY GraphTypeElementsOpt CLOSE_CURLY"
            }
            ProdKind::GraphTypeModeOptP1 => "GraphTypeModeOpt: GraphTypeMode",
            ProdKind::GraphTypeModeOptP2 => "GraphTypeModeOpt: ",
            ProdKind::GraphTypeElementsOptP1 => "GraphTypeElementsOpt: GraphTypeElements",
            ProdKind::GraphTypeElementsOptP2 => "GraphTypeElementsOpt: ",
            ProdKind::GraphTypeImportsP1 => "GraphTypeImports: IMPORTS Imports",
            ProdKind::ImportsP1 => "Imports: TypeName1",
            ProdKind::TypeName1P1 => "TypeName1: TypeName1 COMMA TypeName",
            ProdKind::TypeName1P2 => "TypeName1: TypeName",
            ProdKind::GraphTypeModeP1 => "GraphTypeMode: STRICT",
            ProdKind::GraphTypeModeP2 => "GraphTypeMode: LOOSE",
            ProdKind::GraphTypeElementsP1 => "GraphTypeElements: TypeName",
            ProdKind::GraphTypeElementsP2 => "GraphTypeElements: NodeType",
            ProdKind::GraphTypeElementsP3 => "GraphTypeElements: EdgeType",
            ProdKind::TypeNameP1 => "TypeName: IDENTIFIER",
            ProdKind::EndpointTypeP1 => {
                "EndpointType: OPEN_PAREN LabelPropertySpec CLOSE_PAREN"
            }
            ProdKind::LabelPropertySpecP1 => {
                "LabelPropertySpec: LabelSpecOpt PropertySpecOpt"
            }
            ProdKind::LabelSpecOptP1 => "LabelSpecOpt: LabelSpec",
            ProdKind::LabelSpecOptP2 => "LabelSpecOpt: ",
            ProdKind::PropertySpecOptP1 => "PropertySpecOpt: PropertySpec",
            ProdKind::PropertySpecOptP2 => "PropertySpecOpt: ",
            ProdKind::LabelSpecP1 => "LabelSpec: COLON Labels",
            ProdKind::LabelsP1 => "Labels: SingleLabel MoreLabelsOpt",
            ProdKind::MoreLabelsOptP1 => "MoreLabelsOpt: MoreLabels",
            ProdKind::MoreLabelsOptP2 => "MoreLabelsOpt: ",
            ProdKind::MoreLabelsAndLabels => {
                "MoreLabels: AMPERSAND SingleLabel MoreLabelsOpt"
            }
            ProdKind::MoreLabelsOrLabels => "MoreLabels: BAR SingleLabel MoreLabelsOpt",
            ProdKind::SingleLabelSingleLabel => "SingleLabel: IDENTIFIER",
            ProdKind::SingleLabelTypeName => "SingleLabel: AT IDENTIFIER",
            ProdKind::PropertySpecP1 => "PropertySpec: OPEN_CURLY Properties CLOSE_CURLY",
            ProdKind::PropertiesEachOf => "Properties: Properties COMMA Properties",
            ProdKind::PropertiesOneOf => "Properties: Properties DOUBLE_BAR Properties",
            ProdKind::PropertiesParen => "Properties: OPEN_PAREN Properties CLOSE_PAREN",
            ProdKind::PropertiesBaseProperty => "Properties: OPTIONALOpt Property",
            ProdKind::OPTIONALOptP1 => "OPTIONALOpt: OPTIONAL",
            ProdKind::OPTIONALOptP2 => "OPTIONALOpt: ",
            ProdKind::PropertyP1 => "Property: key COLON TypeSpec",
            ProdKind::keyP1 => "key: IDENTIFIER",
            ProdKind::TypeSpecP1 => "TypeSpec: SimpleType MoreTypesOpt",
            ProdKind::MoreTypesOptP1 => "MoreTypesOpt: MoreTypes",
            ProdKind::MoreTypesOptP2 => "MoreTypesOpt: ",
            ProdKind::MoreTypesIntersectionType => {
                "MoreTypes: AMPERSAND SimpleType MoreTypesOpt"
            }
            ProdKind::MoreTypesUnionType => "MoreTypes: BAR SimpleType MoreTypesOpt",
            ProdKind::SimpleTypeStringSpec => "SimpleType: STRING_NAME CardOpt CheckOpt",
            ProdKind::CardOptP1 => "CardOpt: Card",
            ProdKind::CardOptP2 => "CardOpt: ",
            ProdKind::CheckOptP1 => "CheckOpt: Check",
            ProdKind::CheckOptP2 => "CheckOpt: ",
            ProdKind::SimpleTypeInteger => "SimpleType: INTEGER_NAME CardOpt CheckOpt",
            ProdKind::SimpleTypeDate => "SimpleType: DATE_NAME CardOpt CheckOpt",
            ProdKind::SimpleTypeBool => "SimpleType: BOOL_NAME CardOpt CheckOpt",
            ProdKind::SimpleTypeAny => "SimpleType: ANY CheckOpt",
            ProdKind::SimpleTypeCond => "SimpleType: CHECK Cond",
            ProdKind::CheckP1 => "Check: CHECK Cond",
            ProdKind::CondP1 => "Cond: TRUE",
            ProdKind::CondP2 => "Cond: FALSE",
            ProdKind::CondGT => "Cond: GT SingleValue",
            ProdKind::CondGE => "Cond: GE SingleValue",
            ProdKind::CondLT => "Cond: LT SingleValue",
            ProdKind::CondLE => "Cond: LE SingleValue",
            ProdKind::CondEQ => "Cond: EQUALS SingleValue",
            ProdKind::CondRegex => "Cond: REGEX QUOTED_STRING",
            ProdKind::CondAnd => "Cond: Cond AND Cond",
            ProdKind::CondOR => "Cond: Cond OR Cond",
            ProdKind::CondNot => "Cond: NOT Cond",
            ProdKind::CondParenCond => "Cond: OPEN_PAREN Cond CLOSE_PAREN",
            ProdKind::CardOptional => "Card: QUESTION",
            ProdKind::CardOneOrMore => "Card: PLUS",
            ProdKind::CardZeroOrMore => "Card: STAR",
            ProdKind::CardRange => "Card: OPEN_CURLY NUMBER COMMA Max CLOSE_CURLY",
            ProdKind::MaxP1 => "Max: NUMBER",
            ProdKind::MaxStar => "Max: STAR",
            ProdKind::SingleValueStringValue => "SingleValue: QUOTED_STRING",
            ProdKind::SingleValueNumberValue => "SingleValue: NUMBER",
            ProdKind::SingleValueDateValue => "SingleValue: DATE QUOTED_STRING",
            ProdKind::SingleValueBooleanValue => "SingleValue: BOOL",
            ProdKind::BOOLP1 => "BOOL: TRUE",
            ProdKind::BOOLP2 => "BOOL: FALSE",
            ProdKind::LayoutP1 => "Layout: LayoutItem0",
            ProdKind::LayoutItem1P1 => "LayoutItem1: LayoutItem1 LayoutItem",
            ProdKind::LayoutItem1P2 => "LayoutItem1: LayoutItem",
            ProdKind::LayoutItem0P1 => "LayoutItem0: LayoutItem1",
            ProdKind::LayoutItem0P2 => "LayoutItem0: ",
            ProdKind::LayoutItemP1 => "LayoutItem: WS",
            ProdKind::LayoutItemP2 => "LayoutItem: Comment",
            ProdKind::CommentP1 => "Comment: START_COMMENT Corncs END_COMMENT",
            ProdKind::CommentP2 => "Comment: CommentLine",
            ProdKind::CorncsP1 => "Corncs: Cornc0",
            ProdKind::Cornc1P1 => "Cornc1: Cornc1 Cornc",
            ProdKind::Cornc1P2 => "Cornc1: Cornc",
            ProdKind::Cornc0P1 => "Cornc0: Cornc1",
            ProdKind::Cornc0P2 => "Cornc0: ",
            ProdKind::CorncP1 => "Cornc: Comment",
            ProdKind::CorncP2 => "Cornc: NotComment",
            ProdKind::CorncP3 => "Cornc: WS",
        };
        write!(f, "{name}")
    }
}
#[allow(clippy::upper_case_acronyms)]
#[allow(dead_code)]
#[derive(Clone, Copy, Debug)]
pub enum NonTermKind {
    EMPTY,
    AUG,
    AUGL,
    Pgs,
    CreateType1,
    CreateType,
    CreateNodeType,
    CreateEdgeType,
    CreateGraphType,
    NodeType,
    TypeNameOpt,
    EdgeType,
    GraphType,
    GraphTypeModeOpt,
    GraphTypeElementsOpt,
    GraphTypeImports,
    Imports,
    TypeName1,
    GraphTypeMode,
    GraphTypeElements,
    TypeName,
    EndpointType,
    LabelPropertySpec,
    LabelSpecOpt,
    PropertySpecOpt,
    LabelSpec,
    Labels,
    MoreLabelsOpt,
    MoreLabels,
    SingleLabel,
    PropertySpec,
    Properties,
    OPTIONALOpt,
    Property,
    key,
    TypeSpec,
    MoreTypesOpt,
    MoreTypes,
    SimpleType,
    CardOpt,
    CheckOpt,
    Check,
    Cond,
    Card,
    Max,
    SingleValue,
    BOOL,
    Layout,
    LayoutItem1,
    LayoutItem0,
    LayoutItem,
    Comment,
    Corncs,
    Cornc1,
    Cornc0,
    Cornc,
}
impl From<ProdKind> for NonTermKind {
    fn from(prod: ProdKind) -> Self {
        match prod {
            ProdKind::PgsP1 => NonTermKind::Pgs,
            ProdKind::CreateType1P1 => NonTermKind::CreateType1,
            ProdKind::CreateType1P2 => NonTermKind::CreateType1,
            ProdKind::CreateTypeP1 => NonTermKind::CreateType,
            ProdKind::CreateTypeP2 => NonTermKind::CreateType,
            ProdKind::CreateTypeP3 => NonTermKind::CreateType,
            ProdKind::CreateNodeTypeP1 => NonTermKind::CreateNodeType,
            ProdKind::CreateEdgeTypeP1 => NonTermKind::CreateEdgeType,
            ProdKind::CreateGraphTypeP1 => NonTermKind::CreateGraphType,
            ProdKind::NodeTypeP1 => NonTermKind::NodeType,
            ProdKind::TypeNameOptP1 => NonTermKind::TypeNameOpt,
            ProdKind::TypeNameOptP2 => NonTermKind::TypeNameOpt,
            ProdKind::EdgeTypeP1 => NonTermKind::EdgeType,
            ProdKind::GraphTypeP1 => NonTermKind::GraphType,
            ProdKind::GraphTypeModeOptP1 => NonTermKind::GraphTypeModeOpt,
            ProdKind::GraphTypeModeOptP2 => NonTermKind::GraphTypeModeOpt,
            ProdKind::GraphTypeElementsOptP1 => NonTermKind::GraphTypeElementsOpt,
            ProdKind::GraphTypeElementsOptP2 => NonTermKind::GraphTypeElementsOpt,
            ProdKind::GraphTypeImportsP1 => NonTermKind::GraphTypeImports,
            ProdKind::ImportsP1 => NonTermKind::Imports,
            ProdKind::TypeName1P1 => NonTermKind::TypeName1,
            ProdKind::TypeName1P2 => NonTermKind::TypeName1,
            ProdKind::GraphTypeModeP1 => NonTermKind::GraphTypeMode,
            ProdKind::GraphTypeModeP2 => NonTermKind::GraphTypeMode,
            ProdKind::GraphTypeElementsP1 => NonTermKind::GraphTypeElements,
            ProdKind::GraphTypeElementsP2 => NonTermKind::GraphTypeElements,
            ProdKind::GraphTypeElementsP3 => NonTermKind::GraphTypeElements,
            ProdKind::TypeNameP1 => NonTermKind::TypeName,
            ProdKind::EndpointTypeP1 => NonTermKind::EndpointType,
            ProdKind::LabelPropertySpecP1 => NonTermKind::LabelPropertySpec,
            ProdKind::LabelSpecOptP1 => NonTermKind::LabelSpecOpt,
            ProdKind::LabelSpecOptP2 => NonTermKind::LabelSpecOpt,
            ProdKind::PropertySpecOptP1 => NonTermKind::PropertySpecOpt,
            ProdKind::PropertySpecOptP2 => NonTermKind::PropertySpecOpt,
            ProdKind::LabelSpecP1 => NonTermKind::LabelSpec,
            ProdKind::LabelsP1 => NonTermKind::Labels,
            ProdKind::MoreLabelsOptP1 => NonTermKind::MoreLabelsOpt,
            ProdKind::MoreLabelsOptP2 => NonTermKind::MoreLabelsOpt,
            ProdKind::MoreLabelsAndLabels => NonTermKind::MoreLabels,
            ProdKind::MoreLabelsOrLabels => NonTermKind::MoreLabels,
            ProdKind::SingleLabelSingleLabel => NonTermKind::SingleLabel,
            ProdKind::SingleLabelTypeName => NonTermKind::SingleLabel,
            ProdKind::PropertySpecP1 => NonTermKind::PropertySpec,
            ProdKind::PropertiesEachOf => NonTermKind::Properties,
            ProdKind::PropertiesOneOf => NonTermKind::Properties,
            ProdKind::PropertiesParen => NonTermKind::Properties,
            ProdKind::PropertiesBaseProperty => NonTermKind::Properties,
            ProdKind::OPTIONALOptP1 => NonTermKind::OPTIONALOpt,
            ProdKind::OPTIONALOptP2 => NonTermKind::OPTIONALOpt,
            ProdKind::PropertyP1 => NonTermKind::Property,
            ProdKind::keyP1 => NonTermKind::key,
            ProdKind::TypeSpecP1 => NonTermKind::TypeSpec,
            ProdKind::MoreTypesOptP1 => NonTermKind::MoreTypesOpt,
            ProdKind::MoreTypesOptP2 => NonTermKind::MoreTypesOpt,
            ProdKind::MoreTypesIntersectionType => NonTermKind::MoreTypes,
            ProdKind::MoreTypesUnionType => NonTermKind::MoreTypes,
            ProdKind::SimpleTypeStringSpec => NonTermKind::SimpleType,
            ProdKind::CardOptP1 => NonTermKind::CardOpt,
            ProdKind::CardOptP2 => NonTermKind::CardOpt,
            ProdKind::CheckOptP1 => NonTermKind::CheckOpt,
            ProdKind::CheckOptP2 => NonTermKind::CheckOpt,
            ProdKind::SimpleTypeInteger => NonTermKind::SimpleType,
            ProdKind::SimpleTypeDate => NonTermKind::SimpleType,
            ProdKind::SimpleTypeBool => NonTermKind::SimpleType,
            ProdKind::SimpleTypeAny => NonTermKind::SimpleType,
            ProdKind::SimpleTypeCond => NonTermKind::SimpleType,
            ProdKind::CheckP1 => NonTermKind::Check,
            ProdKind::CondP1 => NonTermKind::Cond,
            ProdKind::CondP2 => NonTermKind::Cond,
            ProdKind::CondGT => NonTermKind::Cond,
            ProdKind::CondGE => NonTermKind::Cond,
            ProdKind::CondLT => NonTermKind::Cond,
            ProdKind::CondLE => NonTermKind::Cond,
            ProdKind::CondEQ => NonTermKind::Cond,
            ProdKind::CondRegex => NonTermKind::Cond,
            ProdKind::CondAnd => NonTermKind::Cond,
            ProdKind::CondOR => NonTermKind::Cond,
            ProdKind::CondNot => NonTermKind::Cond,
            ProdKind::CondParenCond => NonTermKind::Cond,
            ProdKind::CardOptional => NonTermKind::Card,
            ProdKind::CardOneOrMore => NonTermKind::Card,
            ProdKind::CardZeroOrMore => NonTermKind::Card,
            ProdKind::CardRange => NonTermKind::Card,
            ProdKind::MaxP1 => NonTermKind::Max,
            ProdKind::MaxStar => NonTermKind::Max,
            ProdKind::SingleValueStringValue => NonTermKind::SingleValue,
            ProdKind::SingleValueNumberValue => NonTermKind::SingleValue,
            ProdKind::SingleValueDateValue => NonTermKind::SingleValue,
            ProdKind::SingleValueBooleanValue => NonTermKind::SingleValue,
            ProdKind::BOOLP1 => NonTermKind::BOOL,
            ProdKind::BOOLP2 => NonTermKind::BOOL,
            ProdKind::LayoutP1 => NonTermKind::Layout,
            ProdKind::LayoutItem1P1 => NonTermKind::LayoutItem1,
            ProdKind::LayoutItem1P2 => NonTermKind::LayoutItem1,
            ProdKind::LayoutItem0P1 => NonTermKind::LayoutItem0,
            ProdKind::LayoutItem0P2 => NonTermKind::LayoutItem0,
            ProdKind::LayoutItemP1 => NonTermKind::LayoutItem,
            ProdKind::LayoutItemP2 => NonTermKind::LayoutItem,
            ProdKind::CommentP1 => NonTermKind::Comment,
            ProdKind::CommentP2 => NonTermKind::Comment,
            ProdKind::CorncsP1 => NonTermKind::Corncs,
            ProdKind::Cornc1P1 => NonTermKind::Cornc1,
            ProdKind::Cornc1P2 => NonTermKind::Cornc1,
            ProdKind::Cornc0P1 => NonTermKind::Cornc0,
            ProdKind::Cornc0P2 => NonTermKind::Cornc0,
            ProdKind::CorncP1 => NonTermKind::Cornc,
            ProdKind::CorncP2 => NonTermKind::Cornc,
            ProdKind::CorncP3 => NonTermKind::Cornc,
        }
    }
}
#[allow(clippy::enum_variant_names)]
#[derive(Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum State {
    #[default]
    AUGS0,
    CREATES1,
    PgsS2,
    CreateType1S3,
    CreateTypeS4,
    CreateNodeTypeS5,
    CreateEdgeTypeS6,
    CreateGraphTypeS7,
    NODES8,
    EDGES9,
    GRAPHS10,
    SEMICOLONS11,
    TYPES12,
    TYPES13,
    TYPES14,
    CreateTypeS15,
    OPEN_PARENS16,
    NodeTypeS17,
    OPEN_PARENS18,
    EdgeTypeS19,
    EndpointTypeS20,
    IDENTIFIERS21,
    GraphTypeS22,
    TypeNameS23,
    TypeNameOptS24,
    TypeNameS25,
    COLONS26,
    LabelPropertySpecS27,
    LabelSpecOptS28,
    LabelSpecS29,
    OPEN_ARROWS30,
    STRICTS31,
    LOOSES32,
    GraphTypeModeOptS33,
    GraphTypeModeS34,
    LabelPropertySpecS35,
    IDENTIFIERS36,
    ATS37,
    LabelsS38,
    SingleLabelS39,
    CLOSE_PARENS40,
    OPEN_CURLYS41,
    PropertySpecOptS42,
    PropertySpecS43,
    TypeNameOptS44,
    OPEN_CURLYS45,
    CLOSE_PARENS46,
    IDENTIFIERS47,
    BARS48,
    AMPERSANDS49,
    MoreLabelsOptS50,
    MoreLabelsS51,
    OPEN_PARENS52,
    OPTIONALS53,
    PropertiesS54,
    OPTIONALOptS55,
    LabelPropertySpecS56,
    OPEN_PARENS57,
    NodeTypeS58,
    EdgeTypeS59,
    GraphTypeElementsOptS60,
    GraphTypeElementsS61,
    TypeNameS62,
    SingleLabelS63,
    SingleLabelS64,
    PropertiesS65,
    CLOSE_CURLYS66,
    COMMAS67,
    DOUBLE_BARS68,
    IDENTIFIERS69,
    PropertyS70,
    keyS71,
    CLOSE_ARROWS72,
    CLOSE_CURLYS73,
    MoreLabelsOptS74,
    MoreLabelsOptS75,
    CLOSE_PARENS76,
    PropertiesS77,
    PropertiesS78,
    COLONS79,
    EndpointTypeS80,
    INTEGER_NAMES81,
    BOOL_NAMES82,
    STRING_NAMES83,
    DATE_NAMES84,
    CHECKS85,
    ANYS86,
    TypeSpecS87,
    SimpleTypeS88,
    OPEN_CURLYS89,
    PLUSS90,
    STARS91,
    QUESTIONS92,
    CardOptS93,
    CardS94,
    CardOptS95,
    CardOptS96,
    CardOptS97,
    OPEN_PARENS98,
    TRUES99,
    FALSES100,
    GTS101,
    LTS102,
    GES103,
    LES104,
    EQUALSS105,
    REGEXS106,
    NOTS107,
    CondS108,
    CHECKS109,
    CheckOptS110,
    CheckS111,
    BARS112,
    AMPERSANDS113,
    MoreTypesOptS114,
    MoreTypesS115,
    NUMBERS116,
    CheckOptS117,
    CheckOptS118,
    CheckOptS119,
    CheckOptS120,
    CondS121,
    NUMBERS122,
    TRUES123,
    FALSES124,
    QUOTED_STRINGS125,
    DATES126,
    SingleValueS127,
    BOOLS128,
    SingleValueS129,
    SingleValueS130,
    SingleValueS131,
    SingleValueS132,
    QUOTED_STRINGS133,
    CondS134,
    ANDS135,
    ORS136,
    CondS137,
    SimpleTypeS138,
    SimpleTypeS139,
    COMMAS140,
    CLOSE_PARENS141,
    QUOTED_STRINGS142,
    CondS143,
    CondS144,
    MoreTypesOptS145,
    MoreTypesOptS146,
    STARS147,
    NUMBERS148,
    MaxS149,
    CLOSE_CURLYS150,
    AUGLS151,
    WSS152,
    CommentLineS153,
    START_COMMENTS154,
    LayoutS155,
    LayoutItem1S156,
    LayoutItem0S157,
    LayoutItemS158,
    CommentS159,
    WSS160,
    NotCommentS161,
    CommentS162,
    CorncsS163,
    Cornc1S164,
    Cornc0S165,
    CorncS166,
    LayoutItemS167,
    END_COMMENTS168,
    CorncS169,
}
impl StateT for State {
    fn default_layout() -> Option<Self> {
        Some(State::AUGLS151)
    }
}
impl From<State> for usize {
    fn from(s: State) -> Self {
        s as usize
    }
}
impl std::fmt::Debug for State {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let name = match self {
            State::AUGS0 => "0:AUG",
            State::CREATES1 => "1:CREATE",
            State::PgsS2 => "2:Pgs",
            State::CreateType1S3 => "3:CreateType1",
            State::CreateTypeS4 => "4:CreateType",
            State::CreateNodeTypeS5 => "5:CreateNodeType",
            State::CreateEdgeTypeS6 => "6:CreateEdgeType",
            State::CreateGraphTypeS7 => "7:CreateGraphType",
            State::NODES8 => "8:NODE",
            State::EDGES9 => "9:EDGE",
            State::GRAPHS10 => "10:GRAPH",
            State::SEMICOLONS11 => "11:SEMICOLON",
            State::TYPES12 => "12:TYPE",
            State::TYPES13 => "13:TYPE",
            State::TYPES14 => "14:TYPE",
            State::CreateTypeS15 => "15:CreateType",
            State::OPEN_PARENS16 => "16:OPEN_PAREN",
            State::NodeTypeS17 => "17:NodeType",
            State::OPEN_PARENS18 => "18:OPEN_PAREN",
            State::EdgeTypeS19 => "19:EdgeType",
            State::EndpointTypeS20 => "20:EndpointType",
            State::IDENTIFIERS21 => "21:IDENTIFIER",
            State::GraphTypeS22 => "22:GraphType",
            State::TypeNameS23 => "23:TypeName",
            State::TypeNameOptS24 => "24:TypeNameOpt",
            State::TypeNameS25 => "25:TypeName",
            State::COLONS26 => "26:COLON",
            State::LabelPropertySpecS27 => "27:LabelPropertySpec",
            State::LabelSpecOptS28 => "28:LabelSpecOpt",
            State::LabelSpecS29 => "29:LabelSpec",
            State::OPEN_ARROWS30 => "30:OPEN_ARROW",
            State::STRICTS31 => "31:STRICT",
            State::LOOSES32 => "32:LOOSE",
            State::GraphTypeModeOptS33 => "33:GraphTypeModeOpt",
            State::GraphTypeModeS34 => "34:GraphTypeMode",
            State::LabelPropertySpecS35 => "35:LabelPropertySpec",
            State::IDENTIFIERS36 => "36:IDENTIFIER",
            State::ATS37 => "37:AT",
            State::LabelsS38 => "38:Labels",
            State::SingleLabelS39 => "39:SingleLabel",
            State::CLOSE_PARENS40 => "40:CLOSE_PAREN",
            State::OPEN_CURLYS41 => "41:OPEN_CURLY",
            State::PropertySpecOptS42 => "42:PropertySpecOpt",
            State::PropertySpecS43 => "43:PropertySpec",
            State::TypeNameOptS44 => "44:TypeNameOpt",
            State::OPEN_CURLYS45 => "45:OPEN_CURLY",
            State::CLOSE_PARENS46 => "46:CLOSE_PAREN",
            State::IDENTIFIERS47 => "47:IDENTIFIER",
            State::BARS48 => "48:BAR",
            State::AMPERSANDS49 => "49:AMPERSAND",
            State::MoreLabelsOptS50 => "50:MoreLabelsOpt",
            State::MoreLabelsS51 => "51:MoreLabels",
            State::OPEN_PARENS52 => "52:OPEN_PAREN",
            State::OPTIONALS53 => "53:OPTIONAL",
            State::PropertiesS54 => "54:Properties",
            State::OPTIONALOptS55 => "55:OPTIONALOpt",
            State::LabelPropertySpecS56 => "56:LabelPropertySpec",
            State::OPEN_PARENS57 => "57:OPEN_PAREN",
            State::NodeTypeS58 => "58:NodeType",
            State::EdgeTypeS59 => "59:EdgeType",
            State::GraphTypeElementsOptS60 => "60:GraphTypeElementsOpt",
            State::GraphTypeElementsS61 => "61:GraphTypeElements",
            State::TypeNameS62 => "62:TypeName",
            State::SingleLabelS63 => "63:SingleLabel",
            State::SingleLabelS64 => "64:SingleLabel",
            State::PropertiesS65 => "65:Properties",
            State::CLOSE_CURLYS66 => "66:CLOSE_CURLY",
            State::COMMAS67 => "67:COMMA",
            State::DOUBLE_BARS68 => "68:DOUBLE_BAR",
            State::IDENTIFIERS69 => "69:IDENTIFIER",
            State::PropertyS70 => "70:Property",
            State::keyS71 => "71:key",
            State::CLOSE_ARROWS72 => "72:CLOSE_ARROW",
            State::CLOSE_CURLYS73 => "73:CLOSE_CURLY",
            State::MoreLabelsOptS74 => "74:MoreLabelsOpt",
            State::MoreLabelsOptS75 => "75:MoreLabelsOpt",
            State::CLOSE_PARENS76 => "76:CLOSE_PAREN",
            State::PropertiesS77 => "77:Properties",
            State::PropertiesS78 => "78:Properties",
            State::COLONS79 => "79:COLON",
            State::EndpointTypeS80 => "80:EndpointType",
            State::INTEGER_NAMES81 => "81:INTEGER_NAME",
            State::BOOL_NAMES82 => "82:BOOL_NAME",
            State::STRING_NAMES83 => "83:STRING_NAME",
            State::DATE_NAMES84 => "84:DATE_NAME",
            State::CHECKS85 => "85:CHECK",
            State::ANYS86 => "86:ANY",
            State::TypeSpecS87 => "87:TypeSpec",
            State::SimpleTypeS88 => "88:SimpleType",
            State::OPEN_CURLYS89 => "89:OPEN_CURLY",
            State::PLUSS90 => "90:PLUS",
            State::STARS91 => "91:STAR",
            State::QUESTIONS92 => "92:QUESTION",
            State::CardOptS93 => "93:CardOpt",
            State::CardS94 => "94:Card",
            State::CardOptS95 => "95:CardOpt",
            State::CardOptS96 => "96:CardOpt",
            State::CardOptS97 => "97:CardOpt",
            State::OPEN_PARENS98 => "98:OPEN_PAREN",
            State::TRUES99 => "99:TRUE",
            State::FALSES100 => "100:FALSE",
            State::GTS101 => "101:GT",
            State::LTS102 => "102:LT",
            State::GES103 => "103:GE",
            State::LES104 => "104:LE",
            State::EQUALSS105 => "105:EQUALS",
            State::REGEXS106 => "106:REGEX",
            State::NOTS107 => "107:NOT",
            State::CondS108 => "108:Cond",
            State::CHECKS109 => "109:CHECK",
            State::CheckOptS110 => "110:CheckOpt",
            State::CheckS111 => "111:Check",
            State::BARS112 => "112:BAR",
            State::AMPERSANDS113 => "113:AMPERSAND",
            State::MoreTypesOptS114 => "114:MoreTypesOpt",
            State::MoreTypesS115 => "115:MoreTypes",
            State::NUMBERS116 => "116:NUMBER",
            State::CheckOptS117 => "117:CheckOpt",
            State::CheckOptS118 => "118:CheckOpt",
            State::CheckOptS119 => "119:CheckOpt",
            State::CheckOptS120 => "120:CheckOpt",
            State::CondS121 => "121:Cond",
            State::NUMBERS122 => "122:NUMBER",
            State::TRUES123 => "123:TRUE",
            State::FALSES124 => "124:FALSE",
            State::QUOTED_STRINGS125 => "125:QUOTED_STRING",
            State::DATES126 => "126:DATE",
            State::SingleValueS127 => "127:SingleValue",
            State::BOOLS128 => "128:BOOL",
            State::SingleValueS129 => "129:SingleValue",
            State::SingleValueS130 => "130:SingleValue",
            State::SingleValueS131 => "131:SingleValue",
            State::SingleValueS132 => "132:SingleValue",
            State::QUOTED_STRINGS133 => "133:QUOTED_STRING",
            State::CondS134 => "134:Cond",
            State::ANDS135 => "135:AND",
            State::ORS136 => "136:OR",
            State::CondS137 => "137:Cond",
            State::SimpleTypeS138 => "138:SimpleType",
            State::SimpleTypeS139 => "139:SimpleType",
            State::COMMAS140 => "140:COMMA",
            State::CLOSE_PARENS141 => "141:CLOSE_PAREN",
            State::QUOTED_STRINGS142 => "142:QUOTED_STRING",
            State::CondS143 => "143:Cond",
            State::CondS144 => "144:Cond",
            State::MoreTypesOptS145 => "145:MoreTypesOpt",
            State::MoreTypesOptS146 => "146:MoreTypesOpt",
            State::STARS147 => "147:STAR",
            State::NUMBERS148 => "148:NUMBER",
            State::MaxS149 => "149:Max",
            State::CLOSE_CURLYS150 => "150:CLOSE_CURLY",
            State::AUGLS151 => "151:AUGL",
            State::WSS152 => "152:WS",
            State::CommentLineS153 => "153:CommentLine",
            State::START_COMMENTS154 => "154:START_COMMENT",
            State::LayoutS155 => "155:Layout",
            State::LayoutItem1S156 => "156:LayoutItem1",
            State::LayoutItem0S157 => "157:LayoutItem0",
            State::LayoutItemS158 => "158:LayoutItem",
            State::CommentS159 => "159:Comment",
            State::WSS160 => "160:WS",
            State::NotCommentS161 => "161:NotComment",
            State::CommentS162 => "162:Comment",
            State::CorncsS163 => "163:Corncs",
            State::Cornc1S164 => "164:Cornc1",
            State::Cornc0S165 => "165:Cornc0",
            State::CorncS166 => "166:Cornc",
            State::LayoutItemS167 => "167:LayoutItem",
            State::END_COMMENTS168 => "168:END_COMMENT",
            State::CorncS169 => "169:Cornc",
        };
        write!(f, "{name}")
    }
}
#[derive(Debug)]
pub enum Symbol {
    Terminal(Terminal),
    NonTerminal(NonTerminal),
}
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug)]
pub enum Terminal {
    IDENTIFIER(pgs_actions::IDENTIFIER),
    SEMICOLON,
    CREATE,
    NODE,
    EDGE,
    GRAPH,
    TYPE,
    OPEN_PAREN,
    CLOSE_PAREN,
    OPEN_ARROW,
    CLOSE_ARROW,
    OPEN_CURLY,
    CLOSE_CURLY,
    COLON,
    COMMA,
    BAR,
    DOUBLE_BAR,
    PLUS,
    STAR,
    QUESTION,
    INTEGER_NAME,
    BOOL_NAME,
    STRING_NAME,
    DATE_NAME,
    NUMBER(pgs_actions::NUMBER),
    OPTIONAL,
    AMPERSAND,
    AT,
    CHECK,
    TRUE,
    FALSE,
    GT,
    LT,
    GE,
    LE,
    EQUALS,
    QUOTED_STRING(pgs_actions::QUOTED_STRING),
    REGEX,
    AND,
    OR,
    NOT,
    ANY,
    DATE,
    STRICT,
    LOOSE,
}
#[derive(Debug)]
pub enum NonTerminal {
    Pgs(pgs_actions::Pgs),
    CreateType1(pgs_actions::CreateType1),
    CreateType(pgs_actions::CreateType),
    CreateNodeType(pgs_actions::CreateNodeType),
    CreateEdgeType(pgs_actions::CreateEdgeType),
    CreateGraphType(pgs_actions::CreateGraphType),
    NodeType(pgs_actions::NodeType),
    TypeNameOpt(pgs_actions::TypeNameOpt),
    EdgeType(pgs_actions::EdgeType),
    GraphType(pgs_actions::GraphType),
    GraphTypeModeOpt(pgs_actions::GraphTypeModeOpt),
    GraphTypeElementsOpt(pgs_actions::GraphTypeElementsOpt),
    GraphTypeMode(pgs_actions::GraphTypeMode),
    GraphTypeElements(pgs_actions::GraphTypeElements),
    TypeName(pgs_actions::TypeName),
    EndpointType(pgs_actions::EndpointType),
    LabelPropertySpec(pgs_actions::LabelPropertySpec),
    LabelSpecOpt(pgs_actions::LabelSpecOpt),
    PropertySpecOpt(pgs_actions::PropertySpecOpt),
    LabelSpec(pgs_actions::LabelSpec),
    Labels(pgs_actions::Labels),
    MoreLabelsOpt(pgs_actions::MoreLabelsOpt),
    MoreLabels(pgs_actions::MoreLabels),
    SingleLabel(pgs_actions::SingleLabel),
    PropertySpec(pgs_actions::PropertySpec),
    Properties(pgs_actions::Properties),
    OPTIONALOpt(pgs_actions::OPTIONALOpt),
    Property(pgs_actions::Property),
    key(pgs_actions::key),
    TypeSpec(pgs_actions::TypeSpec),
    MoreTypesOpt(pgs_actions::MoreTypesOpt),
    MoreTypes(pgs_actions::MoreTypes),
    SimpleType(pgs_actions::SimpleType),
    CardOpt(pgs_actions::CardOpt),
    CheckOpt(pgs_actions::CheckOpt),
    Check(pgs_actions::Check),
    Cond(pgs_actions::Cond),
    Card(pgs_actions::Card),
    Max(pgs_actions::Max),
    SingleValue(pgs_actions::SingleValue),
    BOOL(pgs_actions::BOOL),
}
type ActionFn = fn(token: TokenKind) -> Vec<Action<State, ProdKind>>;
pub struct PgsParserDefinition {
    actions: [ActionFn; STATE_COUNT],
    gotos: [fn(nonterm: NonTermKind) -> State; STATE_COUNT],
    token_kinds: [[Option<(TokenKind, bool)>; MAX_RECOGNIZERS]; STATE_COUNT],
}
fn action_aug_s0(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CREATE => Vec::from(&[Shift(State::CREATES1)]),
        _ => vec![],
    }
}
fn action_create_s1(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NODE => Vec::from(&[Shift(State::NODES8)]),
        TK::EDGE => Vec::from(&[Shift(State::EDGES9)]),
        TK::GRAPH => Vec::from(&[Shift(State::GRAPHS10)]),
        _ => vec![],
    }
}
fn action_pgs_s2(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Accept]),
        _ => vec![],
    }
}
fn action_createtype1_s3(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::PgsP1, 1usize)]),
        TK::SEMICOLON => Vec::from(&[Shift(State::SEMICOLONS11)]),
        _ => vec![],
    }
}
fn action_createtype_s4(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateType1P2, 1usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateType1P2, 1usize)]),
        _ => vec![],
    }
}
fn action_createnodetype_s5(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateTypeP1, 1usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateTypeP1, 1usize)]),
        _ => vec![],
    }
}
fn action_createedgetype_s6(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateTypeP2, 1usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateTypeP2, 1usize)]),
        _ => vec![],
    }
}
fn action_creategraphtype_s7(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateTypeP3, 1usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateTypeP3, 1usize)]),
        _ => vec![],
    }
}
fn action_node_s8(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::TYPE => Vec::from(&[Shift(State::TYPES12)]),
        _ => vec![],
    }
}
fn action_edge_s9(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::TYPE => Vec::from(&[Shift(State::TYPES13)]),
        _ => vec![],
    }
}
fn action_graph_s10(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::TYPE => Vec::from(&[Shift(State::TYPES14)]),
        _ => vec![],
    }
}
fn action_semicolon_s11(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CREATE => Vec::from(&[Shift(State::CREATES1)]),
        _ => vec![],
    }
}
fn action_type_s12(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS16)]),
        _ => vec![],
    }
}
fn action_type_s13(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS18)]),
        _ => vec![],
    }
}
fn action_type_s14(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS21)]),
        _ => vec![],
    }
}
fn action_createtype_s15(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateType1P1, 3usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateType1P1, 3usize)]),
        _ => vec![],
    }
}
fn action_open_paren_s16(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS21)]),
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::TypeNameOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::TypeNameOptP2, 0usize)]),
        TK::COLON => Vec::from(&[Reduce(PK::TypeNameOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_nodetype_s17(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateNodeTypeP1, 4usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateNodeTypeP1, 4usize)]),
        _ => vec![],
    }
}
fn action_open_paren_s18(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::COLON => Vec::from(&[Shift(State::COLONS26)]),
        _ => vec![],
    }
}
fn action_edgetype_s19(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateEdgeTypeP1, 4usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateEdgeTypeP1, 4usize)]),
        _ => vec![],
    }
}
fn action_endpointtype_s20(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_ARROW => Vec::from(&[Shift(State::OPEN_ARROWS30)]),
        _ => vec![],
    }
}
fn action_identifier_s21(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        TK::COLON => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        TK::STRICT => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        TK::LOOSE => Vec::from(&[Reduce(PK::TypeNameP1, 1usize)]),
        _ => vec![],
    }
}
fn action_graphtype_s22(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CreateGraphTypeP1, 4usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::CreateGraphTypeP1, 4usize)]),
        _ => vec![],
    }
}
fn action_typename_s23(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::GraphTypeModeOptP2, 0usize)]),
        TK::STRICT => Vec::from(&[Shift(State::STRICTS31)]),
        TK::LOOSE => Vec::from(&[Shift(State::LOOSES32)]),
        _ => vec![],
    }
}
fn action_typenameopt_s24(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::COLON => Vec::from(&[Shift(State::COLONS26)]),
        _ => vec![],
    }
}
fn action_typename_s25(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::TypeNameOptP1, 1usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::TypeNameOptP1, 1usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::TypeNameOptP1, 1usize)]),
        TK::COLON => Vec::from(&[Reduce(PK::TypeNameOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_colon_s26(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS36)]),
        TK::AT => Vec::from(&[Shift(State::ATS37)]),
        _ => vec![],
    }
}
fn action_labelpropertyspec_s27(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Shift(State::CLOSE_PARENS40)]),
        _ => vec![],
    }
}
fn action_labelspecopt_s28(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertySpecOptP2, 0usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::PropertySpecOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Shift(State::OPEN_CURLYS41)]),
        _ => vec![],
    }
}
fn action_labelspec_s29(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelSpecOptP1, 1usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::LabelSpecOptP1, 1usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelSpecOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_open_arrow_s30(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS21)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::TypeNameOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::TypeNameOptP2, 0usize)]),
        TK::COLON => Vec::from(&[Reduce(PK::TypeNameOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_strict_s31(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::GraphTypeModeP1, 1usize)]),
        _ => vec![],
    }
}
fn action_loose_s32(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::GraphTypeModeP2, 1usize)]),
        _ => vec![],
    }
}
fn action_graphtypemodeopt_s33(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_CURLY => Vec::from(&[Shift(State::OPEN_CURLYS45)]),
        _ => vec![],
    }
}
fn action_graphtypemode_s34(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::GraphTypeModeOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_labelpropertyspec_s35(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Shift(State::CLOSE_PARENS46)]),
        _ => vec![],
    }
}
fn action_identifier_s36(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SingleLabelSingleLabel, 1usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::SingleLabelSingleLabel, 1usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::SingleLabelSingleLabel, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SingleLabelSingleLabel, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SingleLabelSingleLabel, 1usize)]),
        _ => vec![],
    }
}
fn action_at_s37(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS47)]),
        _ => vec![],
    }
}
fn action_labels_s38(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelSpecP1, 2usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::LabelSpecP1, 2usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelSpecP1, 2usize)]),
        _ => vec![],
    }
}
fn action_singlelabel_s39(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Shift(State::BARS48)]),
        TK::AMPERSAND => Vec::from(&[Shift(State::AMPERSANDS49)]),
        _ => vec![],
    }
}
fn action_close_paren_s40(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::EndpointTypeP1, 3usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::EndpointTypeP1, 3usize)]),
        TK::OPEN_ARROW => Vec::from(&[Reduce(PK::EndpointTypeP1, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::EndpointTypeP1, 3usize)]),
        _ => vec![],
    }
}
fn action_open_curly_s41(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Reduce(PK::OPTIONALOptP2, 0usize)]),
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS52)]),
        TK::OPTIONAL => Vec::from(&[Shift(State::OPTIONALS53)]),
        _ => vec![],
    }
}
fn action_propertyspecopt_s42(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelPropertySpecP1, 2usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::LabelPropertySpecP1, 2usize)]),
        _ => vec![],
    }
}
fn action_propertyspec_s43(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertySpecOptP1, 1usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::PropertySpecOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_typenameopt_s44(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::COLON => Vec::from(&[Shift(State::COLONS26)]),
        _ => vec![],
    }
}
fn action_open_curly_s45(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS21)]),
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS57)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::GraphTypeElementsOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_close_paren_s46(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::NodeTypeP1, 4usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::NodeTypeP1, 4usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::NodeTypeP1, 4usize)]),
        _ => vec![],
    }
}
fn action_identifier_s47(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SingleLabelTypeName, 2usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::SingleLabelTypeName, 2usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::SingleLabelTypeName, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SingleLabelTypeName, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SingleLabelTypeName, 2usize)]),
        _ => vec![],
    }
}
fn action_bar_s48(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS36)]),
        TK::AT => Vec::from(&[Shift(State::ATS37)]),
        _ => vec![],
    }
}
fn action_ampersand_s49(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS36)]),
        TK::AT => Vec::from(&[Shift(State::ATS37)]),
        _ => vec![],
    }
}
fn action_morelabelsopt_s50(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelsP1, 2usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::LabelsP1, 2usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelsP1, 2usize)]),
        _ => vec![],
    }
}
fn action_morelabels_s51(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreLabelsOptP1, 1usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::MoreLabelsOptP1, 1usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::MoreLabelsOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_open_paren_s52(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Reduce(PK::OPTIONALOptP2, 0usize)]),
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS52)]),
        TK::OPTIONAL => Vec::from(&[Shift(State::OPTIONALS53)]),
        _ => vec![],
    }
}
fn action_optional_s53(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Reduce(PK::OPTIONALOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_properties_s54(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Shift(State::CLOSE_CURLYS66)]),
        TK::COMMA => Vec::from(&[Shift(State::COMMAS67)]),
        TK::DOUBLE_BAR => Vec::from(&[Shift(State::DOUBLE_BARS68)]),
        _ => vec![],
    }
}
fn action_optionalopt_s55(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS69)]),
        _ => vec![],
    }
}
fn action_labelpropertyspec_s56(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_ARROW => Vec::from(&[Shift(State::CLOSE_ARROWS72)]),
        _ => vec![],
    }
}
fn action_open_paren_s57(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Shift(State::IDENTIFIERS21)]),
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::LabelSpecOptP2, 0usize)]),
        TK::COLON => Vec::from(&[Shift(State::COLONS26)]),
        _ => vec![],
    }
}
fn action_nodetype_s58(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::GraphTypeElementsP2, 1usize)]),
        _ => vec![],
    }
}
fn action_edgetype_s59(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::GraphTypeElementsP3, 1usize)]),
        _ => vec![],
    }
}
fn action_graphtypeelementsopt_s60(
    token_kind: TokenKind,
) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Shift(State::CLOSE_CURLYS73)]),
        _ => vec![],
    }
}
fn action_graphtypeelements_s61(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::GraphTypeElementsOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_typename_s62(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::GraphTypeElementsP1, 1usize)]),
        _ => vec![],
    }
}
fn action_singlelabel_s63(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Shift(State::BARS48)]),
        TK::AMPERSAND => Vec::from(&[Shift(State::AMPERSANDS49)]),
        _ => vec![],
    }
}
fn action_singlelabel_s64(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::MoreLabelsOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Shift(State::BARS48)]),
        TK::AMPERSAND => Vec::from(&[Shift(State::AMPERSANDS49)]),
        _ => vec![],
    }
}
fn action_properties_s65(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Shift(State::CLOSE_PARENS76)]),
        TK::COMMA => Vec::from(&[Shift(State::COMMAS67)]),
        TK::DOUBLE_BAR => Vec::from(&[Shift(State::DOUBLE_BARS68)]),
        _ => vec![],
    }
}
fn action_close_curly_s66(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertySpecP1, 3usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::PropertySpecP1, 3usize)]),
        _ => vec![],
    }
}
fn action_comma_s67(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Reduce(PK::OPTIONALOptP2, 0usize)]),
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS52)]),
        TK::OPTIONAL => Vec::from(&[Shift(State::OPTIONALS53)]),
        _ => vec![],
    }
}
fn action_double_bar_s68(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::IDENTIFIER => Vec::from(&[Reduce(PK::OPTIONALOptP2, 0usize)]),
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS52)]),
        TK::OPTIONAL => Vec::from(&[Shift(State::OPTIONALS53)]),
        _ => vec![],
    }
}
fn action_identifier_s69(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::COLON => Vec::from(&[Reduce(PK::keyP1, 1usize)]),
        _ => vec![],
    }
}
fn action_property_s70(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertiesBaseProperty, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::PropertiesBaseProperty, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::PropertiesBaseProperty, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::PropertiesBaseProperty, 2usize)]),
        _ => vec![],
    }
}
fn action_key_s71(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::COLON => Vec::from(&[Shift(State::COLONS79)]),
        _ => vec![],
    }
}
fn action_close_arrow_s72(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS18)]),
        _ => vec![],
    }
}
fn action_close_curly_s73(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::GraphTypeP1, 5usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::GraphTypeP1, 5usize)]),
        _ => vec![],
    }
}
fn action_morelabelsopt_s74(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreLabelsOrLabels, 3usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::MoreLabelsOrLabels, 3usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::MoreLabelsOrLabels, 3usize)]),
        _ => vec![],
    }
}
fn action_morelabelsopt_s75(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreLabelsAndLabels, 3usize)]),
        TK::CLOSE_ARROW => Vec::from(&[Reduce(PK::MoreLabelsAndLabels, 3usize)]),
        TK::OPEN_CURLY => Vec::from(&[Reduce(PK::MoreLabelsAndLabels, 3usize)]),
        _ => vec![],
    }
}
fn action_close_paren_s76(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertiesParen, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::PropertiesParen, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::PropertiesParen, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::PropertiesParen, 3usize)]),
        _ => vec![],
    }
}
fn action_properties_s77(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertiesEachOf, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::PropertiesEachOf, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::PropertiesEachOf, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Shift(State::DOUBLE_BARS68)]),
        _ => vec![],
    }
}
fn action_properties_s78(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertiesOneOf, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::PropertiesOneOf, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::PropertiesOneOf, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::PropertiesOneOf, 3usize)]),
        _ => vec![],
    }
}
fn action_colon_s79(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::INTEGER_NAME => Vec::from(&[Shift(State::INTEGER_NAMES81)]),
        TK::BOOL_NAME => Vec::from(&[Shift(State::BOOL_NAMES82)]),
        TK::STRING_NAME => Vec::from(&[Shift(State::STRING_NAMES83)]),
        TK::DATE_NAME => Vec::from(&[Shift(State::DATE_NAMES84)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS85)]),
        TK::ANY => Vec::from(&[Shift(State::ANYS86)]),
        _ => vec![],
    }
}
fn action_endpointtype_s80(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::EdgeTypeP1, 6usize)]),
        TK::SEMICOLON => Vec::from(&[Reduce(PK::EdgeTypeP1, 6usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::EdgeTypeP1, 6usize)]),
        _ => vec![],
    }
}
fn action_integer_name_s81(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Shift(State::OPEN_CURLYS89)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::PLUS => Vec::from(&[Shift(State::PLUSS90)]),
        TK::STAR => Vec::from(&[Shift(State::STARS91)]),
        TK::QUESTION => Vec::from(&[Shift(State::QUESTIONS92)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_bool_name_s82(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Shift(State::OPEN_CURLYS89)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::PLUS => Vec::from(&[Shift(State::PLUSS90)]),
        TK::STAR => Vec::from(&[Shift(State::STARS91)]),
        TK::QUESTION => Vec::from(&[Shift(State::QUESTIONS92)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_string_name_s83(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Shift(State::OPEN_CURLYS89)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::PLUS => Vec::from(&[Shift(State::PLUSS90)]),
        TK::STAR => Vec::from(&[Shift(State::STARS91)]),
        TK::QUESTION => Vec::from(&[Shift(State::QUESTIONS92)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_date_name_s84(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::OPEN_CURLY => Vec::from(&[Shift(State::OPEN_CURLYS89)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::PLUS => Vec::from(&[Shift(State::PLUSS90)]),
        TK::STAR => Vec::from(&[Shift(State::STARS91)]),
        TK::QUESTION => Vec::from(&[Shift(State::QUESTIONS92)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOptP2, 0usize)]),
        _ => vec![],
    }
}
fn action_check_s85(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS98)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES99)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES100)]),
        TK::GT => Vec::from(&[Shift(State::GTS101)]),
        TK::LT => Vec::from(&[Shift(State::LTS102)]),
        TK::GE => Vec::from(&[Shift(State::GES103)]),
        TK::LE => Vec::from(&[Shift(State::LES104)]),
        TK::EQUALS => Vec::from(&[Shift(State::EQUALSS105)]),
        TK::REGEX => Vec::from(&[Shift(State::REGEXS106)]),
        TK::NOT => Vec::from(&[Shift(State::NOTS107)]),
        _ => vec![],
    }
}
fn action_any_s86(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS109)]),
        _ => vec![],
    }
}
fn action_typespec_s87(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::PropertyP1, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::PropertyP1, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::PropertyP1, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::PropertyP1, 3usize)]),
        _ => vec![],
    }
}
fn action_simpletype_s88(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Shift(State::BARS112)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Shift(State::AMPERSANDS113)]),
        _ => vec![],
    }
}
fn action_open_curly_s89(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS116)]),
        _ => vec![],
    }
}
fn action_plus_s90(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOneOrMore, 1usize)]),
        _ => vec![],
    }
}
fn action_star_s91(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardZeroOrMore, 1usize)]),
        _ => vec![],
    }
}
fn action_question_s92(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOptional, 1usize)]),
        _ => vec![],
    }
}
fn action_cardopt_s93(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS109)]),
        _ => vec![],
    }
}
fn action_card_s94(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_cardopt_s95(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS109)]),
        _ => vec![],
    }
}
fn action_cardopt_s96(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS109)]),
        _ => vec![],
    }
}
fn action_cardopt_s97(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckOptP2, 0usize)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS109)]),
        _ => vec![],
    }
}
fn action_open_paren_s98(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS98)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES99)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES100)]),
        TK::GT => Vec::from(&[Shift(State::GTS101)]),
        TK::LT => Vec::from(&[Shift(State::LTS102)]),
        TK::GE => Vec::from(&[Shift(State::GES103)]),
        TK::LE => Vec::from(&[Shift(State::LES104)]),
        TK::EQUALS => Vec::from(&[Shift(State::EQUALSS105)]),
        TK::REGEX => Vec::from(&[Shift(State::REGEXS106)]),
        TK::NOT => Vec::from(&[Shift(State::NOTS107)]),
        _ => vec![],
    }
}
fn action_true_s99(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondP1, 1usize)]),
        _ => vec![],
    }
}
fn action_false_s100(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondP2, 1usize)]),
        _ => vec![],
    }
}
fn action_gt_s101(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS122)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES123)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES124)]),
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS125)]),
        TK::DATE => Vec::from(&[Shift(State::DATES126)]),
        _ => vec![],
    }
}
fn action_lt_s102(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS122)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES123)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES124)]),
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS125)]),
        TK::DATE => Vec::from(&[Shift(State::DATES126)]),
        _ => vec![],
    }
}
fn action_ge_s103(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS122)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES123)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES124)]),
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS125)]),
        TK::DATE => Vec::from(&[Shift(State::DATES126)]),
        _ => vec![],
    }
}
fn action_le_s104(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS122)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES123)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES124)]),
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS125)]),
        TK::DATE => Vec::from(&[Shift(State::DATES126)]),
        _ => vec![],
    }
}
fn action_equals_s105(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS122)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES123)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES124)]),
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS125)]),
        TK::DATE => Vec::from(&[Shift(State::DATES126)]),
        _ => vec![],
    }
}
fn action_regex_s106(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS133)]),
        _ => vec![],
    }
}
fn action_not_s107(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS98)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES99)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES100)]),
        TK::GT => Vec::from(&[Shift(State::GTS101)]),
        TK::LT => Vec::from(&[Shift(State::LTS102)]),
        TK::GE => Vec::from(&[Shift(State::GES103)]),
        TK::LE => Vec::from(&[Shift(State::LES104)]),
        TK::EQUALS => Vec::from(&[Shift(State::EQUALSS105)]),
        TK::REGEX => Vec::from(&[Shift(State::REGEXS106)]),
        TK::NOT => Vec::from(&[Shift(State::NOTS107)]),
        _ => vec![],
    }
}
fn action_cond_s108(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SimpleTypeCond, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SimpleTypeCond, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SimpleTypeCond, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SimpleTypeCond, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SimpleTypeCond, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SimpleTypeCond, 2usize)]),
        TK::AND => Vec::from(&[Shift(State::ANDS135)]),
        TK::OR => Vec::from(&[Shift(State::ORS136)]),
        _ => vec![],
    }
}
fn action_check_s109(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS98)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES99)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES100)]),
        TK::GT => Vec::from(&[Shift(State::GTS101)]),
        TK::LT => Vec::from(&[Shift(State::LTS102)]),
        TK::GE => Vec::from(&[Shift(State::GES103)]),
        TK::LE => Vec::from(&[Shift(State::LES104)]),
        TK::EQUALS => Vec::from(&[Shift(State::EQUALSS105)]),
        TK::REGEX => Vec::from(&[Shift(State::REGEXS106)]),
        TK::NOT => Vec::from(&[Shift(State::NOTS107)]),
        _ => vec![],
    }
}
fn action_checkopt_s110(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SimpleTypeAny, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SimpleTypeAny, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SimpleTypeAny, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SimpleTypeAny, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SimpleTypeAny, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SimpleTypeAny, 2usize)]),
        _ => vec![],
    }
}
fn action_check_s111(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckOptP1, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckOptP1, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckOptP1, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckOptP1, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckOptP1, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_bar_s112(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::INTEGER_NAME => Vec::from(&[Shift(State::INTEGER_NAMES81)]),
        TK::BOOL_NAME => Vec::from(&[Shift(State::BOOL_NAMES82)]),
        TK::STRING_NAME => Vec::from(&[Shift(State::STRING_NAMES83)]),
        TK::DATE_NAME => Vec::from(&[Shift(State::DATE_NAMES84)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS85)]),
        TK::ANY => Vec::from(&[Shift(State::ANYS86)]),
        _ => vec![],
    }
}
fn action_ampersand_s113(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::INTEGER_NAME => Vec::from(&[Shift(State::INTEGER_NAMES81)]),
        TK::BOOL_NAME => Vec::from(&[Shift(State::BOOL_NAMES82)]),
        TK::STRING_NAME => Vec::from(&[Shift(State::STRING_NAMES83)]),
        TK::DATE_NAME => Vec::from(&[Shift(State::DATE_NAMES84)]),
        TK::CHECK => Vec::from(&[Shift(State::CHECKS85)]),
        TK::ANY => Vec::from(&[Shift(State::ANYS86)]),
        _ => vec![],
    }
}
fn action_moretypesopt_s114(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::TypeSpecP1, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::TypeSpecP1, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::TypeSpecP1, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::TypeSpecP1, 2usize)]),
        _ => vec![],
    }
}
fn action_moretypes_s115(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreTypesOptP1, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MoreTypesOptP1, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::MoreTypesOptP1, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::MoreTypesOptP1, 1usize)]),
        _ => vec![],
    }
}
fn action_number_s116(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::COMMA => Vec::from(&[Shift(State::COMMAS140)]),
        _ => vec![],
    }
}
fn action_checkopt_s117(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SimpleTypeInteger, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SimpleTypeInteger, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SimpleTypeInteger, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SimpleTypeInteger, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SimpleTypeInteger, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SimpleTypeInteger, 3usize)]),
        _ => vec![],
    }
}
fn action_checkopt_s118(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SimpleTypeBool, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SimpleTypeBool, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SimpleTypeBool, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SimpleTypeBool, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SimpleTypeBool, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SimpleTypeBool, 3usize)]),
        _ => vec![],
    }
}
fn action_checkopt_s119(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SimpleTypeStringSpec, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SimpleTypeStringSpec, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SimpleTypeStringSpec, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SimpleTypeStringSpec, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SimpleTypeStringSpec, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SimpleTypeStringSpec, 3usize)]),
        _ => vec![],
    }
}
fn action_checkopt_s120(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SimpleTypeDate, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SimpleTypeDate, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SimpleTypeDate, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SimpleTypeDate, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SimpleTypeDate, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SimpleTypeDate, 3usize)]),
        _ => vec![],
    }
}
fn action_cond_s121(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Shift(State::CLOSE_PARENS141)]),
        TK::AND => Vec::from(&[Shift(State::ANDS135)]),
        TK::OR => Vec::from(&[Shift(State::ORS136)]),
        _ => vec![],
    }
}
fn action_number_s122(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::SingleValueNumberValue, 1usize)]),
        _ => vec![],
    }
}
fn action_true_s123(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::BOOLP1, 1usize)]),
        _ => vec![],
    }
}
fn action_false_s124(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::BOOLP2, 1usize)]),
        _ => vec![],
    }
}
fn action_quoted_string_s125(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::SingleValueStringValue, 1usize)]),
        _ => vec![],
    }
}
fn action_date_s126(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::QUOTED_STRING => Vec::from(&[Shift(State::QUOTED_STRINGS142)]),
        _ => vec![],
    }
}
fn action_singlevalue_s127(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondGT, 2usize)]),
        _ => vec![],
    }
}
fn action_bool_s128(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::AND => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        TK::OR => Vec::from(&[Reduce(PK::SingleValueBooleanValue, 1usize)]),
        _ => vec![],
    }
}
fn action_singlevalue_s129(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondLT, 2usize)]),
        _ => vec![],
    }
}
fn action_singlevalue_s130(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondGE, 2usize)]),
        _ => vec![],
    }
}
fn action_singlevalue_s131(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondLE, 2usize)]),
        _ => vec![],
    }
}
fn action_singlevalue_s132(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondEQ, 2usize)]),
        _ => vec![],
    }
}
fn action_quoted_string_s133(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondRegex, 2usize)]),
        _ => vec![],
    }
}
fn action_cond_s134(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondNot, 2usize)]),
        _ => vec![],
    }
}
fn action_and_s135(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS98)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES99)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES100)]),
        TK::GT => Vec::from(&[Shift(State::GTS101)]),
        TK::LT => Vec::from(&[Shift(State::LTS102)]),
        TK::GE => Vec::from(&[Shift(State::GES103)]),
        TK::LE => Vec::from(&[Shift(State::LES104)]),
        TK::EQUALS => Vec::from(&[Shift(State::EQUALSS105)]),
        TK::REGEX => Vec::from(&[Shift(State::REGEXS106)]),
        TK::NOT => Vec::from(&[Shift(State::NOTS107)]),
        _ => vec![],
    }
}
fn action_or_s136(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::OPEN_PAREN => Vec::from(&[Shift(State::OPEN_PARENS98)]),
        TK::TRUE => Vec::from(&[Shift(State::TRUES99)]),
        TK::FALSE => Vec::from(&[Shift(State::FALSES100)]),
        TK::GT => Vec::from(&[Shift(State::GTS101)]),
        TK::LT => Vec::from(&[Shift(State::LTS102)]),
        TK::GE => Vec::from(&[Shift(State::GES103)]),
        TK::LE => Vec::from(&[Shift(State::LES104)]),
        TK::EQUALS => Vec::from(&[Shift(State::EQUALSS105)]),
        TK::REGEX => Vec::from(&[Shift(State::REGEXS106)]),
        TK::NOT => Vec::from(&[Shift(State::NOTS107)]),
        _ => vec![],
    }
}
fn action_cond_s137(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CheckP1, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CheckP1, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CheckP1, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CheckP1, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CheckP1, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CheckP1, 2usize)]),
        TK::AND => Vec::from(&[Shift(State::ANDS135)]),
        TK::OR => Vec::from(&[Shift(State::ORS136)]),
        _ => vec![],
    }
}
fn action_simpletype_s138(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Shift(State::BARS112)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Shift(State::AMPERSANDS113)]),
        _ => vec![],
    }
}
fn action_simpletype_s139(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::BAR => Vec::from(&[Shift(State::BARS112)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::MoreTypesOptP2, 0usize)]),
        TK::AMPERSAND => Vec::from(&[Shift(State::AMPERSANDS113)]),
        _ => vec![],
    }
}
fn action_comma_s140(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STAR => Vec::from(&[Shift(State::STARS147)]),
        TK::NUMBER => Vec::from(&[Shift(State::NUMBERS148)]),
        _ => vec![],
    }
}
fn action_close_paren_s141(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondParenCond, 3usize)]),
        _ => vec![],
    }
}
fn action_quoted_string_s142(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::AND => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        TK::OR => Vec::from(&[Reduce(PK::SingleValueDateValue, 2usize)]),
        _ => vec![],
    }
}
fn action_cond_s143(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondAnd, 3usize)]),
        _ => vec![],
    }
}
fn action_cond_s144(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::AND => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        TK::OR => Vec::from(&[Reduce(PK::CondOR, 3usize)]),
        _ => vec![],
    }
}
fn action_moretypesopt_s145(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreTypesUnionType, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MoreTypesUnionType, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::MoreTypesUnionType, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::MoreTypesUnionType, 3usize)]),
        _ => vec![],
    }
}
fn action_moretypesopt_s146(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::MoreTypesIntersectionType, 3usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MoreTypesIntersectionType, 3usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::MoreTypesIntersectionType, 3usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::MoreTypesIntersectionType, 3usize)]),
        _ => vec![],
    }
}
fn action_star_s147(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MaxStar, 1usize)]),
        _ => vec![],
    }
}
fn action_number_s148(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::MaxP1, 1usize)]),
        _ => vec![],
    }
}
fn action_max_s149(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_CURLY => Vec::from(&[Shift(State::CLOSE_CURLYS150)]),
        _ => vec![],
    }
}
fn action_close_curly_s150(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::CLOSE_PAREN => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        TK::CLOSE_CURLY => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        TK::COMMA => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        TK::BAR => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        TK::DOUBLE_BAR => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        TK::AMPERSAND => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        TK::CHECK => Vec::from(&[Reduce(PK::CardRange, 5usize)]),
        _ => vec![],
    }
}
fn action_augl_s151(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutItem0P2, 0usize)]),
        TK::WS => Vec::from(&[Shift(State::WSS152)]),
        TK::CommentLine => Vec::from(&[Shift(State::CommentLineS153)]),
        TK::START_COMMENT => Vec::from(&[Shift(State::START_COMMENTS154)]),
        _ => vec![],
    }
}
fn action_ws_s152(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutItemP1, 1usize)]),
        TK::WS => Vec::from(&[Reduce(PK::LayoutItemP1, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::LayoutItemP1, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::LayoutItemP1, 1usize)]),
        _ => vec![],
    }
}
fn action_commentline_s153(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CommentP2, 1usize)]),
        TK::WS => Vec::from(&[Reduce(PK::CommentP2, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::CommentP2, 1usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::CommentP2, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::CommentP2, 1usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::CommentP2, 1usize)]),
        _ => vec![],
    }
}
fn action_start_comment_s154(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Shift(State::WSS160)]),
        TK::CommentLine => Vec::from(&[Shift(State::CommentLineS153)]),
        TK::NotComment => Vec::from(&[Shift(State::NotCommentS161)]),
        TK::START_COMMENT => Vec::from(&[Shift(State::START_COMMENTS154)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::Cornc0P2, 0usize)]),
        _ => vec![],
    }
}
fn action_layout_s155(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Accept]),
        _ => vec![],
    }
}
fn action_layoutitem1_s156(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutItem0P1, 1usize)]),
        TK::WS => Vec::from(&[Shift(State::WSS152)]),
        TK::CommentLine => Vec::from(&[Shift(State::CommentLineS153)]),
        TK::START_COMMENT => Vec::from(&[Shift(State::START_COMMENTS154)]),
        _ => vec![],
    }
}
fn action_layoutitem0_s157(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutP1, 1usize)]),
        _ => vec![],
    }
}
fn action_layoutitem_s158(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutItem1P2, 1usize)]),
        TK::WS => Vec::from(&[Reduce(PK::LayoutItem1P2, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::LayoutItem1P2, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::LayoutItem1P2, 1usize)]),
        _ => vec![],
    }
}
fn action_comment_s159(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutItemP2, 1usize)]),
        TK::WS => Vec::from(&[Reduce(PK::LayoutItemP2, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::LayoutItemP2, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::LayoutItemP2, 1usize)]),
        _ => vec![],
    }
}
fn action_ws_s160(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Reduce(PK::CorncP3, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::CorncP3, 1usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::CorncP3, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::CorncP3, 1usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::CorncP3, 1usize)]),
        _ => vec![],
    }
}
fn action_notcomment_s161(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Reduce(PK::CorncP2, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::CorncP2, 1usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::CorncP2, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::CorncP2, 1usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::CorncP2, 1usize)]),
        _ => vec![],
    }
}
fn action_comment_s162(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Reduce(PK::CorncP1, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::CorncP1, 1usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::CorncP1, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::CorncP1, 1usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::CorncP1, 1usize)]),
        _ => vec![],
    }
}
fn action_corncs_s163(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::END_COMMENT => Vec::from(&[Shift(State::END_COMMENTS168)]),
        _ => vec![],
    }
}
fn action_cornc1_s164(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Shift(State::WSS160)]),
        TK::CommentLine => Vec::from(&[Shift(State::CommentLineS153)]),
        TK::NotComment => Vec::from(&[Shift(State::NotCommentS161)]),
        TK::START_COMMENT => Vec::from(&[Shift(State::START_COMMENTS154)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::Cornc0P1, 1usize)]),
        _ => vec![],
    }
}
fn action_cornc0_s165(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::END_COMMENT => Vec::from(&[Reduce(PK::CorncsP1, 1usize)]),
        _ => vec![],
    }
}
fn action_cornc_s166(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Reduce(PK::Cornc1P2, 1usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::Cornc1P2, 1usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::Cornc1P2, 1usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::Cornc1P2, 1usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::Cornc1P2, 1usize)]),
        _ => vec![],
    }
}
fn action_layoutitem_s167(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::LayoutItem1P1, 2usize)]),
        TK::WS => Vec::from(&[Reduce(PK::LayoutItem1P1, 2usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::LayoutItem1P1, 2usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::LayoutItem1P1, 2usize)]),
        _ => vec![],
    }
}
fn action_end_comment_s168(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::STOP => Vec::from(&[Reduce(PK::CommentP1, 3usize)]),
        TK::WS => Vec::from(&[Reduce(PK::CommentP1, 3usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::CommentP1, 3usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::CommentP1, 3usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::CommentP1, 3usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::CommentP1, 3usize)]),
        _ => vec![],
    }
}
fn action_cornc_s169(token_kind: TokenKind) -> Vec<Action<State, ProdKind>> {
    match token_kind {
        TK::WS => Vec::from(&[Reduce(PK::Cornc1P1, 2usize)]),
        TK::CommentLine => Vec::from(&[Reduce(PK::Cornc1P1, 2usize)]),
        TK::NotComment => Vec::from(&[Reduce(PK::Cornc1P1, 2usize)]),
        TK::START_COMMENT => Vec::from(&[Reduce(PK::Cornc1P1, 2usize)]),
        TK::END_COMMENT => Vec::from(&[Reduce(PK::Cornc1P1, 2usize)]),
        _ => vec![],
    }
}
fn goto_aug_s0(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Pgs => State::PgsS2,
        NonTermKind::CreateType1 => State::CreateType1S3,
        NonTermKind::CreateType => State::CreateTypeS4,
        NonTermKind::CreateNodeType => State::CreateNodeTypeS5,
        NonTermKind::CreateEdgeType => State::CreateEdgeTypeS6,
        NonTermKind::CreateGraphType => State::CreateGraphTypeS7,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::AUGS0
            )
        }
    }
}
fn goto_semicolon_s11(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CreateType => State::CreateTypeS15,
        NonTermKind::CreateNodeType => State::CreateNodeTypeS5,
        NonTermKind::CreateEdgeType => State::CreateEdgeTypeS6,
        NonTermKind::CreateGraphType => State::CreateGraphTypeS7,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SEMICOLONS11
            )
        }
    }
}
fn goto_type_s12(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::NodeType => State::NodeTypeS17,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::TYPES12
            )
        }
    }
}
fn goto_type_s13(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::EdgeType => State::EdgeTypeS19,
        NonTermKind::EndpointType => State::EndpointTypeS20,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::TYPES13
            )
        }
    }
}
fn goto_type_s14(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::GraphType => State::GraphTypeS22,
        NonTermKind::TypeName => State::TypeNameS23,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::TYPES14
            )
        }
    }
}
fn goto_open_paren_s16(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::TypeNameOpt => State::TypeNameOptS24,
        NonTermKind::TypeName => State::TypeNameS25,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_PARENS16
            )
        }
    }
}
fn goto_open_paren_s18(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::LabelPropertySpec => State::LabelPropertySpecS27,
        NonTermKind::LabelSpecOpt => State::LabelSpecOptS28,
        NonTermKind::LabelSpec => State::LabelSpecS29,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_PARENS18
            )
        }
    }
}
fn goto_typename_s23(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::GraphTypeModeOpt => State::GraphTypeModeOptS33,
        NonTermKind::GraphTypeMode => State::GraphTypeModeS34,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::TypeNameS23
            )
        }
    }
}
fn goto_typenameopt_s24(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::LabelPropertySpec => State::LabelPropertySpecS35,
        NonTermKind::LabelSpecOpt => State::LabelSpecOptS28,
        NonTermKind::LabelSpec => State::LabelSpecS29,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::TypeNameOptS24
            )
        }
    }
}
fn goto_colon_s26(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Labels => State::LabelsS38,
        NonTermKind::SingleLabel => State::SingleLabelS39,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::COLONS26
            )
        }
    }
}
fn goto_labelspecopt_s28(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::PropertySpecOpt => State::PropertySpecOptS42,
        NonTermKind::PropertySpec => State::PropertySpecS43,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::LabelSpecOptS28
            )
        }
    }
}
fn goto_open_arrow_s30(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::TypeNameOpt => State::TypeNameOptS44,
        NonTermKind::TypeName => State::TypeNameS25,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_ARROWS30
            )
        }
    }
}
fn goto_singlelabel_s39(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::MoreLabelsOpt => State::MoreLabelsOptS50,
        NonTermKind::MoreLabels => State::MoreLabelsS51,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SingleLabelS39
            )
        }
    }
}
fn goto_open_curly_s41(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Properties => State::PropertiesS54,
        NonTermKind::OPTIONALOpt => State::OPTIONALOptS55,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_CURLYS41
            )
        }
    }
}
fn goto_typenameopt_s44(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::LabelPropertySpec => State::LabelPropertySpecS56,
        NonTermKind::LabelSpecOpt => State::LabelSpecOptS28,
        NonTermKind::LabelSpec => State::LabelSpecS29,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::TypeNameOptS44
            )
        }
    }
}
fn goto_open_curly_s45(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::NodeType => State::NodeTypeS58,
        NonTermKind::EdgeType => State::EdgeTypeS59,
        NonTermKind::GraphTypeElementsOpt => State::GraphTypeElementsOptS60,
        NonTermKind::GraphTypeElements => State::GraphTypeElementsS61,
        NonTermKind::TypeName => State::TypeNameS62,
        NonTermKind::EndpointType => State::EndpointTypeS20,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_CURLYS45
            )
        }
    }
}
fn goto_bar_s48(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleLabel => State::SingleLabelS63,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::BARS48
            )
        }
    }
}
fn goto_ampersand_s49(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleLabel => State::SingleLabelS64,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::AMPERSANDS49
            )
        }
    }
}
fn goto_open_paren_s52(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Properties => State::PropertiesS65,
        NonTermKind::OPTIONALOpt => State::OPTIONALOptS55,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_PARENS52
            )
        }
    }
}
fn goto_optionalopt_s55(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Property => State::PropertyS70,
        NonTermKind::key => State::keyS71,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPTIONALOptS55
            )
        }
    }
}
fn goto_open_paren_s57(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::TypeNameOpt => State::TypeNameOptS24,
        NonTermKind::TypeName => State::TypeNameS25,
        NonTermKind::LabelPropertySpec => State::LabelPropertySpecS27,
        NonTermKind::LabelSpecOpt => State::LabelSpecOptS28,
        NonTermKind::LabelSpec => State::LabelSpecS29,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_PARENS57
            )
        }
    }
}
fn goto_singlelabel_s63(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::MoreLabelsOpt => State::MoreLabelsOptS74,
        NonTermKind::MoreLabels => State::MoreLabelsS51,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SingleLabelS63
            )
        }
    }
}
fn goto_singlelabel_s64(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::MoreLabelsOpt => State::MoreLabelsOptS75,
        NonTermKind::MoreLabels => State::MoreLabelsS51,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SingleLabelS64
            )
        }
    }
}
fn goto_comma_s67(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Properties => State::PropertiesS77,
        NonTermKind::OPTIONALOpt => State::OPTIONALOptS55,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::COMMAS67
            )
        }
    }
}
fn goto_double_bar_s68(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Properties => State::PropertiesS78,
        NonTermKind::OPTIONALOpt => State::OPTIONALOptS55,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::DOUBLE_BARS68
            )
        }
    }
}
fn goto_close_arrow_s72(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::EndpointType => State::EndpointTypeS80,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CLOSE_ARROWS72
            )
        }
    }
}
fn goto_colon_s79(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::TypeSpec => State::TypeSpecS87,
        NonTermKind::SimpleType => State::SimpleTypeS88,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::COLONS79
            )
        }
    }
}
fn goto_integer_name_s81(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CardOpt => State::CardOptS93,
        NonTermKind::Card => State::CardS94,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::INTEGER_NAMES81
            )
        }
    }
}
fn goto_bool_name_s82(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CardOpt => State::CardOptS95,
        NonTermKind::Card => State::CardS94,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::BOOL_NAMES82
            )
        }
    }
}
fn goto_string_name_s83(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CardOpt => State::CardOptS96,
        NonTermKind::Card => State::CardS94,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::STRING_NAMES83
            )
        }
    }
}
fn goto_date_name_s84(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CardOpt => State::CardOptS97,
        NonTermKind::Card => State::CardS94,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::DATE_NAMES84
            )
        }
    }
}
fn goto_check_s85(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Cond => State::CondS108,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CHECKS85
            )
        }
    }
}
fn goto_any_s86(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CheckOpt => State::CheckOptS110,
        NonTermKind::Check => State::CheckS111,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::ANYS86
            )
        }
    }
}
fn goto_simpletype_s88(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::MoreTypesOpt => State::MoreTypesOptS114,
        NonTermKind::MoreTypes => State::MoreTypesS115,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SimpleTypeS88
            )
        }
    }
}
fn goto_cardopt_s93(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CheckOpt => State::CheckOptS117,
        NonTermKind::Check => State::CheckS111,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CardOptS93
            )
        }
    }
}
fn goto_cardopt_s95(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CheckOpt => State::CheckOptS118,
        NonTermKind::Check => State::CheckS111,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CardOptS95
            )
        }
    }
}
fn goto_cardopt_s96(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CheckOpt => State::CheckOptS119,
        NonTermKind::Check => State::CheckS111,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CardOptS96
            )
        }
    }
}
fn goto_cardopt_s97(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::CheckOpt => State::CheckOptS120,
        NonTermKind::Check => State::CheckS111,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CardOptS97
            )
        }
    }
}
fn goto_open_paren_s98(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Cond => State::CondS121,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::OPEN_PARENS98
            )
        }
    }
}
fn goto_gt_s101(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleValue => State::SingleValueS127,
        NonTermKind::BOOL => State::BOOLS128,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::GTS101
            )
        }
    }
}
fn goto_lt_s102(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleValue => State::SingleValueS129,
        NonTermKind::BOOL => State::BOOLS128,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::LTS102
            )
        }
    }
}
fn goto_ge_s103(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleValue => State::SingleValueS130,
        NonTermKind::BOOL => State::BOOLS128,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::GES103
            )
        }
    }
}
fn goto_le_s104(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleValue => State::SingleValueS131,
        NonTermKind::BOOL => State::BOOLS128,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::LES104
            )
        }
    }
}
fn goto_equals_s105(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SingleValue => State::SingleValueS132,
        NonTermKind::BOOL => State::BOOLS128,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::EQUALSS105
            )
        }
    }
}
fn goto_not_s107(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Cond => State::CondS134,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::NOTS107
            )
        }
    }
}
fn goto_check_s109(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Cond => State::CondS137,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::CHECKS109
            )
        }
    }
}
fn goto_bar_s112(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SimpleType => State::SimpleTypeS138,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::BARS112
            )
        }
    }
}
fn goto_ampersand_s113(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::SimpleType => State::SimpleTypeS139,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::AMPERSANDS113
            )
        }
    }
}
fn goto_and_s135(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Cond => State::CondS143,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::ANDS135
            )
        }
    }
}
fn goto_or_s136(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Cond => State::CondS144,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::ORS136
            )
        }
    }
}
fn goto_simpletype_s138(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::MoreTypesOpt => State::MoreTypesOptS145,
        NonTermKind::MoreTypes => State::MoreTypesS115,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SimpleTypeS138
            )
        }
    }
}
fn goto_simpletype_s139(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::MoreTypesOpt => State::MoreTypesOptS146,
        NonTermKind::MoreTypes => State::MoreTypesS115,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::SimpleTypeS139
            )
        }
    }
}
fn goto_comma_s140(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Max => State::MaxS149,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::COMMAS140
            )
        }
    }
}
fn goto_augl_s151(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Layout => State::LayoutS155,
        NonTermKind::LayoutItem1 => State::LayoutItem1S156,
        NonTermKind::LayoutItem0 => State::LayoutItem0S157,
        NonTermKind::LayoutItem => State::LayoutItemS158,
        NonTermKind::Comment => State::CommentS159,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::AUGLS151
            )
        }
    }
}
fn goto_start_comment_s154(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Comment => State::CommentS162,
        NonTermKind::Corncs => State::CorncsS163,
        NonTermKind::Cornc1 => State::Cornc1S164,
        NonTermKind::Cornc0 => State::Cornc0S165,
        NonTermKind::Cornc => State::CorncS166,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::START_COMMENTS154
            )
        }
    }
}
fn goto_layoutitem1_s156(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::LayoutItem => State::LayoutItemS167,
        NonTermKind::Comment => State::CommentS159,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::LayoutItem1S156
            )
        }
    }
}
fn goto_cornc1_s164(nonterm_kind: NonTermKind) -> State {
    match nonterm_kind {
        NonTermKind::Comment => State::CommentS162,
        NonTermKind::Cornc => State::CorncS169,
        _ => {
            panic!(
                "Invalid terminal kind ({nonterm_kind:?}) for GOTO state ({:?}).",
                State::Cornc1S164
            )
        }
    }
}
fn goto_invalid(_nonterm_kind: NonTermKind) -> State {
    panic!("Invalid GOTO entry!");
}
pub(crate) static PARSER_DEFINITION: PgsParserDefinition = PgsParserDefinition {
    actions: [
        action_aug_s0,
        action_create_s1,
        action_pgs_s2,
        action_createtype1_s3,
        action_createtype_s4,
        action_createnodetype_s5,
        action_createedgetype_s6,
        action_creategraphtype_s7,
        action_node_s8,
        action_edge_s9,
        action_graph_s10,
        action_semicolon_s11,
        action_type_s12,
        action_type_s13,
        action_type_s14,
        action_createtype_s15,
        action_open_paren_s16,
        action_nodetype_s17,
        action_open_paren_s18,
        action_edgetype_s19,
        action_endpointtype_s20,
        action_identifier_s21,
        action_graphtype_s22,
        action_typename_s23,
        action_typenameopt_s24,
        action_typename_s25,
        action_colon_s26,
        action_labelpropertyspec_s27,
        action_labelspecopt_s28,
        action_labelspec_s29,
        action_open_arrow_s30,
        action_strict_s31,
        action_loose_s32,
        action_graphtypemodeopt_s33,
        action_graphtypemode_s34,
        action_labelpropertyspec_s35,
        action_identifier_s36,
        action_at_s37,
        action_labels_s38,
        action_singlelabel_s39,
        action_close_paren_s40,
        action_open_curly_s41,
        action_propertyspecopt_s42,
        action_propertyspec_s43,
        action_typenameopt_s44,
        action_open_curly_s45,
        action_close_paren_s46,
        action_identifier_s47,
        action_bar_s48,
        action_ampersand_s49,
        action_morelabelsopt_s50,
        action_morelabels_s51,
        action_open_paren_s52,
        action_optional_s53,
        action_properties_s54,
        action_optionalopt_s55,
        action_labelpropertyspec_s56,
        action_open_paren_s57,
        action_nodetype_s58,
        action_edgetype_s59,
        action_graphtypeelementsopt_s60,
        action_graphtypeelements_s61,
        action_typename_s62,
        action_singlelabel_s63,
        action_singlelabel_s64,
        action_properties_s65,
        action_close_curly_s66,
        action_comma_s67,
        action_double_bar_s68,
        action_identifier_s69,
        action_property_s70,
        action_key_s71,
        action_close_arrow_s72,
        action_close_curly_s73,
        action_morelabelsopt_s74,
        action_morelabelsopt_s75,
        action_close_paren_s76,
        action_properties_s77,
        action_properties_s78,
        action_colon_s79,
        action_endpointtype_s80,
        action_integer_name_s81,
        action_bool_name_s82,
        action_string_name_s83,
        action_date_name_s84,
        action_check_s85,
        action_any_s86,
        action_typespec_s87,
        action_simpletype_s88,
        action_open_curly_s89,
        action_plus_s90,
        action_star_s91,
        action_question_s92,
        action_cardopt_s93,
        action_card_s94,
        action_cardopt_s95,
        action_cardopt_s96,
        action_cardopt_s97,
        action_open_paren_s98,
        action_true_s99,
        action_false_s100,
        action_gt_s101,
        action_lt_s102,
        action_ge_s103,
        action_le_s104,
        action_equals_s105,
        action_regex_s106,
        action_not_s107,
        action_cond_s108,
        action_check_s109,
        action_checkopt_s110,
        action_check_s111,
        action_bar_s112,
        action_ampersand_s113,
        action_moretypesopt_s114,
        action_moretypes_s115,
        action_number_s116,
        action_checkopt_s117,
        action_checkopt_s118,
        action_checkopt_s119,
        action_checkopt_s120,
        action_cond_s121,
        action_number_s122,
        action_true_s123,
        action_false_s124,
        action_quoted_string_s125,
        action_date_s126,
        action_singlevalue_s127,
        action_bool_s128,
        action_singlevalue_s129,
        action_singlevalue_s130,
        action_singlevalue_s131,
        action_singlevalue_s132,
        action_quoted_string_s133,
        action_cond_s134,
        action_and_s135,
        action_or_s136,
        action_cond_s137,
        action_simpletype_s138,
        action_simpletype_s139,
        action_comma_s140,
        action_close_paren_s141,
        action_quoted_string_s142,
        action_cond_s143,
        action_cond_s144,
        action_moretypesopt_s145,
        action_moretypesopt_s146,
        action_star_s147,
        action_number_s148,
        action_max_s149,
        action_close_curly_s150,
        action_augl_s151,
        action_ws_s152,
        action_commentline_s153,
        action_start_comment_s154,
        action_layout_s155,
        action_layoutitem1_s156,
        action_layoutitem0_s157,
        action_layoutitem_s158,
        action_comment_s159,
        action_ws_s160,
        action_notcomment_s161,
        action_comment_s162,
        action_corncs_s163,
        action_cornc1_s164,
        action_cornc0_s165,
        action_cornc_s166,
        action_layoutitem_s167,
        action_end_comment_s168,
        action_cornc_s169,
    ],
    gotos: [
        goto_aug_s0,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_semicolon_s11,
        goto_type_s12,
        goto_type_s13,
        goto_type_s14,
        goto_invalid,
        goto_open_paren_s16,
        goto_invalid,
        goto_open_paren_s18,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_typename_s23,
        goto_typenameopt_s24,
        goto_invalid,
        goto_colon_s26,
        goto_invalid,
        goto_labelspecopt_s28,
        goto_invalid,
        goto_open_arrow_s30,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_singlelabel_s39,
        goto_invalid,
        goto_open_curly_s41,
        goto_invalid,
        goto_invalid,
        goto_typenameopt_s44,
        goto_open_curly_s45,
        goto_invalid,
        goto_invalid,
        goto_bar_s48,
        goto_ampersand_s49,
        goto_invalid,
        goto_invalid,
        goto_open_paren_s52,
        goto_invalid,
        goto_invalid,
        goto_optionalopt_s55,
        goto_invalid,
        goto_open_paren_s57,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_singlelabel_s63,
        goto_singlelabel_s64,
        goto_invalid,
        goto_invalid,
        goto_comma_s67,
        goto_double_bar_s68,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_close_arrow_s72,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_colon_s79,
        goto_invalid,
        goto_integer_name_s81,
        goto_bool_name_s82,
        goto_string_name_s83,
        goto_date_name_s84,
        goto_check_s85,
        goto_any_s86,
        goto_invalid,
        goto_simpletype_s88,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_cardopt_s93,
        goto_invalid,
        goto_cardopt_s95,
        goto_cardopt_s96,
        goto_cardopt_s97,
        goto_open_paren_s98,
        goto_invalid,
        goto_invalid,
        goto_gt_s101,
        goto_lt_s102,
        goto_ge_s103,
        goto_le_s104,
        goto_equals_s105,
        goto_invalid,
        goto_not_s107,
        goto_invalid,
        goto_check_s109,
        goto_invalid,
        goto_invalid,
        goto_bar_s112,
        goto_ampersand_s113,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_and_s135,
        goto_or_s136,
        goto_invalid,
        goto_simpletype_s138,
        goto_simpletype_s139,
        goto_comma_s140,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_augl_s151,
        goto_invalid,
        goto_invalid,
        goto_start_comment_s154,
        goto_invalid,
        goto_layoutitem1_s156,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_cornc1_s164,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
        goto_invalid,
    ],
    token_kinds: [
        [
            Some((TK::CREATE, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::GRAPH, true)),
            Some((TK::NODE, true)),
            Some((TK::EDGE, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::TYPE, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::TYPE, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::TYPE, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CREATE, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_ARROW, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STRICT, true)),
            Some((TK::LOOSE, true)),
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STRICT, true)),
            Some((TK::LOOSE, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AT, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::OPEN_ARROW, true)),
            Some((TK::SEMICOLON, true)),
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPTIONAL, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AT, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AT, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPTIONAL, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::COLON, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPTIONAL, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPTIONAL, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::IDENTIFIER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::COLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::OPEN_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_ARROW, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::INTEGER_NAME, true)),
            Some((TK::STRING_NAME, true)),
            Some((TK::CHECK, true)),
            Some((TK::BOOL_NAME, true)),
            Some((TK::DATE_NAME, true)),
            Some((TK::ANY, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::SEMICOLON, true)),
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::PLUS, true)),
            Some((TK::STAR, true)),
            Some((TK::QUESTION, true)),
            Some((TK::AMPERSAND, true)),
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::PLUS, true)),
            Some((TK::STAR, true)),
            Some((TK::QUESTION, true)),
            Some((TK::AMPERSAND, true)),
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::PLUS, true)),
            Some((TK::STAR, true)),
            Some((TK::QUESTION, true)),
            Some((TK::AMPERSAND, true)),
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::OPEN_CURLY, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::PLUS, true)),
            Some((TK::STAR, true)),
            Some((TK::QUESTION, true)),
            Some((TK::AMPERSAND, true)),
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::REGEX, true)),
            Some((TK::TRUE, true)),
            Some((TK::NOT, true)),
            Some((TK::GE, true)),
            Some((TK::LE, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::GT, true)),
            Some((TK::LT, true)),
            Some((TK::EQUALS, true)),
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::NUMBER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::REGEX, true)),
            Some((TK::TRUE, true)),
            Some((TK::NOT, true)),
            Some((TK::GE, true)),
            Some((TK::LE, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::GT, true)),
            Some((TK::LT, true)),
            Some((TK::EQUALS, true)),
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::TRUE, true)),
            Some((TK::DATE, true)),
            Some((TK::NUMBER, false)),
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::TRUE, true)),
            Some((TK::DATE, true)),
            Some((TK::NUMBER, false)),
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::TRUE, true)),
            Some((TK::DATE, true)),
            Some((TK::NUMBER, false)),
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::TRUE, true)),
            Some((TK::DATE, true)),
            Some((TK::NUMBER, false)),
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::TRUE, true)),
            Some((TK::DATE, true)),
            Some((TK::NUMBER, false)),
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::REGEX, true)),
            Some((TK::TRUE, true)),
            Some((TK::NOT, true)),
            Some((TK::GE, true)),
            Some((TK::LE, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::GT, true)),
            Some((TK::LT, true)),
            Some((TK::EQUALS, true)),
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::REGEX, true)),
            Some((TK::TRUE, true)),
            Some((TK::NOT, true)),
            Some((TK::GE, true)),
            Some((TK::LE, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::GT, true)),
            Some((TK::LT, true)),
            Some((TK::EQUALS, true)),
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::INTEGER_NAME, true)),
            Some((TK::STRING_NAME, true)),
            Some((TK::CHECK, true)),
            Some((TK::BOOL_NAME, true)),
            Some((TK::DATE_NAME, true)),
            Some((TK::ANY, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::INTEGER_NAME, true)),
            Some((TK::STRING_NAME, true)),
            Some((TK::CHECK, true)),
            Some((TK::BOOL_NAME, true)),
            Some((TK::DATE_NAME, true)),
            Some((TK::ANY, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::QUOTED_STRING, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::REGEX, true)),
            Some((TK::TRUE, true)),
            Some((TK::NOT, true)),
            Some((TK::GE, true)),
            Some((TK::LE, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::GT, true)),
            Some((TK::LT, true)),
            Some((TK::EQUALS, true)),
            None,
        ],
        [
            Some((TK::FALSE, true)),
            Some((TK::REGEX, true)),
            Some((TK::TRUE, true)),
            Some((TK::NOT, true)),
            Some((TK::GE, true)),
            Some((TK::LE, true)),
            Some((TK::OPEN_PAREN, true)),
            Some((TK::GT, true)),
            Some((TK::LT, true)),
            Some((TK::EQUALS, true)),
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STAR, true)),
            Some((TK::NUMBER, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::AND, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::OR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CLOSE_CURLY, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::CHECK, true)),
            Some((TK::DOUBLE_BAR, true)),
            Some((TK::CLOSE_PAREN, true)),
            Some((TK::CLOSE_CURLY, true)),
            Some((TK::COMMA, true)),
            Some((TK::BAR, true)),
            Some((TK::AMPERSAND, true)),
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::END_COMMENT, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::END_COMMENT, true)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            None,
            None,
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::STOP, true)),
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
        ],
        [
            Some((TK::START_COMMENT, true)),
            Some((TK::END_COMMENT, true)),
            Some((TK::WS, false)),
            Some((TK::CommentLine, false)),
            Some((TK::NotComment, false)),
            None,
            None,
            None,
            None,
            None,
            None,
        ],
    ],
};
impl ParserDefinition<State, ProdKind, TokenKind, NonTermKind> for PgsParserDefinition {
    fn actions(&self, state: State, token: TokenKind) -> Vec<Action<State, ProdKind>> {
        PARSER_DEFINITION.actions[state as usize](token)
    }
    fn goto(&self, state: State, nonterm: NonTermKind) -> State {
        PARSER_DEFINITION.gotos[state as usize](nonterm)
    }
    fn expected_token_kinds(&self, state: State) -> Vec<(TokenKind, bool)> {
        PARSER_DEFINITION.token_kinds[state as usize].iter().map_while(|t| *t).collect()
    }
    fn longest_match() -> bool {
        true
    }
    fn grammar_order() -> bool {
        true
    }
}
pub(crate) type Context<'i, I> = LRContext<'i, I, State, TokenKind>;
pub struct PgsParser<
    'i,
    I: InputT + ?Sized,
    L: Lexer<'i, Context<'i, I>, State, TokenKind, Input = I>,
    B,
>(
    LRParser<
        'i,
        Context<'i, I>,
        State,
        ProdKind,
        TokenKind,
        NonTermKind,
        PgsParserDefinition,
        L,
        B,
        I,
    >,
);
#[allow(dead_code)]
impl<
    'i,
> PgsParser<
    'i,
    Input,
    StringLexer<Context<'i, Input>, State, TokenKind, TokenRecognizer, TERMINAL_COUNT>,
    DefaultBuilder,
> {
    pub fn new() -> Self {
        Self(
            LRParser::new(
                &PARSER_DEFINITION,
                State::default(),
                false,
                true,
                StringLexer::new(false, &RECOGNIZERS),
                DefaultBuilder::new(),
            ),
        )
    }
}
#[allow(dead_code)]
impl<'i, I, L, B> Parser<'i, I, Context<'i, I>, State, TokenKind>
for PgsParser<'i, I, L, B>
where
    I: InputT + ?Sized + Debug,
    L: Lexer<'i, Context<'i, I>, State, TokenKind, Input = I>,
    B: LRBuilder<'i, I, Context<'i, I>, State, ProdKind, TokenKind>,
{
    type Output = B::Output;
    fn parse(&self, input: &'i I) -> Result<Self::Output> {
        self.0.parse(input)
    }
    fn parse_with_context(
        &self,
        context: &mut Context<'i, I>,
        input: &'i I,
    ) -> Result<Self::Output> {
        self.0.parse_with_context(context, input)
    }
    fn parse_file<'a, F: AsRef<std::path::Path>>(
        &'a mut self,
        file: F,
    ) -> Result<Self::Output>
    where
        'a: 'i,
    {
        self.0.parse_file(file)
    }
}
#[allow(dead_code)]
#[derive(Debug)]
pub enum Recognizer {
    Stop,
    StrMatch(&'static str),
    RegexMatch(Lazy<Regex>),
}
#[allow(dead_code)]
#[derive(Debug)]
pub struct TokenRecognizer(TokenKind, Recognizer);
impl<'i> TokenRecognizerT<'i> for TokenRecognizer {
    fn recognize(&self, input: &'i str) -> Option<&'i str> {
        match &self {
            #[allow(unused_variables)]
            TokenRecognizer(token_kind, Recognizer::StrMatch(s)) => {
                logn!("{} {:?} -- ", "    Recognizing".green(), token_kind);
                if input.starts_with(s) {
                    log!("{}", "recognized".bold().green());
                    Some(s)
                } else {
                    log!("{}", "not recognized".red());
                    None
                }
            }
            #[allow(unused_variables)]
            TokenRecognizer(token_kind, Recognizer::RegexMatch(r)) => {
                logn!("{} {:?} -- ", "    Recognizing".green(), token_kind);
                let match_str = r.find(input);
                match match_str {
                    Some(x) => {
                        let x_str = x.as_str();
                        log!("{} '{}'", "recognized".bold().green(), x_str);
                        Some(x_str)
                    }
                    _ => {
                        log!("{}", "not recognized".red());
                        None
                    }
                }
            }
            TokenRecognizer(_, Recognizer::Stop) => {
                logn!("{} STOP -- ", "    Recognizing".green());
                if input.is_empty() {
                    log!("{}", "recognized".bold().green());
                    Some("")
                } else {
                    log!("{}", "not recognized".red());
                    None
                }
            }
        }
    }
}
pub(crate) static RECOGNIZERS: [TokenRecognizer; TERMINAL_COUNT] = [
    TokenRecognizer(TokenKind::STOP, Recognizer::Stop),
    TokenRecognizer(
        TokenKind::WS,
        Recognizer::RegexMatch(
            Lazy::new(|| { Regex::new(concat!("^", "\\s+")).unwrap() }),
        ),
    ),
    TokenRecognizer(
        TokenKind::CommentLine,
        Recognizer::RegexMatch(
            Lazy::new(|| { Regex::new(concat!("^", "//.*")).unwrap() }),
        ),
    ),
    TokenRecognizer(
        TokenKind::NotComment,
        Recognizer::RegexMatch(
            Lazy::new(|| {
                Regex::new(concat!("^", "((\\*[^/])|[^\\s*/]|/[^\\*])+")).unwrap()
            }),
        ),
    ),
    TokenRecognizer(TokenKind::START_COMMENT, Recognizer::StrMatch("/*")),
    TokenRecognizer(TokenKind::END_COMMENT, Recognizer::StrMatch("*/")),
    TokenRecognizer(
        TokenKind::IDENTIFIER,
        Recognizer::RegexMatch(
            Lazy::new(|| { Regex::new(concat!("^", "[a-zA-Z_][0-9a-zA-Z_]*")).unwrap() }),
        ),
    ),
    TokenRecognizer(TokenKind::SEMICOLON, Recognizer::StrMatch(";")),
    TokenRecognizer(TokenKind::CREATE, Recognizer::StrMatch("CREATE")),
    TokenRecognizer(TokenKind::NODE, Recognizer::StrMatch("NODE")),
    TokenRecognizer(TokenKind::EDGE, Recognizer::StrMatch("EDGE")),
    TokenRecognizer(TokenKind::GRAPH, Recognizer::StrMatch("GRAPH")),
    TokenRecognizer(TokenKind::TYPE, Recognizer::StrMatch("TYPE")),
    TokenRecognizer(TokenKind::OPEN_PAREN, Recognizer::StrMatch("(")),
    TokenRecognizer(TokenKind::CLOSE_PAREN, Recognizer::StrMatch(")")),
    TokenRecognizer(TokenKind::OPEN_ARROW, Recognizer::StrMatch("-[")),
    TokenRecognizer(TokenKind::CLOSE_ARROW, Recognizer::StrMatch("]->")),
    TokenRecognizer(TokenKind::OPEN_CURLY, Recognizer::StrMatch("{")),
    TokenRecognizer(TokenKind::CLOSE_CURLY, Recognizer::StrMatch("}")),
    TokenRecognizer(TokenKind::COLON, Recognizer::StrMatch(":")),
    TokenRecognizer(TokenKind::COMMA, Recognizer::StrMatch(",")),
    TokenRecognizer(TokenKind::BAR, Recognizer::StrMatch("|")),
    TokenRecognizer(TokenKind::DOUBLE_BAR, Recognizer::StrMatch("||")),
    TokenRecognizer(TokenKind::PLUS, Recognizer::StrMatch("+")),
    TokenRecognizer(TokenKind::STAR, Recognizer::StrMatch("*")),
    TokenRecognizer(TokenKind::QUESTION, Recognizer::StrMatch("?")),
    TokenRecognizer(TokenKind::INTEGER_NAME, Recognizer::StrMatch("INTEGER")),
    TokenRecognizer(TokenKind::BOOL_NAME, Recognizer::StrMatch("BOOL")),
    TokenRecognizer(TokenKind::STRING_NAME, Recognizer::StrMatch("STRING")),
    TokenRecognizer(TokenKind::DATE_NAME, Recognizer::StrMatch("DATE")),
    TokenRecognizer(
        TokenKind::NUMBER,
        Recognizer::RegexMatch(
            Lazy::new(|| { Regex::new(concat!("^", "\\d+")).unwrap() }),
        ),
    ),
    TokenRecognizer(TokenKind::OPTIONAL, Recognizer::StrMatch("OPTIONAL")),
    TokenRecognizer(TokenKind::AMPERSAND, Recognizer::StrMatch("&")),
    TokenRecognizer(TokenKind::AT, Recognizer::StrMatch("@")),
    TokenRecognizer(TokenKind::CHECK, Recognizer::StrMatch("CHECK")),
    TokenRecognizer(TokenKind::TRUE, Recognizer::StrMatch("TRUE")),
    TokenRecognizer(TokenKind::FALSE, Recognizer::StrMatch("FALSE")),
    TokenRecognizer(TokenKind::GT, Recognizer::StrMatch(">")),
    TokenRecognizer(TokenKind::LT, Recognizer::StrMatch("<")),
    TokenRecognizer(TokenKind::GE, Recognizer::StrMatch(">=")),
    TokenRecognizer(TokenKind::LE, Recognizer::StrMatch("<=")),
    TokenRecognizer(TokenKind::EQUALS, Recognizer::StrMatch("=")),
    TokenRecognizer(
        TokenKind::QUOTED_STRING,
        Recognizer::RegexMatch(
            Lazy::new(|| { Regex::new(concat!("^", "\"((\\\\\")|[^\"])*\"")).unwrap() }),
        ),
    ),
    TokenRecognizer(TokenKind::REGEX, Recognizer::StrMatch("REGEX")),
    TokenRecognizer(TokenKind::AND, Recognizer::StrMatch("AND")),
    TokenRecognizer(TokenKind::OR, Recognizer::StrMatch("OR")),
    TokenRecognizer(TokenKind::NOT, Recognizer::StrMatch("NOT")),
    TokenRecognizer(TokenKind::ANY, Recognizer::StrMatch("ANY")),
    TokenRecognizer(TokenKind::DATE, Recognizer::StrMatch("DATE")),
    TokenRecognizer(TokenKind::STRICT, Recognizer::StrMatch("STRICT")),
    TokenRecognizer(TokenKind::LOOSE, Recognizer::StrMatch("LOOSE")),
    TokenRecognizer(TokenKind::ABSTRACT, Recognizer::StrMatch("ABSTRACT")),
    TokenRecognizer(TokenKind::IMPORTS, Recognizer::StrMatch("IMPORTS")),
];
pub struct DefaultBuilder {
    res_stack: Vec<Symbol>,
}
impl DefaultBuilder {
    #[allow(dead_code)]
    pub fn new() -> Self {
        Self { res_stack: vec![] }
    }
}
impl Builder for DefaultBuilder {
    type Output = pgs_actions::Pgs;
    fn get_result(&mut self) -> Self::Output {
        match self.res_stack.pop().unwrap() {
            Symbol::NonTerminal(NonTerminal::Pgs(r)) => r,
            _ => panic!("Invalid result on the parse stack!"),
        }
    }
}
impl<'i> LRBuilder<'i, Input, Context<'i, Input>, State, ProdKind, TokenKind>
for DefaultBuilder {
    #![allow(unused_variables)]
    fn shift_action(
        &mut self,
        context: &Context<'i, Input>,
        token: Token<'i, Input, TokenKind>,
    ) {
        let val = match token.kind {
            TokenKind::STOP => panic!("Cannot shift STOP token!"),
            TokenKind::IDENTIFIER => {
                Terminal::IDENTIFIER(pgs_actions::identifier(context, token))
            }
            TokenKind::SEMICOLON => Terminal::SEMICOLON,
            TokenKind::CREATE => Terminal::CREATE,
            TokenKind::NODE => Terminal::NODE,
            TokenKind::EDGE => Terminal::EDGE,
            TokenKind::GRAPH => Terminal::GRAPH,
            TokenKind::TYPE => Terminal::TYPE,
            TokenKind::OPEN_PAREN => Terminal::OPEN_PAREN,
            TokenKind::CLOSE_PAREN => Terminal::CLOSE_PAREN,
            TokenKind::OPEN_ARROW => Terminal::OPEN_ARROW,
            TokenKind::CLOSE_ARROW => Terminal::CLOSE_ARROW,
            TokenKind::OPEN_CURLY => Terminal::OPEN_CURLY,
            TokenKind::CLOSE_CURLY => Terminal::CLOSE_CURLY,
            TokenKind::COLON => Terminal::COLON,
            TokenKind::COMMA => Terminal::COMMA,
            TokenKind::BAR => Terminal::BAR,
            TokenKind::DOUBLE_BAR => Terminal::DOUBLE_BAR,
            TokenKind::PLUS => Terminal::PLUS,
            TokenKind::STAR => Terminal::STAR,
            TokenKind::QUESTION => Terminal::QUESTION,
            TokenKind::INTEGER_NAME => Terminal::INTEGER_NAME,
            TokenKind::BOOL_NAME => Terminal::BOOL_NAME,
            TokenKind::STRING_NAME => Terminal::STRING_NAME,
            TokenKind::DATE_NAME => Terminal::DATE_NAME,
            TokenKind::NUMBER => Terminal::NUMBER(pgs_actions::number(context, token)),
            TokenKind::OPTIONAL => Terminal::OPTIONAL,
            TokenKind::AMPERSAND => Terminal::AMPERSAND,
            TokenKind::AT => Terminal::AT,
            TokenKind::CHECK => Terminal::CHECK,
            TokenKind::TRUE => Terminal::TRUE,
            TokenKind::FALSE => Terminal::FALSE,
            TokenKind::GT => Terminal::GT,
            TokenKind::LT => Terminal::LT,
            TokenKind::GE => Terminal::GE,
            TokenKind::LE => Terminal::LE,
            TokenKind::EQUALS => Terminal::EQUALS,
            TokenKind::QUOTED_STRING => {
                Terminal::QUOTED_STRING(pgs_actions::quoted_string(context, token))
            }
            TokenKind::REGEX => Terminal::REGEX,
            TokenKind::AND => Terminal::AND,
            TokenKind::OR => Terminal::OR,
            TokenKind::NOT => Terminal::NOT,
            TokenKind::ANY => Terminal::ANY,
            TokenKind::DATE => Terminal::DATE,
            TokenKind::STRICT => Terminal::STRICT,
            TokenKind::LOOSE => Terminal::LOOSE,
            _ => panic!("Shift of unreachable terminal!"),
        };
        self.res_stack.push(Symbol::Terminal(val));
    }
    fn reduce_action(
        &mut self,
        context: &Context<'i, Input>,
        prod: ProdKind,
        prod_len: usize,
    ) {
        let prod = match prod {
            ProdKind::PgsP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::CreateType1(p0)) => {
                        NonTerminal::Pgs(pgs_actions::pgs_create_type1(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateType1P1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::CreateType1(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::CreateType(p1)),
                    ) => {
                        NonTerminal::CreateType1(
                            pgs_actions::create_type1_c1(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateType1P2 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::CreateType(p0)) => {
                        NonTerminal::CreateType1(
                            pgs_actions::create_type1_create_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::CreateNodeType(p0)) => {
                        NonTerminal::CreateType(
                            pgs_actions::create_type_create_node_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateTypeP2 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::CreateEdgeType(p0)) => {
                        NonTerminal::CreateType(
                            pgs_actions::create_type_create_edge_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateTypeP3 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::CreateGraphType(p0)) => {
                        NonTerminal::CreateType(
                            pgs_actions::create_type_create_graph_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateNodeTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 4usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (_, _, _, Symbol::NonTerminal(NonTerminal::NodeType(p0))) => {
                        NonTerminal::CreateNodeType(
                            pgs_actions::create_node_type_node_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateEdgeTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 4usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (_, _, _, Symbol::NonTerminal(NonTerminal::EdgeType(p0))) => {
                        NonTerminal::CreateEdgeType(
                            pgs_actions::create_edge_type_edge_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CreateGraphTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 4usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (_, _, _, Symbol::NonTerminal(NonTerminal::GraphType(p0))) => {
                        NonTerminal::CreateGraphType(
                            pgs_actions::create_graph_type_graph_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::NodeTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 4usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::TypeNameOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::LabelPropertySpec(p1)),
                        _,
                    ) => {
                        NonTerminal::NodeType(pgs_actions::node_type_c1(context, p0, p1))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::TypeNameOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::TypeName(p0)) => {
                        NonTerminal::TypeNameOpt(
                            pgs_actions::type_name_opt_type_name(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::TypeNameOptP2 => {
                NonTerminal::TypeNameOpt(pgs_actions::type_name_opt_empty(context))
            }
            ProdKind::EdgeTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 6usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (
                        Symbol::NonTerminal(NonTerminal::EndpointType(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::TypeNameOpt(p1)),
                        Symbol::NonTerminal(NonTerminal::LabelPropertySpec(p2)),
                        _,
                        Symbol::NonTerminal(NonTerminal::EndpointType(p3)),
                    ) => {
                        NonTerminal::EdgeType(
                            pgs_actions::edge_type_c1(context, p0, p1, p2, p3),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::GraphTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 5usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (
                        Symbol::NonTerminal(NonTerminal::TypeName(p0)),
                        Symbol::NonTerminal(NonTerminal::GraphTypeModeOpt(p1)),
                        _,
                        Symbol::NonTerminal(NonTerminal::GraphTypeElementsOpt(p2)),
                        _,
                    ) => {
                        NonTerminal::GraphType(
                            pgs_actions::graph_type_c1(context, p0, p1, p2),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::GraphTypeModeOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::GraphTypeMode(p0)) => {
                        NonTerminal::GraphTypeModeOpt(
                            pgs_actions::graph_type_mode_opt_graph_type_mode(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::GraphTypeModeOptP2 => {
                NonTerminal::GraphTypeModeOpt(
                    pgs_actions::graph_type_mode_opt_empty(context),
                )
            }
            ProdKind::GraphTypeElementsOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::GraphTypeElements(p0)) => {
                        NonTerminal::GraphTypeElementsOpt(
                            pgs_actions::graph_type_elements_opt_graph_type_elements(
                                context,
                                p0,
                            ),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::GraphTypeElementsOptP2 => {
                NonTerminal::GraphTypeElementsOpt(
                    pgs_actions::graph_type_elements_opt_empty(context),
                )
            }
            ProdKind::GraphTypeModeP1 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::GraphTypeMode(pgs_actions::graph_type_mode_strict(context))
            }
            ProdKind::GraphTypeModeP2 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::GraphTypeMode(pgs_actions::graph_type_mode_loose(context))
            }
            ProdKind::GraphTypeElementsP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::TypeName(p0)) => {
                        NonTerminal::GraphTypeElements(
                            pgs_actions::graph_type_elements_type_name(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::GraphTypeElementsP2 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::NodeType(p0)) => {
                        NonTerminal::GraphTypeElements(
                            pgs_actions::graph_type_elements_node_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::GraphTypeElementsP3 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::EdgeType(p0)) => {
                        NonTerminal::GraphTypeElements(
                            pgs_actions::graph_type_elements_edge_type(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::TypeNameP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::Terminal(Terminal::IDENTIFIER(p0)) => {
                        NonTerminal::TypeName(
                            pgs_actions::type_name_identifier(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::EndpointTypeP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::LabelPropertySpec(p0)), _) => {
                        NonTerminal::EndpointType(
                            pgs_actions::endpoint_type_label_property_spec(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::LabelPropertySpecP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::LabelSpecOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::PropertySpecOpt(p1)),
                    ) => {
                        NonTerminal::LabelPropertySpec(
                            pgs_actions::label_property_spec_c1(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::LabelSpecOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::LabelSpec(p0)) => {
                        NonTerminal::LabelSpecOpt(
                            pgs_actions::label_spec_opt_label_spec(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::LabelSpecOptP2 => {
                NonTerminal::LabelSpecOpt(pgs_actions::label_spec_opt_empty(context))
            }
            ProdKind::PropertySpecOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::PropertySpec(p0)) => {
                        NonTerminal::PropertySpecOpt(
                            pgs_actions::property_spec_opt_property_spec(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::PropertySpecOptP2 => {
                NonTerminal::PropertySpecOpt(
                    pgs_actions::property_spec_opt_empty(context),
                )
            }
            ProdKind::LabelSpecP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Labels(p0))) => {
                        NonTerminal::LabelSpec(
                            pgs_actions::label_spec_labels(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::LabelsP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::SingleLabel(p0)),
                        Symbol::NonTerminal(NonTerminal::MoreLabelsOpt(p1)),
                    ) => NonTerminal::Labels(pgs_actions::labels_c1(context, p0, p1)),
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MoreLabelsOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::MoreLabels(p0)) => {
                        NonTerminal::MoreLabelsOpt(
                            pgs_actions::more_labels_opt_more_labels(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MoreLabelsOptP2 => {
                NonTerminal::MoreLabelsOpt(pgs_actions::more_labels_opt_empty(context))
            }
            ProdKind::MoreLabelsAndLabels => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::SingleLabel(p0)),
                        Symbol::NonTerminal(NonTerminal::MoreLabelsOpt(p1)),
                    ) => {
                        NonTerminal::MoreLabels(
                            pgs_actions::more_labels_and_labels(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MoreLabelsOrLabels => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::SingleLabel(p0)),
                        Symbol::NonTerminal(NonTerminal::MoreLabelsOpt(p1)),
                    ) => {
                        NonTerminal::MoreLabels(
                            pgs_actions::more_labels_or_labels(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SingleLabelSingleLabel => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::Terminal(Terminal::IDENTIFIER(p0)) => {
                        NonTerminal::SingleLabel(
                            pgs_actions::single_label_single_label(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SingleLabelTypeName => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::Terminal(Terminal::IDENTIFIER(p0))) => {
                        NonTerminal::SingleLabel(
                            pgs_actions::single_label_type_name(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::PropertySpecP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Properties(p0)), _) => {
                        NonTerminal::PropertySpec(
                            pgs_actions::property_spec_properties(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::PropertiesEachOf => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::Properties(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::Properties(p1)),
                    ) => {
                        NonTerminal::Properties(
                            pgs_actions::properties_each_of(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::PropertiesOneOf => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::Properties(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::Properties(p1)),
                    ) => {
                        NonTerminal::Properties(
                            pgs_actions::properties_one_of(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::PropertiesParen => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Properties(p0)), _) => {
                        NonTerminal::Properties(
                            pgs_actions::properties_paren(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::PropertiesBaseProperty => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::OPTIONALOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::Property(p1)),
                    ) => {
                        NonTerminal::Properties(
                            pgs_actions::properties_base_property(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::OPTIONALOptP1 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::OPTIONALOpt(pgs_actions::optionalopt_optional(context))
            }
            ProdKind::OPTIONALOptP2 => {
                NonTerminal::OPTIONALOpt(pgs_actions::optionalopt_empty(context))
            }
            ProdKind::PropertyP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::key(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::TypeSpec(p1)),
                    ) => NonTerminal::Property(pgs_actions::property_c1(context, p0, p1)),
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::keyP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::Terminal(Terminal::IDENTIFIER(p0)) => {
                        NonTerminal::key(pgs_actions::key_identifier(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::TypeSpecP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::SimpleType(p0)),
                        Symbol::NonTerminal(NonTerminal::MoreTypesOpt(p1)),
                    ) => {
                        NonTerminal::TypeSpec(pgs_actions::type_spec_c1(context, p0, p1))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MoreTypesOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::MoreTypes(p0)) => {
                        NonTerminal::MoreTypesOpt(
                            pgs_actions::more_types_opt_more_types(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MoreTypesOptP2 => {
                NonTerminal::MoreTypesOpt(pgs_actions::more_types_opt_empty(context))
            }
            ProdKind::MoreTypesIntersectionType => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::SimpleType(p0)),
                        Symbol::NonTerminal(NonTerminal::MoreTypesOpt(p1)),
                    ) => {
                        NonTerminal::MoreTypes(
                            pgs_actions::more_types_intersection_type(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MoreTypesUnionType => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::SimpleType(p0)),
                        Symbol::NonTerminal(NonTerminal::MoreTypesOpt(p1)),
                    ) => {
                        NonTerminal::MoreTypes(
                            pgs_actions::more_types_union_type(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SimpleTypeStringSpec => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::CardOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::CheckOpt(p1)),
                    ) => {
                        NonTerminal::SimpleType(
                            pgs_actions::simple_type_string_spec(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CardOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::Card(p0)) => {
                        NonTerminal::CardOpt(pgs_actions::card_opt_card(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CardOptP2 => {
                NonTerminal::CardOpt(pgs_actions::card_opt_empty(context))
            }
            ProdKind::CheckOptP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::Check(p0)) => {
                        NonTerminal::CheckOpt(pgs_actions::check_opt_check(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CheckOptP2 => {
                NonTerminal::CheckOpt(pgs_actions::check_opt_empty(context))
            }
            ProdKind::SimpleTypeInteger => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::CardOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::CheckOpt(p1)),
                    ) => {
                        NonTerminal::SimpleType(
                            pgs_actions::simple_type_integer(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SimpleTypeDate => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::CardOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::CheckOpt(p1)),
                    ) => {
                        NonTerminal::SimpleType(
                            pgs_actions::simple_type_date(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SimpleTypeBool => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        _,
                        Symbol::NonTerminal(NonTerminal::CardOpt(p0)),
                        Symbol::NonTerminal(NonTerminal::CheckOpt(p1)),
                    ) => {
                        NonTerminal::SimpleType(
                            pgs_actions::simple_type_bool(context, p0, p1),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SimpleTypeAny => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::CheckOpt(p0))) => {
                        NonTerminal::SimpleType(
                            pgs_actions::simple_type_any(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SimpleTypeCond => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Cond(p0))) => {
                        NonTerminal::SimpleType(
                            pgs_actions::simple_type_cond(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CheckP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Cond(p0))) => {
                        NonTerminal::Check(pgs_actions::check_cond(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondP1 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::Cond(pgs_actions::cond_true(context))
            }
            ProdKind::CondP2 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::Cond(pgs_actions::cond_false(context))
            }
            ProdKind::CondGT => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::SingleValue(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_gt(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondGE => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::SingleValue(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_ge(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondLT => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::SingleValue(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_lt(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondLE => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::SingleValue(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_le(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondEQ => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::SingleValue(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_eq(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondRegex => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::Terminal(Terminal::QUOTED_STRING(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_regex(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondAnd => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::Cond(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::Cond(p1)),
                    ) => NonTerminal::Cond(pgs_actions::cond_and(context, p0, p1)),
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondOR => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (
                        Symbol::NonTerminal(NonTerminal::Cond(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::Cond(p1)),
                    ) => NonTerminal::Cond(pgs_actions::cond_or(context, p0, p1)),
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondNot => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Cond(p0))) => {
                        NonTerminal::Cond(pgs_actions::cond_not(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CondParenCond => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 3usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::NonTerminal(NonTerminal::Cond(p0)), _) => {
                        NonTerminal::Cond(pgs_actions::cond_paren_cond(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::CardOptional => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::Card(pgs_actions::card_optional(context))
            }
            ProdKind::CardOneOrMore => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::Card(pgs_actions::card_one_or_more(context))
            }
            ProdKind::CardZeroOrMore => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::Card(pgs_actions::card_zero_or_more(context))
            }
            ProdKind::CardRange => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 5usize)
                    .into_iter();
                match (
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                    i.next().unwrap(),
                ) {
                    (
                        _,
                        Symbol::Terminal(Terminal::NUMBER(p0)),
                        _,
                        Symbol::NonTerminal(NonTerminal::Max(p1)),
                        _,
                    ) => NonTerminal::Card(pgs_actions::card_range(context, p0, p1)),
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MaxP1 => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::Terminal(Terminal::NUMBER(p0)) => {
                        NonTerminal::Max(pgs_actions::max_number(context, p0))
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::MaxStar => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::Max(pgs_actions::max_star(context))
            }
            ProdKind::SingleValueStringValue => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::Terminal(Terminal::QUOTED_STRING(p0)) => {
                        NonTerminal::SingleValue(
                            pgs_actions::single_value_string_value(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SingleValueNumberValue => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::Terminal(Terminal::NUMBER(p0)) => {
                        NonTerminal::SingleValue(
                            pgs_actions::single_value_number_value(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SingleValueDateValue => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 2usize)
                    .into_iter();
                match (i.next().unwrap(), i.next().unwrap()) {
                    (_, Symbol::Terminal(Terminal::QUOTED_STRING(p0))) => {
                        NonTerminal::SingleValue(
                            pgs_actions::single_value_date_value(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::SingleValueBooleanValue => {
                let mut i = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                match i.next().unwrap() {
                    Symbol::NonTerminal(NonTerminal::BOOL(p0)) => {
                        NonTerminal::SingleValue(
                            pgs_actions::single_value_boolean_value(context, p0),
                        )
                    }
                    _ => panic!("Invalid symbol parse stack data."),
                }
            }
            ProdKind::BOOLP1 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::BOOL(pgs_actions::bool_true(context))
            }
            ProdKind::BOOLP2 => {
                let _ = self
                    .res_stack
                    .split_off(self.res_stack.len() - 1usize)
                    .into_iter();
                NonTerminal::BOOL(pgs_actions::bool_false(context))
            }
            _ => panic!("Reduce of unreachable nonterminal!"),
        };
        self.res_stack.push(Symbol::NonTerminal(prod));
    }
}
