#![allow(clippy::enum_variant_names)]
#![allow(clippy::large_enum_variant)]
#![allow(clippy::upper_case_acronyms)]
use parol_runtime::derive_builder::Builder;
use parol_runtime::log::trace;
#[allow(unused_imports)]
use parol_runtime::parol_macros::{pop_and_reverse_item, pop_item};
use parol_runtime::parser::{ParseTreeType, UserActionsTrait};
use parol_runtime::{ParserError, Result, Token};
use std::marker::PhantomData;
pub trait VerylGrammarTrait {
    fn comments_term(&mut self, _arg: &CommentsTerm) -> Result<()> {
        Ok(())
    }
    fn string_literal_term(&mut self, _arg: &StringLiteralTerm) -> Result<()> {
        Ok(())
    }
    fn exponent_term(&mut self, _arg: &ExponentTerm) -> Result<()> {
        Ok(())
    }
    fn fixed_point_term(&mut self, _arg: &FixedPointTerm) -> Result<()> {
        Ok(())
    }
    fn based_term(&mut self, _arg: &BasedTerm) -> Result<()> {
        Ok(())
    }
    fn all_bit_term(&mut self, _arg: &AllBitTerm) -> Result<()> {
        Ok(())
    }
    fn base_less_term(&mut self, _arg: &BaseLessTerm) -> Result<()> {
        Ok(())
    }
    fn minus_colon_term(&mut self, _arg: &MinusColonTerm) -> Result<()> {
        Ok(())
    }
    fn minus_g_t_term(&mut self, _arg: &MinusGTTerm) -> Result<()> {
        Ok(())
    }
    fn plus_colon_term(&mut self, _arg: &PlusColonTerm) -> Result<()> {
        Ok(())
    }
    fn assignment_operator_term(&mut self, _arg: &AssignmentOperatorTerm) -> Result<()> {
        Ok(())
    }
    fn operator11_term(&mut self, _arg: &Operator11Term) -> Result<()> {
        Ok(())
    }
    fn operator10_term(&mut self, _arg: &Operator10Term) -> Result<()> {
        Ok(())
    }
    fn operator09_term(&mut self, _arg: &Operator09Term) -> Result<()> {
        Ok(())
    }
    fn operator08_term(&mut self, _arg: &Operator08Term) -> Result<()> {
        Ok(())
    }
    fn operator07_term(&mut self, _arg: &Operator07Term) -> Result<()> {
        Ok(())
    }
    fn operator06_term(&mut self, _arg: &Operator06Term) -> Result<()> {
        Ok(())
    }
    fn operator02_term(&mut self, _arg: &Operator02Term) -> Result<()> {
        Ok(())
    }
    fn operator01_term(&mut self, _arg: &Operator01Term) -> Result<()> {
        Ok(())
    }
    fn operator05_term(&mut self, _arg: &Operator05Term) -> Result<()> {
        Ok(())
    }
    fn operator04_term(&mut self, _arg: &Operator04Term) -> Result<()> {
        Ok(())
    }
    fn operator03_term(&mut self, _arg: &Operator03Term) -> Result<()> {
        Ok(())
    }
    fn unary_operator_term(&mut self, _arg: &UnaryOperatorTerm) -> Result<()> {
        Ok(())
    }
    fn back_quote_term(&mut self, _arg: &BackQuoteTerm) -> Result<()> {
        Ok(())
    }
    fn colon_colon_l_angle_term(&mut self, _arg: &ColonColonLAngleTerm) -> Result<()> {
        Ok(())
    }
    fn colon_colon_term(&mut self, _arg: &ColonColonTerm) -> Result<()> {
        Ok(())
    }
    fn colon_term(&mut self, _arg: &ColonTerm) -> Result<()> {
        Ok(())
    }
    fn comma_term(&mut self, _arg: &CommaTerm) -> Result<()> {
        Ok(())
    }
    fn dot_dot_equ_term(&mut self, _arg: &DotDotEquTerm) -> Result<()> {
        Ok(())
    }
    fn dot_dot_term(&mut self, _arg: &DotDotTerm) -> Result<()> {
        Ok(())
    }
    fn dot_term(&mut self, _arg: &DotTerm) -> Result<()> {
        Ok(())
    }
    fn equ_term(&mut self, _arg: &EquTerm) -> Result<()> {
        Ok(())
    }
    fn hash_term(&mut self, _arg: &HashTerm) -> Result<()> {
        Ok(())
    }
    fn l_angle_term(&mut self, _arg: &LAngleTerm) -> Result<()> {
        Ok(())
    }
    fn quote_l_brace_term(&mut self, _arg: &QuoteLBraceTerm) -> Result<()> {
        Ok(())
    }
    fn l_brace_term(&mut self, _arg: &LBraceTerm) -> Result<()> {
        Ok(())
    }
    fn l_bracket_term(&mut self, _arg: &LBracketTerm) -> Result<()> {
        Ok(())
    }
    fn l_paren_term(&mut self, _arg: &LParenTerm) -> Result<()> {
        Ok(())
    }
    fn r_angle_term(&mut self, _arg: &RAngleTerm) -> Result<()> {
        Ok(())
    }
    fn r_brace_term(&mut self, _arg: &RBraceTerm) -> Result<()> {
        Ok(())
    }
    fn r_bracket_term(&mut self, _arg: &RBracketTerm) -> Result<()> {
        Ok(())
    }
    fn r_paren_term(&mut self, _arg: &RParenTerm) -> Result<()> {
        Ok(())
    }
    fn semicolon_term(&mut self, _arg: &SemicolonTerm) -> Result<()> {
        Ok(())
    }
    fn star_term(&mut self, _arg: &StarTerm) -> Result<()> {
        Ok(())
    }
    fn always_comb_term(&mut self, _arg: &AlwaysCombTerm) -> Result<()> {
        Ok(())
    }
    fn always_ff_term(&mut self, _arg: &AlwaysFfTerm) -> Result<()> {
        Ok(())
    }
    fn assign_term(&mut self, _arg: &AssignTerm) -> Result<()> {
        Ok(())
    }
    fn as_term(&mut self, _arg: &AsTerm) -> Result<()> {
        Ok(())
    }
    fn bit_term(&mut self, _arg: &BitTerm) -> Result<()> {
        Ok(())
    }
    fn case_term(&mut self, _arg: &CaseTerm) -> Result<()> {
        Ok(())
    }
    fn clock_term(&mut self, _arg: &ClockTerm) -> Result<()> {
        Ok(())
    }
    fn clock_posedge_term(&mut self, _arg: &ClockPosedgeTerm) -> Result<()> {
        Ok(())
    }
    fn clock_negedge_term(&mut self, _arg: &ClockNegedgeTerm) -> Result<()> {
        Ok(())
    }
    fn const_term(&mut self, _arg: &ConstTerm) -> Result<()> {
        Ok(())
    }
    fn default_term(&mut self, _arg: &DefaultTerm) -> Result<()> {
        Ok(())
    }
    fn else_term(&mut self, _arg: &ElseTerm) -> Result<()> {
        Ok(())
    }
    fn embed_term(&mut self, _arg: &EmbedTerm) -> Result<()> {
        Ok(())
    }
    fn enum_term(&mut self, _arg: &EnumTerm) -> Result<()> {
        Ok(())
    }
    fn export_term(&mut self, _arg: &ExportTerm) -> Result<()> {
        Ok(())
    }
    fn f32_term(&mut self, _arg: &F32Term) -> Result<()> {
        Ok(())
    }
    fn f64_term(&mut self, _arg: &F64Term) -> Result<()> {
        Ok(())
    }
    fn final_term(&mut self, _arg: &FinalTerm) -> Result<()> {
        Ok(())
    }
    fn for_term(&mut self, _arg: &ForTerm) -> Result<()> {
        Ok(())
    }
    fn function_term(&mut self, _arg: &FunctionTerm) -> Result<()> {
        Ok(())
    }
    fn i32_term(&mut self, _arg: &I32Term) -> Result<()> {
        Ok(())
    }
    fn i64_term(&mut self, _arg: &I64Term) -> Result<()> {
        Ok(())
    }
    fn if_reset_term(&mut self, _arg: &IfResetTerm) -> Result<()> {
        Ok(())
    }
    fn if_term(&mut self, _arg: &IfTerm) -> Result<()> {
        Ok(())
    }
    fn import_term(&mut self, _arg: &ImportTerm) -> Result<()> {
        Ok(())
    }
    fn include_term(&mut self, _arg: &IncludeTerm) -> Result<()> {
        Ok(())
    }
    fn initial_term(&mut self, _arg: &InitialTerm) -> Result<()> {
        Ok(())
    }
    fn inout_term(&mut self, _arg: &InoutTerm) -> Result<()> {
        Ok(())
    }
    fn input_term(&mut self, _arg: &InputTerm) -> Result<()> {
        Ok(())
    }
    fn inside_term(&mut self, _arg: &InsideTerm) -> Result<()> {
        Ok(())
    }
    fn inst_term(&mut self, _arg: &InstTerm) -> Result<()> {
        Ok(())
    }
    fn interface_term(&mut self, _arg: &InterfaceTerm) -> Result<()> {
        Ok(())
    }
    fn in_term(&mut self, _arg: &InTerm) -> Result<()> {
        Ok(())
    }
    fn let_term(&mut self, _arg: &LetTerm) -> Result<()> {
        Ok(())
    }
    fn logic_term(&mut self, _arg: &LogicTerm) -> Result<()> {
        Ok(())
    }
    fn lsb_term(&mut self, _arg: &LsbTerm) -> Result<()> {
        Ok(())
    }
    fn modport_term(&mut self, _arg: &ModportTerm) -> Result<()> {
        Ok(())
    }
    fn module_term(&mut self, _arg: &ModuleTerm) -> Result<()> {
        Ok(())
    }
    fn msb_term(&mut self, _arg: &MsbTerm) -> Result<()> {
        Ok(())
    }
    fn output_term(&mut self, _arg: &OutputTerm) -> Result<()> {
        Ok(())
    }
    fn outside_term(&mut self, _arg: &OutsideTerm) -> Result<()> {
        Ok(())
    }
    fn package_term(&mut self, _arg: &PackageTerm) -> Result<()> {
        Ok(())
    }
    fn param_term(&mut self, _arg: &ParamTerm) -> Result<()> {
        Ok(())
    }
    fn proto_term(&mut self, _arg: &ProtoTerm) -> Result<()> {
        Ok(())
    }
    fn pub_term(&mut self, _arg: &PubTerm) -> Result<()> {
        Ok(())
    }
    fn ref_term(&mut self, _arg: &RefTerm) -> Result<()> {
        Ok(())
    }
    fn repeat_term(&mut self, _arg: &RepeatTerm) -> Result<()> {
        Ok(())
    }
    fn reset_term(&mut self, _arg: &ResetTerm) -> Result<()> {
        Ok(())
    }
    fn reset_async_high_term(&mut self, _arg: &ResetAsyncHighTerm) -> Result<()> {
        Ok(())
    }
    fn reset_async_low_term(&mut self, _arg: &ResetAsyncLowTerm) -> Result<()> {
        Ok(())
    }
    fn reset_sync_high_term(&mut self, _arg: &ResetSyncHighTerm) -> Result<()> {
        Ok(())
    }
    fn reset_sync_low_term(&mut self, _arg: &ResetSyncLowTerm) -> Result<()> {
        Ok(())
    }
    fn return_term(&mut self, _arg: &ReturnTerm) -> Result<()> {
        Ok(())
    }
    fn break_term(&mut self, _arg: &BreakTerm) -> Result<()> {
        Ok(())
    }
    fn signed_term(&mut self, _arg: &SignedTerm) -> Result<()> {
        Ok(())
    }
    fn step_term(&mut self, _arg: &StepTerm) -> Result<()> {
        Ok(())
    }
    fn string_term(&mut self, _arg: &StringTerm) -> Result<()> {
        Ok(())
    }
    fn struct_term(&mut self, _arg: &StructTerm) -> Result<()> {
        Ok(())
    }
    fn switch_term(&mut self, _arg: &SwitchTerm) -> Result<()> {
        Ok(())
    }
    fn tri_term(&mut self, _arg: &TriTerm) -> Result<()> {
        Ok(())
    }
    fn type_term(&mut self, _arg: &TypeTerm) -> Result<()> {
        Ok(())
    }
    fn u32_term(&mut self, _arg: &U32Term) -> Result<()> {
        Ok(())
    }
    fn u64_term(&mut self, _arg: &U64Term) -> Result<()> {
        Ok(())
    }
    fn union_term(&mut self, _arg: &UnionTerm) -> Result<()> {
        Ok(())
    }
    fn unsafe_term(&mut self, _arg: &UnsafeTerm) -> Result<()> {
        Ok(())
    }
    fn var_term(&mut self, _arg: &VarTerm) -> Result<()> {
        Ok(())
    }
    fn dollar_identifier_term(&mut self, _arg: &DollarIdentifierTerm) -> Result<()> {
        Ok(())
    }
    fn identifier_term(&mut self, _arg: &IdentifierTerm) -> Result<()> {
        Ok(())
    }
    fn any_term(&mut self, _arg: &AnyTerm) -> Result<()> {
        Ok(())
    }
    fn comments(&mut self, _arg: &Comments) -> Result<()> {
        Ok(())
    }
    fn start_token(&mut self, _arg: &StartToken) -> Result<()> {
        Ok(())
    }
    fn string_literal_token(&mut self, _arg: &StringLiteralToken) -> Result<()> {
        Ok(())
    }
    fn exponent_token(&mut self, _arg: &ExponentToken) -> Result<()> {
        Ok(())
    }
    fn fixed_point_token(&mut self, _arg: &FixedPointToken) -> Result<()> {
        Ok(())
    }
    fn based_token(&mut self, _arg: &BasedToken) -> Result<()> {
        Ok(())
    }
    fn base_less_token(&mut self, _arg: &BaseLessToken) -> Result<()> {
        Ok(())
    }
    fn all_bit_token(&mut self, _arg: &AllBitToken) -> Result<()> {
        Ok(())
    }
    fn assignment_operator_token(&mut self, _arg: &AssignmentOperatorToken) -> Result<()> {
        Ok(())
    }
    fn operator01_token(&mut self, _arg: &Operator01Token) -> Result<()> {
        Ok(())
    }
    fn operator02_token(&mut self, _arg: &Operator02Token) -> Result<()> {
        Ok(())
    }
    fn operator03_token(&mut self, _arg: &Operator03Token) -> Result<()> {
        Ok(())
    }
    fn operator04_token(&mut self, _arg: &Operator04Token) -> Result<()> {
        Ok(())
    }
    fn operator05_token(&mut self, _arg: &Operator05Token) -> Result<()> {
        Ok(())
    }
    fn operator06_token(&mut self, _arg: &Operator06Token) -> Result<()> {
        Ok(())
    }
    fn operator07_token(&mut self, _arg: &Operator07Token) -> Result<()> {
        Ok(())
    }
    fn operator08_token(&mut self, _arg: &Operator08Token) -> Result<()> {
        Ok(())
    }
    fn operator09_token(&mut self, _arg: &Operator09Token) -> Result<()> {
        Ok(())
    }
    fn operator10_token(&mut self, _arg: &Operator10Token) -> Result<()> {
        Ok(())
    }
    fn operator11_token(&mut self, _arg: &Operator11Token) -> Result<()> {
        Ok(())
    }
    fn unary_operator_token(&mut self, _arg: &UnaryOperatorToken) -> Result<()> {
        Ok(())
    }
    fn back_quote_token(&mut self, _arg: &BackQuoteToken) -> Result<()> {
        Ok(())
    }
    fn colon_token(&mut self, _arg: &ColonToken) -> Result<()> {
        Ok(())
    }
    fn colon_colon_l_angle_token(&mut self, _arg: &ColonColonLAngleToken) -> Result<()> {
        Ok(())
    }
    fn colon_colon_token(&mut self, _arg: &ColonColonToken) -> Result<()> {
        Ok(())
    }
    fn comma_token(&mut self, _arg: &CommaToken) -> Result<()> {
        Ok(())
    }
    fn dot_dot_token(&mut self, _arg: &DotDotToken) -> Result<()> {
        Ok(())
    }
    fn dot_dot_equ_token(&mut self, _arg: &DotDotEquToken) -> Result<()> {
        Ok(())
    }
    fn dot_token(&mut self, _arg: &DotToken) -> Result<()> {
        Ok(())
    }
    fn equ_token(&mut self, _arg: &EquToken) -> Result<()> {
        Ok(())
    }
    fn hash_token(&mut self, _arg: &HashToken) -> Result<()> {
        Ok(())
    }
    fn quote_l_brace_token(&mut self, _arg: &QuoteLBraceToken) -> Result<()> {
        Ok(())
    }
    fn l_angle_token(&mut self, _arg: &LAngleToken) -> Result<()> {
        Ok(())
    }
    fn l_brace_token(&mut self, _arg: &LBraceToken) -> Result<()> {
        Ok(())
    }
    fn l_bracket_token(&mut self, _arg: &LBracketToken) -> Result<()> {
        Ok(())
    }
    fn l_paren_token(&mut self, _arg: &LParenToken) -> Result<()> {
        Ok(())
    }
    fn minus_colon_token(&mut self, _arg: &MinusColonToken) -> Result<()> {
        Ok(())
    }
    fn minus_g_t_token(&mut self, _arg: &MinusGTToken) -> Result<()> {
        Ok(())
    }
    fn plus_colon_token(&mut self, _arg: &PlusColonToken) -> Result<()> {
        Ok(())
    }
    fn r_angle_token(&mut self, _arg: &RAngleToken) -> Result<()> {
        Ok(())
    }
    fn r_brace_token(&mut self, _arg: &RBraceToken) -> Result<()> {
        Ok(())
    }
    fn r_bracket_token(&mut self, _arg: &RBracketToken) -> Result<()> {
        Ok(())
    }
    fn r_paren_token(&mut self, _arg: &RParenToken) -> Result<()> {
        Ok(())
    }
    fn semicolon_token(&mut self, _arg: &SemicolonToken) -> Result<()> {
        Ok(())
    }
    fn star_token(&mut self, _arg: &StarToken) -> Result<()> {
        Ok(())
    }
    fn always_comb_token(&mut self, _arg: &AlwaysCombToken) -> Result<()> {
        Ok(())
    }
    fn always_ff_token(&mut self, _arg: &AlwaysFfToken) -> Result<()> {
        Ok(())
    }
    fn as_token(&mut self, _arg: &AsToken) -> Result<()> {
        Ok(())
    }
    fn assign_token(&mut self, _arg: &AssignToken) -> Result<()> {
        Ok(())
    }
    fn bit_token(&mut self, _arg: &BitToken) -> Result<()> {
        Ok(())
    }
    fn case_token(&mut self, _arg: &CaseToken) -> Result<()> {
        Ok(())
    }
    fn clock_token(&mut self, _arg: &ClockToken) -> Result<()> {
        Ok(())
    }
    fn clock_posedge_token(&mut self, _arg: &ClockPosedgeToken) -> Result<()> {
        Ok(())
    }
    fn clock_negedge_token(&mut self, _arg: &ClockNegedgeToken) -> Result<()> {
        Ok(())
    }
    fn const_token(&mut self, _arg: &ConstToken) -> Result<()> {
        Ok(())
    }
    fn default_token(&mut self, _arg: &DefaultToken) -> Result<()> {
        Ok(())
    }
    fn else_token(&mut self, _arg: &ElseToken) -> Result<()> {
        Ok(())
    }
    fn embed_token(&mut self, _arg: &EmbedToken) -> Result<()> {
        Ok(())
    }
    fn enum_token(&mut self, _arg: &EnumToken) -> Result<()> {
        Ok(())
    }
    fn export_token(&mut self, _arg: &ExportToken) -> Result<()> {
        Ok(())
    }
    fn f32_token(&mut self, _arg: &F32Token) -> Result<()> {
        Ok(())
    }
    fn f64_token(&mut self, _arg: &F64Token) -> Result<()> {
        Ok(())
    }
    fn final_token(&mut self, _arg: &FinalToken) -> Result<()> {
        Ok(())
    }
    fn for_token(&mut self, _arg: &ForToken) -> Result<()> {
        Ok(())
    }
    fn function_token(&mut self, _arg: &FunctionToken) -> Result<()> {
        Ok(())
    }
    fn i32_token(&mut self, _arg: &I32Token) -> Result<()> {
        Ok(())
    }
    fn i64_token(&mut self, _arg: &I64Token) -> Result<()> {
        Ok(())
    }
    fn if_reset_token(&mut self, _arg: &IfResetToken) -> Result<()> {
        Ok(())
    }
    fn if_token(&mut self, _arg: &IfToken) -> Result<()> {
        Ok(())
    }
    fn import_token(&mut self, _arg: &ImportToken) -> Result<()> {
        Ok(())
    }
    fn include_token(&mut self, _arg: &IncludeToken) -> Result<()> {
        Ok(())
    }
    fn initial_token(&mut self, _arg: &InitialToken) -> Result<()> {
        Ok(())
    }
    fn inout_token(&mut self, _arg: &InoutToken) -> Result<()> {
        Ok(())
    }
    fn input_token(&mut self, _arg: &InputToken) -> Result<()> {
        Ok(())
    }
    fn inside_token(&mut self, _arg: &InsideToken) -> Result<()> {
        Ok(())
    }
    fn inst_token(&mut self, _arg: &InstToken) -> Result<()> {
        Ok(())
    }
    fn interface_token(&mut self, _arg: &InterfaceToken) -> Result<()> {
        Ok(())
    }
    fn in_token(&mut self, _arg: &InToken) -> Result<()> {
        Ok(())
    }
    fn let_token(&mut self, _arg: &LetToken) -> Result<()> {
        Ok(())
    }
    fn logic_token(&mut self, _arg: &LogicToken) -> Result<()> {
        Ok(())
    }
    fn lsb_token(&mut self, _arg: &LsbToken) -> Result<()> {
        Ok(())
    }
    fn modport_token(&mut self, _arg: &ModportToken) -> Result<()> {
        Ok(())
    }
    fn module_token(&mut self, _arg: &ModuleToken) -> Result<()> {
        Ok(())
    }
    fn msb_token(&mut self, _arg: &MsbToken) -> Result<()> {
        Ok(())
    }
    fn output_token(&mut self, _arg: &OutputToken) -> Result<()> {
        Ok(())
    }
    fn outside_token(&mut self, _arg: &OutsideToken) -> Result<()> {
        Ok(())
    }
    fn package_token(&mut self, _arg: &PackageToken) -> Result<()> {
        Ok(())
    }
    fn param_token(&mut self, _arg: &ParamToken) -> Result<()> {
        Ok(())
    }
    fn proto_token(&mut self, _arg: &ProtoToken) -> Result<()> {
        Ok(())
    }
    fn pub_token(&mut self, _arg: &PubToken) -> Result<()> {
        Ok(())
    }
    fn ref_token(&mut self, _arg: &RefToken) -> Result<()> {
        Ok(())
    }
    fn repeat_token(&mut self, _arg: &RepeatToken) -> Result<()> {
        Ok(())
    }
    fn reset_token(&mut self, _arg: &ResetToken) -> Result<()> {
        Ok(())
    }
    fn reset_async_high_token(&mut self, _arg: &ResetAsyncHighToken) -> Result<()> {
        Ok(())
    }
    fn reset_async_low_token(&mut self, _arg: &ResetAsyncLowToken) -> Result<()> {
        Ok(())
    }
    fn reset_sync_high_token(&mut self, _arg: &ResetSyncHighToken) -> Result<()> {
        Ok(())
    }
    fn reset_sync_low_token(&mut self, _arg: &ResetSyncLowToken) -> Result<()> {
        Ok(())
    }
    fn return_token(&mut self, _arg: &ReturnToken) -> Result<()> {
        Ok(())
    }
    fn break_token(&mut self, _arg: &BreakToken) -> Result<()> {
        Ok(())
    }
    fn signed_token(&mut self, _arg: &SignedToken) -> Result<()> {
        Ok(())
    }
    fn step_token(&mut self, _arg: &StepToken) -> Result<()> {
        Ok(())
    }
    fn string_token(&mut self, _arg: &StringToken) -> Result<()> {
        Ok(())
    }
    fn struct_token(&mut self, _arg: &StructToken) -> Result<()> {
        Ok(())
    }
    fn switch_token(&mut self, _arg: &SwitchToken) -> Result<()> {
        Ok(())
    }
    fn tri_token(&mut self, _arg: &TriToken) -> Result<()> {
        Ok(())
    }
    fn type_token(&mut self, _arg: &TypeToken) -> Result<()> {
        Ok(())
    }
    fn u32_token(&mut self, _arg: &U32Token) -> Result<()> {
        Ok(())
    }
    fn u64_token(&mut self, _arg: &U64Token) -> Result<()> {
        Ok(())
    }
    fn union_token(&mut self, _arg: &UnionToken) -> Result<()> {
        Ok(())
    }
    fn unsafe_token(&mut self, _arg: &UnsafeToken) -> Result<()> {
        Ok(())
    }
    fn var_token(&mut self, _arg: &VarToken) -> Result<()> {
        Ok(())
    }
    fn dollar_identifier_token(&mut self, _arg: &DollarIdentifierToken) -> Result<()> {
        Ok(())
    }
    fn identifier_token(&mut self, _arg: &IdentifierToken) -> Result<()> {
        Ok(())
    }
    fn start(&mut self, _arg: &Start) -> Result<()> {
        Ok(())
    }
    fn string_literal(&mut self, _arg: &StringLiteral) -> Result<()> {
        Ok(())
    }
    fn exponent(&mut self, _arg: &Exponent) -> Result<()> {
        Ok(())
    }
    fn fixed_point(&mut self, _arg: &FixedPoint) -> Result<()> {
        Ok(())
    }
    fn based(&mut self, _arg: &Based) -> Result<()> {
        Ok(())
    }
    fn base_less(&mut self, _arg: &BaseLess) -> Result<()> {
        Ok(())
    }
    fn all_bit(&mut self, _arg: &AllBit) -> Result<()> {
        Ok(())
    }
    fn assignment_operator(&mut self, _arg: &AssignmentOperator) -> Result<()> {
        Ok(())
    }
    fn operator01(&mut self, _arg: &Operator01) -> Result<()> {
        Ok(())
    }
    fn operator02(&mut self, _arg: &Operator02) -> Result<()> {
        Ok(())
    }
    fn operator03(&mut self, _arg: &Operator03) -> Result<()> {
        Ok(())
    }
    fn operator04(&mut self, _arg: &Operator04) -> Result<()> {
        Ok(())
    }
    fn operator05(&mut self, _arg: &Operator05) -> Result<()> {
        Ok(())
    }
    fn operator06(&mut self, _arg: &Operator06) -> Result<()> {
        Ok(())
    }
    fn operator07(&mut self, _arg: &Operator07) -> Result<()> {
        Ok(())
    }
    fn operator08(&mut self, _arg: &Operator08) -> Result<()> {
        Ok(())
    }
    fn operator09(&mut self, _arg: &Operator09) -> Result<()> {
        Ok(())
    }
    fn operator10(&mut self, _arg: &Operator10) -> Result<()> {
        Ok(())
    }
    fn operator11(&mut self, _arg: &Operator11) -> Result<()> {
        Ok(())
    }
    fn unary_operator(&mut self, _arg: &UnaryOperator) -> Result<()> {
        Ok(())
    }
    fn back_quote(&mut self, _arg: &BackQuote) -> Result<()> {
        Ok(())
    }
    fn colon(&mut self, _arg: &Colon) -> Result<()> {
        Ok(())
    }
    fn colon_colon_l_angle(&mut self, _arg: &ColonColonLAngle) -> Result<()> {
        Ok(())
    }
    fn colon_colon(&mut self, _arg: &ColonColon) -> Result<()> {
        Ok(())
    }
    fn comma(&mut self, _arg: &Comma) -> Result<()> {
        Ok(())
    }
    fn dot_dot(&mut self, _arg: &DotDot) -> Result<()> {
        Ok(())
    }
    fn dot_dot_equ(&mut self, _arg: &DotDotEqu) -> Result<()> {
        Ok(())
    }
    fn dot(&mut self, _arg: &Dot) -> Result<()> {
        Ok(())
    }
    fn equ(&mut self, _arg: &Equ) -> Result<()> {
        Ok(())
    }
    fn hash(&mut self, _arg: &Hash) -> Result<()> {
        Ok(())
    }
    fn quote_l_brace(&mut self, _arg: &QuoteLBrace) -> Result<()> {
        Ok(())
    }
    fn l_angle(&mut self, _arg: &LAngle) -> Result<()> {
        Ok(())
    }
    fn l_brace(&mut self, _arg: &LBrace) -> Result<()> {
        Ok(())
    }
    fn l_bracket(&mut self, _arg: &LBracket) -> Result<()> {
        Ok(())
    }
    fn l_paren(&mut self, _arg: &LParen) -> Result<()> {
        Ok(())
    }
    fn minus_colon(&mut self, _arg: &MinusColon) -> Result<()> {
        Ok(())
    }
    fn minus_g_t(&mut self, _arg: &MinusGT) -> Result<()> {
        Ok(())
    }
    fn plus_colon(&mut self, _arg: &PlusColon) -> Result<()> {
        Ok(())
    }
    fn r_angle(&mut self, _arg: &RAngle) -> Result<()> {
        Ok(())
    }
    fn r_brace(&mut self, _arg: &RBrace) -> Result<()> {
        Ok(())
    }
    fn r_bracket(&mut self, _arg: &RBracket) -> Result<()> {
        Ok(())
    }
    fn r_paren(&mut self, _arg: &RParen) -> Result<()> {
        Ok(())
    }
    fn semicolon(&mut self, _arg: &Semicolon) -> Result<()> {
        Ok(())
    }
    fn star(&mut self, _arg: &Star) -> Result<()> {
        Ok(())
    }
    fn always_comb(&mut self, _arg: &AlwaysComb) -> Result<()> {
        Ok(())
    }
    fn always_ff(&mut self, _arg: &AlwaysFf) -> Result<()> {
        Ok(())
    }
    fn r#as(&mut self, _arg: &As) -> Result<()> {
        Ok(())
    }
    fn assign(&mut self, _arg: &Assign) -> Result<()> {
        Ok(())
    }
    fn bit(&mut self, _arg: &Bit) -> Result<()> {
        Ok(())
    }
    fn r#break(&mut self, _arg: &Break) -> Result<()> {
        Ok(())
    }
    fn case(&mut self, _arg: &Case) -> Result<()> {
        Ok(())
    }
    fn clock(&mut self, _arg: &Clock) -> Result<()> {
        Ok(())
    }
    fn clock_posedge(&mut self, _arg: &ClockPosedge) -> Result<()> {
        Ok(())
    }
    fn clock_negedge(&mut self, _arg: &ClockNegedge) -> Result<()> {
        Ok(())
    }
    fn r#const(&mut self, _arg: &Const) -> Result<()> {
        Ok(())
    }
    fn defaul(&mut self, _arg: &Defaul) -> Result<()> {
        Ok(())
    }
    fn r#else(&mut self, _arg: &Else) -> Result<()> {
        Ok(())
    }
    fn embed(&mut self, _arg: &Embed) -> Result<()> {
        Ok(())
    }
    fn r#enum(&mut self, _arg: &Enum) -> Result<()> {
        Ok(())
    }
    fn export(&mut self, _arg: &Export) -> Result<()> {
        Ok(())
    }
    fn f32(&mut self, _arg: &F32) -> Result<()> {
        Ok(())
    }
    fn f64(&mut self, _arg: &F64) -> Result<()> {
        Ok(())
    }
    fn r#final(&mut self, _arg: &Final) -> Result<()> {
        Ok(())
    }
    fn r#for(&mut self, _arg: &For) -> Result<()> {
        Ok(())
    }
    fn function(&mut self, _arg: &Function) -> Result<()> {
        Ok(())
    }
    fn i32(&mut self, _arg: &I32) -> Result<()> {
        Ok(())
    }
    fn i64(&mut self, _arg: &I64) -> Result<()> {
        Ok(())
    }
    fn r#if(&mut self, _arg: &If) -> Result<()> {
        Ok(())
    }
    fn if_reset(&mut self, _arg: &IfReset) -> Result<()> {
        Ok(())
    }
    fn import(&mut self, _arg: &Import) -> Result<()> {
        Ok(())
    }
    fn r#in(&mut self, _arg: &In) -> Result<()> {
        Ok(())
    }
    fn include(&mut self, _arg: &Include) -> Result<()> {
        Ok(())
    }
    fn initial(&mut self, _arg: &Initial) -> Result<()> {
        Ok(())
    }
    fn inout(&mut self, _arg: &Inout) -> Result<()> {
        Ok(())
    }
    fn input(&mut self, _arg: &Input) -> Result<()> {
        Ok(())
    }
    fn inside(&mut self, _arg: &Inside) -> Result<()> {
        Ok(())
    }
    fn inst(&mut self, _arg: &Inst) -> Result<()> {
        Ok(())
    }
    fn interface(&mut self, _arg: &Interface) -> Result<()> {
        Ok(())
    }
    fn r#let(&mut self, _arg: &Let) -> Result<()> {
        Ok(())
    }
    fn logic(&mut self, _arg: &Logic) -> Result<()> {
        Ok(())
    }
    fn lsb(&mut self, _arg: &Lsb) -> Result<()> {
        Ok(())
    }
    fn modport(&mut self, _arg: &Modport) -> Result<()> {
        Ok(())
    }
    fn module(&mut self, _arg: &Module) -> Result<()> {
        Ok(())
    }
    fn msb(&mut self, _arg: &Msb) -> Result<()> {
        Ok(())
    }
    fn output(&mut self, _arg: &Output) -> Result<()> {
        Ok(())
    }
    fn outside(&mut self, _arg: &Outside) -> Result<()> {
        Ok(())
    }
    fn package(&mut self, _arg: &Package) -> Result<()> {
        Ok(())
    }
    fn param(&mut self, _arg: &Param) -> Result<()> {
        Ok(())
    }
    fn proto(&mut self, _arg: &Proto) -> Result<()> {
        Ok(())
    }
    fn r#pub(&mut self, _arg: &Pub) -> Result<()> {
        Ok(())
    }
    fn r#ref(&mut self, _arg: &Ref) -> Result<()> {
        Ok(())
    }
    fn repeat(&mut self, _arg: &Repeat) -> Result<()> {
        Ok(())
    }
    fn reset(&mut self, _arg: &Reset) -> Result<()> {
        Ok(())
    }
    fn reset_async_high(&mut self, _arg: &ResetAsyncHigh) -> Result<()> {
        Ok(())
    }
    fn reset_async_low(&mut self, _arg: &ResetAsyncLow) -> Result<()> {
        Ok(())
    }
    fn reset_sync_high(&mut self, _arg: &ResetSyncHigh) -> Result<()> {
        Ok(())
    }
    fn reset_sync_low(&mut self, _arg: &ResetSyncLow) -> Result<()> {
        Ok(())
    }
    fn r#return(&mut self, _arg: &Return) -> Result<()> {
        Ok(())
    }
    fn signed(&mut self, _arg: &Signed) -> Result<()> {
        Ok(())
    }
    fn step(&mut self, _arg: &Step) -> Result<()> {
        Ok(())
    }
    fn strin(&mut self, _arg: &Strin) -> Result<()> {
        Ok(())
    }
    fn r#struct(&mut self, _arg: &Struct) -> Result<()> {
        Ok(())
    }
    fn switch(&mut self, _arg: &Switch) -> Result<()> {
        Ok(())
    }
    fn tri(&mut self, _arg: &Tri) -> Result<()> {
        Ok(())
    }
    fn r#type(&mut self, _arg: &Type) -> Result<()> {
        Ok(())
    }
    fn u32(&mut self, _arg: &U32) -> Result<()> {
        Ok(())
    }
    fn u64(&mut self, _arg: &U64) -> Result<()> {
        Ok(())
    }
    fn r#union(&mut self, _arg: &Union) -> Result<()> {
        Ok(())
    }
    fn r#unsafe(&mut self, _arg: &Unsafe) -> Result<()> {
        Ok(())
    }
    fn var(&mut self, _arg: &Var) -> Result<()> {
        Ok(())
    }
    fn dollar_identifier(&mut self, _arg: &DollarIdentifier) -> Result<()> {
        Ok(())
    }
    fn identifier(&mut self, _arg: &Identifier) -> Result<()> {
        Ok(())
    }
    fn number(&mut self, _arg: &Number) -> Result<()> {
        Ok(())
    }
    fn integral_number(&mut self, _arg: &IntegralNumber) -> Result<()> {
        Ok(())
    }
    fn real_number(&mut self, _arg: &RealNumber) -> Result<()> {
        Ok(())
    }
    fn hierarchical_identifier(&mut self, _arg: &HierarchicalIdentifier) -> Result<()> {
        Ok(())
    }
    fn scoped_identifier(&mut self, _arg: &ScopedIdentifier) -> Result<()> {
        Ok(())
    }
    fn expression_identifier(&mut self, _arg: &ExpressionIdentifier) -> Result<()> {
        Ok(())
    }
    fn expression(&mut self, _arg: &Expression) -> Result<()> {
        Ok(())
    }
    fn expression01(&mut self, _arg: &Expression01) -> Result<()> {
        Ok(())
    }
    fn expression02(&mut self, _arg: &Expression02) -> Result<()> {
        Ok(())
    }
    fn expression03(&mut self, _arg: &Expression03) -> Result<()> {
        Ok(())
    }
    fn expression04(&mut self, _arg: &Expression04) -> Result<()> {
        Ok(())
    }
    fn expression05(&mut self, _arg: &Expression05) -> Result<()> {
        Ok(())
    }
    fn expression06(&mut self, _arg: &Expression06) -> Result<()> {
        Ok(())
    }
    fn expression07(&mut self, _arg: &Expression07) -> Result<()> {
        Ok(())
    }
    fn expression08(&mut self, _arg: &Expression08) -> Result<()> {
        Ok(())
    }
    fn expression09(&mut self, _arg: &Expression09) -> Result<()> {
        Ok(())
    }
    fn expression10(&mut self, _arg: &Expression10) -> Result<()> {
        Ok(())
    }
    fn expression11(&mut self, _arg: &Expression11) -> Result<()> {
        Ok(())
    }
    fn expression12(&mut self, _arg: &Expression12) -> Result<()> {
        Ok(())
    }
    fn factor(&mut self, _arg: &Factor) -> Result<()> {
        Ok(())
    }
    fn function_call(&mut self, _arg: &FunctionCall) -> Result<()> {
        Ok(())
    }
    fn argument_list(&mut self, _arg: &ArgumentList) -> Result<()> {
        Ok(())
    }
    fn argument_item(&mut self, _arg: &ArgumentItem) -> Result<()> {
        Ok(())
    }
    fn concatenation_list(&mut self, _arg: &ConcatenationList) -> Result<()> {
        Ok(())
    }
    fn concatenation_item(&mut self, _arg: &ConcatenationItem) -> Result<()> {
        Ok(())
    }
    fn array_literal_list(&mut self, _arg: &ArrayLiteralList) -> Result<()> {
        Ok(())
    }
    fn array_literal_item(&mut self, _arg: &ArrayLiteralItem) -> Result<()> {
        Ok(())
    }
    fn if_expression(&mut self, _arg: &IfExpression) -> Result<()> {
        Ok(())
    }
    fn case_expression(&mut self, _arg: &CaseExpression) -> Result<()> {
        Ok(())
    }
    fn switch_expression(&mut self, _arg: &SwitchExpression) -> Result<()> {
        Ok(())
    }
    fn type_expression(&mut self, _arg: &TypeExpression) -> Result<()> {
        Ok(())
    }
    fn inside_expression(&mut self, _arg: &InsideExpression) -> Result<()> {
        Ok(())
    }
    fn outside_expression(&mut self, _arg: &OutsideExpression) -> Result<()> {
        Ok(())
    }
    fn range_list(&mut self, _arg: &RangeList) -> Result<()> {
        Ok(())
    }
    fn range_item(&mut self, _arg: &RangeItem) -> Result<()> {
        Ok(())
    }
    fn select(&mut self, _arg: &Select) -> Result<()> {
        Ok(())
    }
    fn select_operator(&mut self, _arg: &SelectOperator) -> Result<()> {
        Ok(())
    }
    fn width(&mut self, _arg: &Width) -> Result<()> {
        Ok(())
    }
    fn array(&mut self, _arg: &Array) -> Result<()> {
        Ok(())
    }
    fn range(&mut self, _arg: &Range) -> Result<()> {
        Ok(())
    }
    fn range_operator(&mut self, _arg: &RangeOperator) -> Result<()> {
        Ok(())
    }
    fn fixed_type(&mut self, _arg: &FixedType) -> Result<()> {
        Ok(())
    }
    fn variable_type(&mut self, _arg: &VariableType) -> Result<()> {
        Ok(())
    }
    fn user_defined_type(&mut self, _arg: &UserDefinedType) -> Result<()> {
        Ok(())
    }
    fn type_modifier(&mut self, _arg: &TypeModifier) -> Result<()> {
        Ok(())
    }
    fn factor_type(&mut self, _arg: &FactorType) -> Result<()> {
        Ok(())
    }
    fn scalar_type(&mut self, _arg: &ScalarType) -> Result<()> {
        Ok(())
    }
    fn array_type(&mut self, _arg: &ArrayType) -> Result<()> {
        Ok(())
    }
    fn casting_type(&mut self, _arg: &CastingType) -> Result<()> {
        Ok(())
    }
    fn clock_domain(&mut self, _arg: &ClockDomain) -> Result<()> {
        Ok(())
    }
    fn statement_block(&mut self, _arg: &StatementBlock) -> Result<()> {
        Ok(())
    }
    fn statement_block_item(&mut self, _arg: &StatementBlockItem) -> Result<()> {
        Ok(())
    }
    fn statement(&mut self, _arg: &Statement) -> Result<()> {
        Ok(())
    }
    fn let_statement(&mut self, _arg: &LetStatement) -> Result<()> {
        Ok(())
    }
    fn identifier_statement(&mut self, _arg: &IdentifierStatement) -> Result<()> {
        Ok(())
    }
    fn assignment(&mut self, _arg: &Assignment) -> Result<()> {
        Ok(())
    }
    fn if_statement(&mut self, _arg: &IfStatement) -> Result<()> {
        Ok(())
    }
    fn if_reset_statement(&mut self, _arg: &IfResetStatement) -> Result<()> {
        Ok(())
    }
    fn return_statement(&mut self, _arg: &ReturnStatement) -> Result<()> {
        Ok(())
    }
    fn break_statement(&mut self, _arg: &BreakStatement) -> Result<()> {
        Ok(())
    }
    fn for_statement(&mut self, _arg: &ForStatement) -> Result<()> {
        Ok(())
    }
    fn case_statement(&mut self, _arg: &CaseStatement) -> Result<()> {
        Ok(())
    }
    fn case_item(&mut self, _arg: &CaseItem) -> Result<()> {
        Ok(())
    }
    fn case_condition(&mut self, _arg: &CaseCondition) -> Result<()> {
        Ok(())
    }
    fn switch_statement(&mut self, _arg: &SwitchStatement) -> Result<()> {
        Ok(())
    }
    fn switch_item(&mut self, _arg: &SwitchItem) -> Result<()> {
        Ok(())
    }
    fn switch_condition(&mut self, _arg: &SwitchCondition) -> Result<()> {
        Ok(())
    }
    fn attribute(&mut self, _arg: &Attribute) -> Result<()> {
        Ok(())
    }
    fn attribute_list(&mut self, _arg: &AttributeList) -> Result<()> {
        Ok(())
    }
    fn attribute_item(&mut self, _arg: &AttributeItem) -> Result<()> {
        Ok(())
    }
    fn let_declaration(&mut self, _arg: &LetDeclaration) -> Result<()> {
        Ok(())
    }
    fn var_declaration(&mut self, _arg: &VarDeclaration) -> Result<()> {
        Ok(())
    }
    fn const_declaration(&mut self, _arg: &ConstDeclaration) -> Result<()> {
        Ok(())
    }
    fn type_def_declaration(&mut self, _arg: &TypeDefDeclaration) -> Result<()> {
        Ok(())
    }
    fn always_ff_declaration(&mut self, _arg: &AlwaysFfDeclaration) -> Result<()> {
        Ok(())
    }
    fn alwayf_ff_event_list(&mut self, _arg: &AlwayfFfEventList) -> Result<()> {
        Ok(())
    }
    fn always_ff_clock(&mut self, _arg: &AlwaysFfClock) -> Result<()> {
        Ok(())
    }
    fn always_ff_reset(&mut self, _arg: &AlwaysFfReset) -> Result<()> {
        Ok(())
    }
    fn always_comb_declaration(&mut self, _arg: &AlwaysCombDeclaration) -> Result<()> {
        Ok(())
    }
    fn assign_declaration(&mut self, _arg: &AssignDeclaration) -> Result<()> {
        Ok(())
    }
    fn modport_declaration(&mut self, _arg: &ModportDeclaration) -> Result<()> {
        Ok(())
    }
    fn modport_list(&mut self, _arg: &ModportList) -> Result<()> {
        Ok(())
    }
    fn modport_group(&mut self, _arg: &ModportGroup) -> Result<()> {
        Ok(())
    }
    fn modport_item(&mut self, _arg: &ModportItem) -> Result<()> {
        Ok(())
    }
    fn enum_declaration(&mut self, _arg: &EnumDeclaration) -> Result<()> {
        Ok(())
    }
    fn enum_list(&mut self, _arg: &EnumList) -> Result<()> {
        Ok(())
    }
    fn enum_group(&mut self, _arg: &EnumGroup) -> Result<()> {
        Ok(())
    }
    fn enum_item(&mut self, _arg: &EnumItem) -> Result<()> {
        Ok(())
    }
    fn struct_union(&mut self, _arg: &StructUnion) -> Result<()> {
        Ok(())
    }
    fn struct_union_declaration(&mut self, _arg: &StructUnionDeclaration) -> Result<()> {
        Ok(())
    }
    fn struct_union_list(&mut self, _arg: &StructUnionList) -> Result<()> {
        Ok(())
    }
    fn struct_union_group(&mut self, _arg: &StructUnionGroup) -> Result<()> {
        Ok(())
    }
    fn struct_union_item(&mut self, _arg: &StructUnionItem) -> Result<()> {
        Ok(())
    }
    fn initial_declaration(&mut self, _arg: &InitialDeclaration) -> Result<()> {
        Ok(())
    }
    fn final_declaration(&mut self, _arg: &FinalDeclaration) -> Result<()> {
        Ok(())
    }
    fn inst_declaration(&mut self, _arg: &InstDeclaration) -> Result<()> {
        Ok(())
    }
    fn inst_parameter(&mut self, _arg: &InstParameter) -> Result<()> {
        Ok(())
    }
    fn inst_parameter_list(&mut self, _arg: &InstParameterList) -> Result<()> {
        Ok(())
    }
    fn inst_parameter_group(&mut self, _arg: &InstParameterGroup) -> Result<()> {
        Ok(())
    }
    fn inst_parameter_item(&mut self, _arg: &InstParameterItem) -> Result<()> {
        Ok(())
    }
    fn inst_port_list(&mut self, _arg: &InstPortList) -> Result<()> {
        Ok(())
    }
    fn inst_port_group(&mut self, _arg: &InstPortGroup) -> Result<()> {
        Ok(())
    }
    fn inst_port_item(&mut self, _arg: &InstPortItem) -> Result<()> {
        Ok(())
    }
    fn with_parameter(&mut self, _arg: &WithParameter) -> Result<()> {
        Ok(())
    }
    fn with_parameter_list(&mut self, _arg: &WithParameterList) -> Result<()> {
        Ok(())
    }
    fn with_parameter_group(&mut self, _arg: &WithParameterGroup) -> Result<()> {
        Ok(())
    }
    fn with_parameter_item(&mut self, _arg: &WithParameterItem) -> Result<()> {
        Ok(())
    }
    fn generic_bound(&mut self, _arg: &GenericBound) -> Result<()> {
        Ok(())
    }
    fn with_generic_parameter(&mut self, _arg: &WithGenericParameter) -> Result<()> {
        Ok(())
    }
    fn with_generic_parameter_list(&mut self, _arg: &WithGenericParameterList) -> Result<()> {
        Ok(())
    }
    fn with_generic_parameter_item(&mut self, _arg: &WithGenericParameterItem) -> Result<()> {
        Ok(())
    }
    fn with_generic_argument(&mut self, _arg: &WithGenericArgument) -> Result<()> {
        Ok(())
    }
    fn with_generic_argument_list(&mut self, _arg: &WithGenericArgumentList) -> Result<()> {
        Ok(())
    }
    fn with_generic_argument_item(&mut self, _arg: &WithGenericArgumentItem) -> Result<()> {
        Ok(())
    }
    fn port_declaration(&mut self, _arg: &PortDeclaration) -> Result<()> {
        Ok(())
    }
    fn port_declaration_list(&mut self, _arg: &PortDeclarationList) -> Result<()> {
        Ok(())
    }
    fn port_declaration_group(&mut self, _arg: &PortDeclarationGroup) -> Result<()> {
        Ok(())
    }
    fn port_declaration_item(&mut self, _arg: &PortDeclarationItem) -> Result<()> {
        Ok(())
    }
    fn port_type_concrete(&mut self, _arg: &PortTypeConcrete) -> Result<()> {
        Ok(())
    }
    fn port_type_abstract(&mut self, _arg: &PortTypeAbstract) -> Result<()> {
        Ok(())
    }
    fn direction(&mut self, _arg: &Direction) -> Result<()> {
        Ok(())
    }
    fn function_declaration(&mut self, _arg: &FunctionDeclaration) -> Result<()> {
        Ok(())
    }
    fn import_declaration(&mut self, _arg: &ImportDeclaration) -> Result<()> {
        Ok(())
    }
    fn export_declaration(&mut self, _arg: &ExportDeclaration) -> Result<()> {
        Ok(())
    }
    fn unsafe_block(&mut self, _arg: &UnsafeBlock) -> Result<()> {
        Ok(())
    }
    fn module_declaration(&mut self, _arg: &ModuleDeclaration) -> Result<()> {
        Ok(())
    }
    fn module_group(&mut self, _arg: &ModuleGroup) -> Result<()> {
        Ok(())
    }
    fn module_item(&mut self, _arg: &ModuleItem) -> Result<()> {
        Ok(())
    }
    fn interface_declaration(&mut self, _arg: &InterfaceDeclaration) -> Result<()> {
        Ok(())
    }
    fn interface_group(&mut self, _arg: &InterfaceGroup) -> Result<()> {
        Ok(())
    }
    fn interface_item(&mut self, _arg: &InterfaceItem) -> Result<()> {
        Ok(())
    }
    fn generate_if_declaration(&mut self, _arg: &GenerateIfDeclaration) -> Result<()> {
        Ok(())
    }
    fn generate_for_declaration(&mut self, _arg: &GenerateForDeclaration) -> Result<()> {
        Ok(())
    }
    fn generate_block_declaration(&mut self, _arg: &GenerateBlockDeclaration) -> Result<()> {
        Ok(())
    }
    fn generate_named_block(&mut self, _arg: &GenerateNamedBlock) -> Result<()> {
        Ok(())
    }
    fn generate_optional_named_block(&mut self, _arg: &GenerateOptionalNamedBlock) -> Result<()> {
        Ok(())
    }
    fn generate_group(&mut self, _arg: &GenerateGroup) -> Result<()> {
        Ok(())
    }
    fn generate_item(&mut self, _arg: &GenerateItem) -> Result<()> {
        Ok(())
    }
    fn package_declaration(&mut self, _arg: &PackageDeclaration) -> Result<()> {
        Ok(())
    }
    fn package_group(&mut self, _arg: &PackageGroup) -> Result<()> {
        Ok(())
    }
    fn package_item(&mut self, _arg: &PackageItem) -> Result<()> {
        Ok(())
    }
    fn proto_module_declaration(&mut self, _arg: &ProtoModuleDeclaration) -> Result<()> {
        Ok(())
    }
    fn embed_declaration(&mut self, _arg: &EmbedDeclaration) -> Result<()> {
        Ok(())
    }
    fn embed_content(&mut self, _arg: &EmbedContent) -> Result<()> {
        Ok(())
    }
    fn embed_content_token(&mut self, _arg: &EmbedContentToken) -> Result<()> {
        Ok(())
    }
    fn embed_item(&mut self, _arg: &EmbedItem) -> Result<()> {
        Ok(())
    }
    fn include_declaration(&mut self, _arg: &IncludeDeclaration) -> Result<()> {
        Ok(())
    }
    fn description_group(&mut self, _arg: &DescriptionGroup) -> Result<()> {
        Ok(())
    }
    fn description_item(&mut self, _arg: &DescriptionItem) -> Result<()> {
        Ok(())
    }
    fn veryl(&mut self, _arg: &Veryl) -> Result<()> {
        Ok(())
    }
    fn on_comment_parsed(&mut self, _token: Token<'_>) {}
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct NumberIntegralNumber {
    pub integral_number: Box<IntegralNumber>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct NumberRealNumber {
    pub real_number: Box<RealNumber>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IntegralNumberBased {
    pub based: Box<Based>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IntegralNumberBaseLess {
    pub base_less: Box<BaseLess>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IntegralNumberAllBit {
    pub all_bit: Box<AllBit>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RealNumberFixedPoint {
    pub fixed_point: Box<FixedPoint>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RealNumberExponent {
    pub exponent: Box<Exponent>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScopedIdentifierGroupDollarIdentifier {
    pub dollar_identifier: Box<DollarIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScopedIdentifierGroupIdentifierScopedIdentifierOpt {
    pub identifier: Box<Identifier>,
    pub scoped_identifier_opt: Option<ScopedIdentifierOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression09ListGroupOperator10 {
    pub operator10: Box<Operator10>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression09ListGroupStar {
    pub star: Box<Star>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12ListGroupUnaryOperator {
    pub unary_operator: Box<UnaryOperator>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12ListGroupOperator09 {
    pub operator09: Box<Operator09>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12ListGroupOperator05 {
    pub operator05: Box<Operator05>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12ListGroupOperator03 {
    pub operator03: Box<Operator03>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12ListGroupOperator04 {
    pub operator04: Box<Operator04>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorNumber {
    pub number: Box<Number>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorExpressionIdentifierFactorOpt {
    pub expression_identifier: Box<ExpressionIdentifier>,
    pub factor_opt: Option<FactorOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorLParenExpressionRParen {
    pub l_paren: Box<LParen>,
    pub expression: Box<Expression>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorLBraceConcatenationListRBrace {
    pub l_brace: Box<LBrace>,
    pub concatenation_list: Box<ConcatenationList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorQuoteLBraceArrayLiteralListRBrace {
    pub quote_l_brace: Box<QuoteLBrace>,
    pub array_literal_list: Box<ArrayLiteralList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorIfExpression {
    pub if_expression: Box<IfExpression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorCaseExpression {
    pub case_expression: Box<CaseExpression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorSwitchExpression {
    pub switch_expression: Box<SwitchExpression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorStringLiteral {
    pub string_literal: Box<StringLiteral>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorFactorGroup {
    pub factor_group: Box<FactorGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorGroupMsb {
    pub msb: Box<Msb>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorGroupLsb {
    pub lsb: Box<Lsb>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorInsideExpression {
    pub inside_expression: Box<InsideExpression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorOutsideExpression {
    pub outside_expression: Box<OutsideExpression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorTypeExpression {
    pub type_expression: Box<TypeExpression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorFactorType {
    pub factor_type: Box<FactorType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralItemGroupExpressionArrayLiteralItemOpt {
    pub expression: Box<Expression>,
    pub array_literal_item_opt: Option<ArrayLiteralItemOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralItemGroupDefaulColonExpression {
    pub defaul: Box<Defaul>,
    pub colon: Box<Colon>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SelectOperatorColon {
    pub colon: Box<Colon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SelectOperatorPlusColon {
    pub plus_colon: Box<PlusColon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SelectOperatorMinusColon {
    pub minus_colon: Box<MinusColon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SelectOperatorStep {
    pub step: Box<Step>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeOperatorDotDot {
    pub dot_dot: Box<DotDot>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeOperatorDotDotEqu {
    pub dot_dot_equ: Box<DotDotEqu>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeU32 {
    pub u32: Box<U32>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeU64 {
    pub u64: Box<U64>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeI32 {
    pub i32: Box<I32>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeI64 {
    pub i64: Box<I64>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeF32 {
    pub f32: Box<F32>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeF64 {
    pub f64: Box<F64>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedTypeStrin {
    pub strin: Box<Strin>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeClock {
    pub clock: Box<Clock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeClockPosedge {
    pub clock_posedge: Box<ClockPosedge>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeClockNegedge {
    pub clock_negedge: Box<ClockNegedge>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeReset {
    pub reset: Box<Reset>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeResetAsyncHigh {
    pub reset_async_high: Box<ResetAsyncHigh>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeResetAsyncLow {
    pub reset_async_low: Box<ResetAsyncLow>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeResetSyncHigh {
    pub reset_sync_high: Box<ResetSyncHigh>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeResetSyncLow {
    pub reset_sync_low: Box<ResetSyncLow>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeLogic {
    pub logic: Box<Logic>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VariableTypeBit {
    pub bit: Box<Bit>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TypeModifierTri {
    pub tri: Box<Tri>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TypeModifierSigned {
    pub signed: Box<Signed>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorTypeGroupVariableTypeFactorTypeOpt {
    pub variable_type: Box<VariableType>,
    pub factor_type_opt: Option<FactorTypeOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorTypeGroupFixedType {
    pub fixed_type: Box<FixedType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScalarTypeGroupUserDefinedTypeScalarTypeOpt {
    pub user_defined_type: Box<UserDefinedType>,
    pub scalar_type_opt: Option<ScalarTypeOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScalarTypeGroupFactorType {
    pub factor_type: Box<FactorType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeU32 {
    pub u32: Box<U32>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeU64 {
    pub u64: Box<U64>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeI32 {
    pub i32: Box<I32>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeI64 {
    pub i64: Box<I64>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeF32 {
    pub f32: Box<F32>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeF64 {
    pub f64: Box<F64>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeClock {
    pub clock: Box<Clock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeClockPosedge {
    pub clock_posedge: Box<ClockPosedge>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeClockNegedge {
    pub clock_negedge: Box<ClockNegedge>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeReset {
    pub reset: Box<Reset>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeResetAsyncHigh {
    pub reset_async_high: Box<ResetAsyncHigh>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeResetAsyncLow {
    pub reset_async_low: Box<ResetAsyncLow>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeResetSyncHigh {
    pub reset_sync_high: Box<ResetSyncHigh>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeResetSyncLow {
    pub reset_sync_low: Box<ResetSyncLow>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CastingTypeUserDefinedType {
    pub user_defined_type: Box<UserDefinedType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementBlockItemVarDeclaration {
    pub var_declaration: Box<VarDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementBlockItemLetStatement {
    pub let_statement: Box<LetStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementBlockItemStatement {
    pub statement: Box<Statement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementIdentifierStatement {
    pub identifier_statement: Box<IdentifierStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementIfStatement {
    pub if_statement: Box<IfStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementIfResetStatement {
    pub if_reset_statement: Box<IfResetStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementReturnStatement {
    pub return_statement: Box<ReturnStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementBreakStatement {
    pub break_statement: Box<BreakStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementForStatement {
    pub for_statement: Box<ForStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementCaseStatement {
    pub case_statement: Box<CaseStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementSwitchStatement {
    pub switch_statement: Box<SwitchStatement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IdentifierStatementGroupFunctionCall {
    pub function_call: Box<FunctionCall>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IdentifierStatementGroupAssignment {
    pub assignment: Box<Assignment>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignmentGroupEqu {
    pub equ: Box<Equ>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignmentGroupAssignmentOperator {
    pub assignment_operator: Box<AssignmentOperator>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseItemGroup0Statement {
    pub statement: Box<Statement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseItemGroup0StatementBlock {
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseItemGroupCaseCondition {
    pub case_condition: Box<CaseCondition>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseItemGroupDefaul {
    pub defaul: Box<Defaul>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchItemGroup0Statement {
    pub statement: Box<Statement>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchItemGroup0StatementBlock {
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchItemGroupSwitchCondition {
    pub switch_condition: Box<SwitchCondition>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchItemGroupDefaul {
    pub defaul: Box<Defaul>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AttributeItemIdentifier {
    pub identifier: Box<Identifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AttributeItemStringLiteral {
    pub string_literal: Box<StringLiteral>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConstDeclarationGroupArrayType {
    pub array_type: Box<ArrayType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConstDeclarationGroupType {
    pub r#type: Box<Type>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportGroupGroupLBraceModportListRBrace {
    pub l_brace: Box<LBrace>,
    pub modport_list: Box<ModportList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportGroupGroupModportItem {
    pub modport_item: Box<ModportItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumGroupGroupLBraceEnumListRBrace {
    pub l_brace: Box<LBrace>,
    pub enum_list: Box<EnumList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumGroupGroupEnumItem {
    pub enum_item: Box<EnumItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionStruct {
    pub r#struct: Box<Struct>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionUnion {
    pub r#union: Box<Union>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionGroupGroupLBraceStructUnionListRBrace {
    pub l_brace: Box<LBrace>,
    pub struct_union_list: Box<StructUnionList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionGroupGroupStructUnionItem {
    pub struct_union_item: Box<StructUnionItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterGroupGroupLBraceInstParameterListRBrace {
    pub l_brace: Box<LBrace>,
    pub inst_parameter_list: Box<InstParameterList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterGroupGroupInstParameterItem {
    pub inst_parameter_item: Box<InstParameterItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortGroupGroupLBraceInstPortListRBrace {
    pub l_brace: Box<LBrace>,
    pub inst_port_list: Box<InstPortList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortGroupGroupInstPortItem {
    pub inst_port_item: Box<InstPortItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterGroupGroupLBraceWithParameterListRBrace {
    pub l_brace: Box<LBrace>,
    pub with_parameter_list: Box<WithParameterList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterGroupGroupWithParameterItem {
    pub with_parameter_item: Box<WithParameterItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterItemGroup0ArrayType {
    pub array_type: Box<ArrayType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterItemGroup0Type {
    pub r#type: Box<Type>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterItemGroupParam {
    pub param: Box<Param>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterItemGroupConst {
    pub r#const: Box<Const>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenericBoundConst {
    pub r#const: Box<Const>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenericBoundType {
    pub r#type: Box<Type>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenericBoundScopedIdentifier {
    pub scoped_identifier: Box<ScopedIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgumentItemScopedIdentifier {
    pub scoped_identifier: Box<ScopedIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgumentItemNumber {
    pub number: Box<Number>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationGroupGroupLBracePortDeclarationListRBrace {
    pub l_brace: Box<LBrace>,
    pub port_declaration_list: Box<PortDeclarationList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationGroupGroupPortDeclarationItem {
    pub port_declaration_item: Box<PortDeclarationItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationItemGroupPortTypeConcrete {
    pub port_type_concrete: Box<PortTypeConcrete>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationItemGroupPortTypeAbstract {
    pub port_type_abstract: Box<PortTypeAbstract>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DirectionInput {
    pub input: Box<Input>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DirectionOutput {
    pub output: Box<Output>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DirectionInout {
    pub inout: Box<Inout>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DirectionRef {
    pub r#ref: Box<Ref>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DirectionModport {
    pub modport: Box<Modport>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DirectionImport {
    pub import: Box<Import>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExportDeclarationGroupStar {
    pub star: Box<Star>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExportDeclarationGroupScopedIdentifierExportDeclarationOpt {
    pub scoped_identifier: Box<ScopedIdentifier>,
    pub export_declaration_opt: Option<ExportDeclarationOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleGroupGroupLBraceModuleGroupGroupListRBrace {
    pub l_brace: Box<LBrace>,
    pub module_group_group_list: Vec<ModuleGroupGroupList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleGroupGroupModuleItem {
    pub module_item: Box<ModuleItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceGroupGroupLBraceInterfaceGroupGroupListRBrace {
    pub l_brace: Box<LBrace>,
    pub interface_group_group_list: Vec<InterfaceGroupGroupList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceGroupGroupInterfaceItem {
    pub interface_item: Box<InterfaceItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceItemGenerateItem {
    pub generate_item: Box<GenerateItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceItemModportDeclaration {
    pub modport_declaration: Box<ModportDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateGroupGroupLBraceGenerateGroupGroupListRBrace {
    pub l_brace: Box<LBrace>,
    pub generate_group_group_list: Vec<GenerateGroupGroupList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateGroupGroupGenerateItem {
    pub generate_item: Box<GenerateItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemLetDeclaration {
    pub let_declaration: Box<LetDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemVarDeclaration {
    pub var_declaration: Box<VarDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemInstDeclaration {
    pub inst_declaration: Box<InstDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemConstDeclaration {
    pub const_declaration: Box<ConstDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemAlwaysFfDeclaration {
    pub always_ff_declaration: Box<AlwaysFfDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemAlwaysCombDeclaration {
    pub always_comb_declaration: Box<AlwaysCombDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemAssignDeclaration {
    pub assign_declaration: Box<AssignDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemFunctionDeclaration {
    pub function_declaration: Box<FunctionDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemGenerateIfDeclaration {
    pub generate_if_declaration: Box<GenerateIfDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemGenerateForDeclaration {
    pub generate_for_declaration: Box<GenerateForDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemGenerateBlockDeclaration {
    pub generate_block_declaration: Box<GenerateBlockDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemTypeDefDeclaration {
    pub type_def_declaration: Box<TypeDefDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemEnumDeclaration {
    pub enum_declaration: Box<EnumDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemStructUnionDeclaration {
    pub struct_union_declaration: Box<StructUnionDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemImportDeclaration {
    pub import_declaration: Box<ImportDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemInitialDeclaration {
    pub initial_declaration: Box<InitialDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemFinalDeclaration {
    pub final_declaration: Box<FinalDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateItemUnsafeBlock {
    pub unsafe_block: Box<UnsafeBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageGroupGroupLBracePackageGroupGroupListRBrace {
    pub l_brace: Box<LBrace>,
    pub package_group_group_list: Vec<PackageGroupGroupList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageGroupGroupPackageItem {
    pub package_item: Box<PackageItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemVarDeclaration {
    pub var_declaration: Box<VarDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemConstDeclaration {
    pub const_declaration: Box<ConstDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemTypeDefDeclaration {
    pub type_def_declaration: Box<TypeDefDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemEnumDeclaration {
    pub enum_declaration: Box<EnumDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemStructUnionDeclaration {
    pub struct_union_declaration: Box<StructUnionDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemFunctionDeclaration {
    pub function_declaration: Box<FunctionDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemImportDeclaration {
    pub import_declaration: Box<ImportDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageItemExportDeclaration {
    pub export_declaration: Box<ExportDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedItemLBraceTermEmbedItemListRBraceTerm {
    pub l_brace_term: Box<LBraceTerm>,
    pub embed_item_list: Vec<EmbedItemList>,
    pub r_brace_term: Box<RBraceTerm>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedItemAnyTerm {
    pub any_term: Box<AnyTerm>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionGroupGroupLBraceDescriptionGroupGroupListRBrace {
    pub l_brace: Box<LBrace>,
    pub description_group_group_list: Vec<DescriptionGroupGroupList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionGroupGroupDescriptionItem {
    pub description_item: Box<DescriptionItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemModuleDeclaration {
    pub module_declaration: Box<ModuleDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemInterfaceDeclaration {
    pub interface_declaration: Box<InterfaceDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemPackageDeclaration {
    pub package_declaration: Box<PackageDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemProtoModuleDeclaration {
    pub proto_module_declaration: Box<ProtoModuleDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemImportDeclaration {
    pub import_declaration: Box<ImportDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemEmbedDeclaration {
    pub embed_declaration: Box<EmbedDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionItemIncludeDeclaration {
    pub include_declaration: Box<IncludeDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AllBit {
    pub all_bit_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AllBitTerm {
    pub all_bit_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AllBitToken {
    pub all_bit_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwayfFfEventList {
    pub l_paren: Box<LParen>,
    pub always_ff_clock: Box<AlwaysFfClock>,
    pub alwayf_ff_event_list_opt: Option<AlwayfFfEventListOpt>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwayfFfEventListOpt {
    pub comma: Box<Comma>,
    pub always_ff_reset: Box<AlwaysFfReset>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysComb {
    pub always_comb_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysCombDeclaration {
    pub always_comb: Box<AlwaysComb>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysCombTerm {
    pub always_comb_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysCombToken {
    pub always_comb_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFf {
    pub always_ff_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFfClock {
    pub hierarchical_identifier: Box<HierarchicalIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFfDeclaration {
    pub always_ff: Box<AlwaysFf>,
    pub always_ff_declaration_opt: Option<AlwaysFfDeclarationOpt>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFfDeclarationOpt {
    pub alwayf_ff_event_list: Box<AlwayfFfEventList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFfReset {
    pub hierarchical_identifier: Box<HierarchicalIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFfTerm {
    pub always_ff_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlwaysFfToken {
    pub always_ff_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AnyTerm {
    pub any_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArgumentItem {
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArgumentList {
    pub argument_item: Box<ArgumentItem>,
    pub argument_list_list: Vec<ArgumentListList>,
    pub argument_list_opt: Option<ArgumentListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArgumentListList {
    pub comma: Box<Comma>,
    pub argument_item: Box<ArgumentItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArgumentListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Array {
    pub l_bracket: Box<LBracket>,
    pub expression: Box<Expression>,
    pub array_list: Vec<ArrayList>,
    pub r_bracket: Box<RBracket>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayList {
    pub comma: Box<Comma>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralItem {
    pub array_literal_item_group: Box<ArrayLiteralItemGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ArrayLiteralItemGroup {
    ExpressionArrayLiteralItemOpt(ArrayLiteralItemGroupExpressionArrayLiteralItemOpt),
    DefaulColonExpression(ArrayLiteralItemGroupDefaulColonExpression),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralItemOpt {
    pub repeat: Box<Repeat>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralList {
    pub array_literal_item: Box<ArrayLiteralItem>,
    pub array_literal_list_list: Vec<ArrayLiteralListList>,
    pub array_literal_list_opt: Option<ArrayLiteralListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralListList {
    pub comma: Box<Comma>,
    pub array_literal_item: Box<ArrayLiteralItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayLiteralListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayType {
    pub scalar_type: Box<ScalarType>,
    pub array_type_opt: Option<ArrayTypeOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ArrayTypeOpt {
    pub array: Box<Array>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct As {
    pub as_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AsTerm {
    pub as_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AsToken {
    pub as_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Assign {
    pub assign_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignDeclaration {
    pub assign: Box<Assign>,
    pub hierarchical_identifier: Box<HierarchicalIdentifier>,
    pub equ: Box<Equ>,
    pub expression: Box<Expression>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignTerm {
    pub assign_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignToken {
    pub assign_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Assignment {
    pub assignment_group: Box<AssignmentGroup>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum AssignmentGroup {
    Equ(AssignmentGroupEqu),
    AssignmentOperator(AssignmentGroupAssignmentOperator),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignmentOperator {
    pub assignment_operator_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignmentOperatorTerm {
    pub assignment_operator_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AssignmentOperatorToken {
    pub assignment_operator_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Attribute {
    pub hash: Box<Hash>,
    pub l_bracket: Box<LBracket>,
    pub identifier: Box<Identifier>,
    pub attribute_opt: Option<AttributeOpt>,
    pub r_bracket: Box<RBracket>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum AttributeItem {
    Identifier(AttributeItemIdentifier),
    StringLiteral(AttributeItemStringLiteral),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AttributeList {
    pub attribute_item: Box<AttributeItem>,
    pub attribute_list_list: Vec<AttributeListList>,
    pub attribute_list_opt: Option<AttributeListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AttributeListList {
    pub comma: Box<Comma>,
    pub attribute_item: Box<AttributeItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AttributeListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AttributeOpt {
    pub l_paren: Box<LParen>,
    pub attribute_list: Box<AttributeList>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BackQuote {
    pub back_quote_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BackQuoteTerm {
    pub back_quote_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BackQuoteToken {
    pub back_quote_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BaseLess {
    pub base_less_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BaseLessTerm {
    pub base_less_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BaseLessToken {
    pub base_less_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Based {
    pub based_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BasedTerm {
    pub based_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BasedToken {
    pub based_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Bit {
    pub bit_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BitTerm {
    pub bit_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BitToken {
    pub bit_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Break {
    pub break_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BreakStatement {
    pub r#break: Box<Break>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BreakTerm {
    pub break_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct BreakToken {
    pub break_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Case {
    pub case_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseCondition {
    pub range_item: Box<RangeItem>,
    pub case_condition_list: Vec<CaseConditionList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseConditionList {
    pub comma: Box<Comma>,
    pub range_item: Box<RangeItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseExpression {
    pub case: Box<Case>,
    pub expression: Box<Expression>,
    pub l_brace: Box<LBrace>,
    pub case_condition: Box<CaseCondition>,
    pub colon: Box<Colon>,
    pub expression0: Box<Expression>,
    pub comma: Box<Comma>,
    pub case_expression_list: Vec<CaseExpressionList>,
    pub defaul: Box<Defaul>,
    pub colon0: Box<Colon>,
    pub expression1: Box<Expression>,
    pub case_expression_opt: Option<CaseExpressionOpt>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseExpressionList {
    pub case_condition: Box<CaseCondition>,
    pub colon: Box<Colon>,
    pub expression: Box<Expression>,
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseExpressionOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseItem {
    pub case_item_group: Box<CaseItemGroup>,
    pub colon: Box<Colon>,
    pub case_item_group0: Box<CaseItemGroup0>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum CaseItemGroup {
    CaseCondition(CaseItemGroupCaseCondition),
    Defaul(CaseItemGroupDefaul),
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum CaseItemGroup0 {
    Statement(CaseItemGroup0Statement),
    StatementBlock(CaseItemGroup0StatementBlock),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseStatement {
    pub case: Box<Case>,
    pub expression: Box<Expression>,
    pub l_brace: Box<LBrace>,
    pub case_statement_list: Vec<CaseStatementList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseStatementList {
    pub case_item: Box<CaseItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseTerm {
    pub case_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CaseToken {
    pub case_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum CastingType {
    U32(CastingTypeU32),
    U64(CastingTypeU64),
    I32(CastingTypeI32),
    I64(CastingTypeI64),
    F32(CastingTypeF32),
    F64(CastingTypeF64),
    Clock(CastingTypeClock),
    ClockPosedge(CastingTypeClockPosedge),
    ClockNegedge(CastingTypeClockNegedge),
    Reset(CastingTypeReset),
    ResetAsyncHigh(CastingTypeResetAsyncHigh),
    ResetAsyncLow(CastingTypeResetAsyncLow),
    ResetSyncHigh(CastingTypeResetSyncHigh),
    ResetSyncLow(CastingTypeResetSyncLow),
    UserDefinedType(CastingTypeUserDefinedType),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Clock {
    pub clock_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockDomain {
    pub back_quote: Box<BackQuote>,
    pub identifier: Box<Identifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockNegedge {
    pub clock_negedge_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockNegedgeTerm {
    pub clock_negedge_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockNegedgeToken {
    pub clock_negedge_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockPosedge {
    pub clock_posedge_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockPosedgeTerm {
    pub clock_posedge_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockPosedgeToken {
    pub clock_posedge_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockTerm {
    pub clock_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ClockToken {
    pub clock_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Colon {
    pub colon_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonColon {
    pub colon_colon_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonColonLAngle {
    pub colon_colon_l_angle_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonColonLAngleTerm {
    pub colon_colon_l_angle_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonColonLAngleToken {
    pub colon_colon_l_angle_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonColonTerm {
    pub colon_colon_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonColonToken {
    pub colon_colon_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonTerm {
    pub colon_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ColonToken {
    pub colon_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Comma {
    pub comma_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CommaTerm {
    pub comma_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CommaToken {
    pub comma_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Comments {
    pub comments_opt: Option<CommentsOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CommentsOpt {
    pub comments_term: Box<CommentsTerm>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CommentsTerm {
    pub comments_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConcatenationItem {
    pub expression: Box<Expression>,
    pub concatenation_item_opt: Option<ConcatenationItemOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConcatenationItemOpt {
    pub repeat: Box<Repeat>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConcatenationList {
    pub concatenation_item: Box<ConcatenationItem>,
    pub concatenation_list_list: Vec<ConcatenationListList>,
    pub concatenation_list_opt: Option<ConcatenationListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConcatenationListList {
    pub comma: Box<Comma>,
    pub concatenation_item: Box<ConcatenationItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConcatenationListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Const {
    pub const_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConstDeclaration {
    pub r#const: Box<Const>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub const_declaration_group: Box<ConstDeclarationGroup>,
    pub equ: Box<Equ>,
    pub expression: Box<Expression>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ConstDeclarationGroup {
    ArrayType(ConstDeclarationGroupArrayType),
    Type(ConstDeclarationGroupType),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConstTerm {
    pub const_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ConstToken {
    pub const_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Defaul {
    pub default_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DefaultTerm {
    pub default_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DefaultToken {
    pub default_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionGroup {
    pub description_group_list: Vec<DescriptionGroupList>,
    pub description_group_group: Box<DescriptionGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum DescriptionGroupGroup {
    LBraceDescriptionGroupGroupListRBrace(
        DescriptionGroupGroupLBraceDescriptionGroupGroupListRBrace,
    ),
    DescriptionItem(DescriptionGroupGroupDescriptionItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionGroupGroupList {
    pub description_group: Box<DescriptionGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DescriptionGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum DescriptionItem {
    ModuleDeclaration(DescriptionItemModuleDeclaration),
    InterfaceDeclaration(DescriptionItemInterfaceDeclaration),
    PackageDeclaration(DescriptionItemPackageDeclaration),
    ProtoModuleDeclaration(DescriptionItemProtoModuleDeclaration),
    ImportDeclaration(DescriptionItemImportDeclaration),
    EmbedDeclaration(DescriptionItemEmbedDeclaration),
    IncludeDeclaration(DescriptionItemIncludeDeclaration),
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Direction {
    Input(DirectionInput),
    Output(DirectionOutput),
    Inout(DirectionInout),
    Ref(DirectionRef),
    Modport(DirectionModport),
    Import(DirectionImport),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DollarIdentifier {
    pub dollar_identifier_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DollarIdentifierTerm {
    pub dollar_identifier_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DollarIdentifierToken {
    pub dollar_identifier_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Dot {
    pub dot_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotDot {
    pub dot_dot_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotDotEqu {
    pub dot_dot_equ_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotDotEquTerm {
    pub dot_dot_equ_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotDotEquToken {
    pub dot_dot_equ_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotDotTerm {
    pub dot_dot_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotDotToken {
    pub dot_dot_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotTerm {
    pub dot_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DotToken {
    pub dot_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Else {
    pub else_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ElseTerm {
    pub else_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ElseToken {
    pub else_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Embed {
    pub embed_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedContent {
    pub embed_content_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedContentToken {
    pub l_brace_term: Box<LBraceTerm>,
    pub l_brace_term0: Box<LBraceTerm>,
    pub l_brace_term1: Box<LBraceTerm>,
    pub embed_content_token_list: Vec<EmbedContentTokenList>,
    pub r_brace_term: Box<RBraceTerm>,
    pub r_brace_term0: Box<RBraceTerm>,
    pub r_brace_term1: Box<RBraceTerm>,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedContentTokenList {
    pub embed_item: Box<EmbedItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedDeclaration {
    pub embed: Box<Embed>,
    pub l_paren: Box<LParen>,
    pub identifier: Box<Identifier>,
    pub r_paren: Box<RParen>,
    pub identifier0: Box<Identifier>,
    pub embed_content: Box<EmbedContent>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum EmbedItem {
    LBraceTermEmbedItemListRBraceTerm(EmbedItemLBraceTermEmbedItemListRBraceTerm),
    AnyTerm(EmbedItemAnyTerm),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedItemList {
    pub embed_item: Box<EmbedItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedTerm {
    pub embed_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EmbedToken {
    pub embed_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Enum {
    pub enum_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumDeclaration {
    pub r#enum: Box<Enum>,
    pub identifier: Box<Identifier>,
    pub enum_declaration_opt: Option<EnumDeclarationOpt>,
    pub l_brace: Box<LBrace>,
    pub enum_list: Box<EnumList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumDeclarationOpt {
    pub colon: Box<Colon>,
    pub scalar_type: Box<ScalarType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumGroup {
    pub enum_group_list: Vec<EnumGroupList>,
    pub enum_group_group: Box<EnumGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum EnumGroupGroup {
    LBraceEnumListRBrace(EnumGroupGroupLBraceEnumListRBrace),
    EnumItem(EnumGroupGroupEnumItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumItem {
    pub identifier: Box<Identifier>,
    pub enum_item_opt: Option<EnumItemOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumItemOpt {
    pub equ: Box<Equ>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumList {
    pub enum_group: Box<EnumGroup>,
    pub enum_list_list: Vec<EnumListList>,
    pub enum_list_opt: Option<EnumListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumListList {
    pub comma: Box<Comma>,
    pub enum_group: Box<EnumGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumTerm {
    pub enum_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EnumToken {
    pub enum_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Equ {
    pub equ_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EquTerm {
    pub equ_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct EquToken {
    pub equ_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Exponent {
    pub exponent_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExponentTerm {
    pub exponent_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExponentToken {
    pub exponent_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Export {
    pub export_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExportDeclaration {
    pub export: Box<Export>,
    pub export_declaration_group: Box<ExportDeclarationGroup>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ExportDeclarationGroup {
    Star(ExportDeclarationGroupStar),
    ScopedIdentifierExportDeclarationOpt(
        ExportDeclarationGroupScopedIdentifierExportDeclarationOpt,
    ),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExportDeclarationOpt {
    pub colon_colon: Box<ColonColon>,
    pub star: Box<Star>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExportTerm {
    pub export_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExportToken {
    pub export_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression {
    pub expression01: Box<Expression01>,
    pub expression_list: Vec<ExpressionList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression01 {
    pub expression02: Box<Expression02>,
    pub expression01_list: Vec<Expression01List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression01List {
    pub operator02: Box<Operator02>,
    pub expression02: Box<Expression02>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression02 {
    pub expression03: Box<Expression03>,
    pub expression02_list: Vec<Expression02List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression02List {
    pub operator03: Box<Operator03>,
    pub expression03: Box<Expression03>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression03 {
    pub expression04: Box<Expression04>,
    pub expression03_list: Vec<Expression03List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression03List {
    pub operator04: Box<Operator04>,
    pub expression04: Box<Expression04>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression04 {
    pub expression05: Box<Expression05>,
    pub expression04_list: Vec<Expression04List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression04List {
    pub operator05: Box<Operator05>,
    pub expression05: Box<Expression05>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression05 {
    pub expression06: Box<Expression06>,
    pub expression05_list: Vec<Expression05List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression05List {
    pub operator06: Box<Operator06>,
    pub expression06: Box<Expression06>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression06 {
    pub expression07: Box<Expression07>,
    pub expression06_list: Vec<Expression06List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression06List {
    pub operator07: Box<Operator07>,
    pub expression07: Box<Expression07>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression07 {
    pub expression08: Box<Expression08>,
    pub expression07_list: Vec<Expression07List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression07List {
    pub operator08: Box<Operator08>,
    pub expression08: Box<Expression08>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression08 {
    pub expression09: Box<Expression09>,
    pub expression08_list: Vec<Expression08List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression08List {
    pub operator09: Box<Operator09>,
    pub expression09: Box<Expression09>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression09 {
    pub expression10: Box<Expression10>,
    pub expression09_list: Vec<Expression09List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression09List {
    pub expression09_list_group: Box<Expression09ListGroup>,
    pub expression10: Box<Expression10>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Expression09ListGroup {
    Operator10(Expression09ListGroupOperator10),
    Star(Expression09ListGroupStar),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression10 {
    pub expression11: Box<Expression11>,
    pub expression10_list: Vec<Expression10List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression10List {
    pub operator11: Box<Operator11>,
    pub expression11: Box<Expression11>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression11 {
    pub expression12: Box<Expression12>,
    pub expression11_opt: Option<Expression11Opt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression11Opt {
    pub r#as: Box<As>,
    pub casting_type: Box<CastingType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12 {
    pub expression12_list: Vec<Expression12List>,
    pub factor: Box<Factor>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Expression12List {
    pub expression12_list_group: Box<Expression12ListGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Expression12ListGroup {
    UnaryOperator(Expression12ListGroupUnaryOperator),
    Operator09(Expression12ListGroupOperator09),
    Operator05(Expression12ListGroupOperator05),
    Operator03(Expression12ListGroupOperator03),
    Operator04(Expression12ListGroupOperator04),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExpressionIdentifier {
    pub scoped_identifier: Box<ScopedIdentifier>,
    pub expression_identifier_opt: Option<ExpressionIdentifierOpt>,
    pub expression_identifier_list: Vec<ExpressionIdentifierList>,
    pub expression_identifier_list0: Vec<ExpressionIdentifierList0>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExpressionIdentifierList {
    pub select: Box<Select>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExpressionIdentifierList0 {
    pub dot: Box<Dot>,
    pub identifier: Box<Identifier>,
    pub expression_identifier_list0_list: Vec<ExpressionIdentifierList0List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExpressionIdentifierList0List {
    pub select: Box<Select>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExpressionIdentifierOpt {
    pub width: Box<Width>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ExpressionList {
    pub operator01: Box<Operator01>,
    pub expression01: Box<Expression01>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct F32 {
    pub f32_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct F32Term {
    pub f32_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct F32Token {
    pub f32_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct F64 {
    pub f64_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct F64Term {
    pub f64_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct F64Token {
    pub f64_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Factor {
    Number(FactorNumber),
    ExpressionIdentifierFactorOpt(FactorExpressionIdentifierFactorOpt),
    LParenExpressionRParen(FactorLParenExpressionRParen),
    LBraceConcatenationListRBrace(FactorLBraceConcatenationListRBrace),
    QuoteLBraceArrayLiteralListRBrace(FactorQuoteLBraceArrayLiteralListRBrace),
    IfExpression(FactorIfExpression),
    CaseExpression(FactorCaseExpression),
    SwitchExpression(FactorSwitchExpression),
    StringLiteral(FactorStringLiteral),
    FactorGroup(FactorFactorGroup),
    InsideExpression(FactorInsideExpression),
    OutsideExpression(FactorOutsideExpression),
    TypeExpression(FactorTypeExpression),
    FactorType(FactorFactorType),
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum FactorGroup {
    Msb(FactorGroupMsb),
    Lsb(FactorGroupLsb),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorOpt {
    pub function_call: Box<FunctionCall>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorType {
    pub factor_type_group: Box<FactorTypeGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum FactorTypeGroup {
    VariableTypeFactorTypeOpt(FactorTypeGroupVariableTypeFactorTypeOpt),
    FixedType(FactorTypeGroupFixedType),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorTypeOpt {
    pub width: Box<Width>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Final {
    pub final_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FinalDeclaration {
    pub r#final: Box<Final>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FinalTerm {
    pub final_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FinalToken {
    pub final_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedPoint {
    pub fixed_point_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedPointTerm {
    pub fixed_point_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FixedPointToken {
    pub fixed_point_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum FixedType {
    U32(FixedTypeU32),
    U64(FixedTypeU64),
    I32(FixedTypeI32),
    I64(FixedTypeI64),
    F32(FixedTypeF32),
    F64(FixedTypeF64),
    Strin(FixedTypeStrin),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct For {
    pub for_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ForStatement {
    pub r#for: Box<For>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub scalar_type: Box<ScalarType>,
    pub r#in: Box<In>,
    pub range: Box<Range>,
    pub for_statement_opt: Option<ForStatementOpt>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ForStatementOpt {
    pub step: Box<Step>,
    pub assignment_operator: Box<AssignmentOperator>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ForTerm {
    pub for_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ForToken {
    pub for_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Function {
    pub function_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionCall {
    pub l_paren: Box<LParen>,
    pub function_call_opt: Option<FunctionCallOpt>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionCallOpt {
    pub argument_list: Box<ArgumentList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionDeclaration {
    pub function: Box<Function>,
    pub identifier: Box<Identifier>,
    pub function_declaration_opt: Option<FunctionDeclarationOpt>,
    pub function_declaration_opt0: Option<FunctionDeclarationOpt0>,
    pub function_declaration_opt1: Option<FunctionDeclarationOpt1>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionDeclarationOpt {
    pub with_generic_parameter: Box<WithGenericParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionDeclarationOpt0 {
    pub port_declaration: Box<PortDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionDeclarationOpt1 {
    pub minus_g_t: Box<MinusGT>,
    pub scalar_type: Box<ScalarType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionTerm {
    pub function_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FunctionToken {
    pub function_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateBlockDeclaration {
    pub generate_named_block: Box<GenerateNamedBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateForDeclaration {
    pub r#for: Box<For>,
    pub identifier: Box<Identifier>,
    pub r#in: Box<In>,
    pub range: Box<Range>,
    pub generate_for_declaration_opt: Option<GenerateForDeclarationOpt>,
    pub generate_named_block: Box<GenerateNamedBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateForDeclarationOpt {
    pub step: Box<Step>,
    pub assignment_operator: Box<AssignmentOperator>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateGroup {
    pub generate_group_list: Vec<GenerateGroupList>,
    pub generate_group_group: Box<GenerateGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum GenerateGroupGroup {
    LBraceGenerateGroupGroupListRBrace(GenerateGroupGroupLBraceGenerateGroupGroupListRBrace),
    GenerateItem(GenerateGroupGroupGenerateItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateGroupGroupList {
    pub generate_group: Box<GenerateGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateIfDeclaration {
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub generate_named_block: Box<GenerateNamedBlock>,
    pub generate_if_declaration_list: Vec<GenerateIfDeclarationList>,
    pub generate_if_declaration_opt: Option<GenerateIfDeclarationOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateIfDeclarationList {
    pub r#else: Box<Else>,
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub generate_optional_named_block: Box<GenerateOptionalNamedBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateIfDeclarationOpt {
    pub r#else: Box<Else>,
    pub generate_optional_named_block: Box<GenerateOptionalNamedBlock>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum GenerateItem {
    LetDeclaration(GenerateItemLetDeclaration),
    VarDeclaration(GenerateItemVarDeclaration),
    InstDeclaration(GenerateItemInstDeclaration),
    ConstDeclaration(GenerateItemConstDeclaration),
    AlwaysFfDeclaration(GenerateItemAlwaysFfDeclaration),
    AlwaysCombDeclaration(GenerateItemAlwaysCombDeclaration),
    AssignDeclaration(GenerateItemAssignDeclaration),
    FunctionDeclaration(GenerateItemFunctionDeclaration),
    GenerateIfDeclaration(GenerateItemGenerateIfDeclaration),
    GenerateForDeclaration(GenerateItemGenerateForDeclaration),
    GenerateBlockDeclaration(GenerateItemGenerateBlockDeclaration),
    TypeDefDeclaration(GenerateItemTypeDefDeclaration),
    EnumDeclaration(GenerateItemEnumDeclaration),
    StructUnionDeclaration(GenerateItemStructUnionDeclaration),
    ImportDeclaration(GenerateItemImportDeclaration),
    InitialDeclaration(GenerateItemInitialDeclaration),
    FinalDeclaration(GenerateItemFinalDeclaration),
    UnsafeBlock(GenerateItemUnsafeBlock),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateNamedBlock {
    pub colon: Box<Colon>,
    pub identifier: Box<Identifier>,
    pub l_brace: Box<LBrace>,
    pub generate_named_block_list: Vec<GenerateNamedBlockList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateNamedBlockList {
    pub generate_group: Box<GenerateGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateOptionalNamedBlock {
    pub generate_optional_named_block_opt: Option<GenerateOptionalNamedBlockOpt>,
    pub l_brace: Box<LBrace>,
    pub generate_optional_named_block_list: Vec<GenerateOptionalNamedBlockList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateOptionalNamedBlockList {
    pub generate_group: Box<GenerateGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GenerateOptionalNamedBlockOpt {
    pub colon: Box<Colon>,
    pub identifier: Box<Identifier>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum GenericBound {
    Const(GenericBoundConst),
    Type(GenericBoundType),
    ScopedIdentifier(GenericBoundScopedIdentifier),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Hash {
    pub hash_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct HashTerm {
    pub hash_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct HashToken {
    pub hash_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct HierarchicalIdentifier {
    pub identifier: Box<Identifier>,
    pub hierarchical_identifier_list: Vec<HierarchicalIdentifierList>,
    pub hierarchical_identifier_list0: Vec<HierarchicalIdentifierList0>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct HierarchicalIdentifierList {
    pub select: Box<Select>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct HierarchicalIdentifierList0 {
    pub dot: Box<Dot>,
    pub identifier: Box<Identifier>,
    pub hierarchical_identifier_list0_list: Vec<HierarchicalIdentifierList0List>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct HierarchicalIdentifierList0List {
    pub select: Box<Select>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct I32 {
    pub i32_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct I32Term {
    pub i32_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct I32Token {
    pub i32_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct I64 {
    pub i64_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct I64Term {
    pub i64_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct I64Token {
    pub i64_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Identifier {
    pub identifier_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IdentifierStatement {
    pub expression_identifier: Box<ExpressionIdentifier>,
    pub identifier_statement_group: Box<IdentifierStatementGroup>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum IdentifierStatementGroup {
    FunctionCall(IdentifierStatementGroupFunctionCall),
    Assignment(IdentifierStatementGroupAssignment),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IdentifierTerm {
    pub identifier_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IdentifierToken {
    pub identifier_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct If {
    pub if_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfExpression {
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub l_brace: Box<LBrace>,
    pub expression0: Box<Expression>,
    pub r_brace: Box<RBrace>,
    pub if_expression_list: Vec<IfExpressionList>,
    pub r#else: Box<Else>,
    pub l_brace0: Box<LBrace>,
    pub expression1: Box<Expression>,
    pub r_brace0: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfExpressionList {
    pub r#else: Box<Else>,
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub l_brace: Box<LBrace>,
    pub expression0: Box<Expression>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfReset {
    pub if_reset_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfResetStatement {
    pub if_reset: Box<IfReset>,
    pub statement_block: Box<StatementBlock>,
    pub if_reset_statement_list: Vec<IfResetStatementList>,
    pub if_reset_statement_opt: Option<IfResetStatementOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfResetStatementList {
    pub r#else: Box<Else>,
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfResetStatementOpt {
    pub r#else: Box<Else>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfResetTerm {
    pub if_reset_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfResetToken {
    pub if_reset_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfStatement {
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub statement_block: Box<StatementBlock>,
    pub if_statement_list: Vec<IfStatementList>,
    pub if_statement_opt: Option<IfStatementOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfStatementList {
    pub r#else: Box<Else>,
    pub r#if: Box<If>,
    pub expression: Box<Expression>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfStatementOpt {
    pub r#else: Box<Else>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfTerm {
    pub if_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IfToken {
    pub if_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Import {
    pub import_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ImportDeclaration {
    pub import: Box<Import>,
    pub scoped_identifier: Box<ScopedIdentifier>,
    pub import_declaration_opt: Option<ImportDeclarationOpt>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ImportDeclarationOpt {
    pub colon_colon: Box<ColonColon>,
    pub star: Box<Star>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ImportTerm {
    pub import_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ImportToken {
    pub import_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct In {
    pub in_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InTerm {
    pub in_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InToken {
    pub in_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Include {
    pub include_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IncludeDeclaration {
    pub include: Box<Include>,
    pub l_paren: Box<LParen>,
    pub identifier: Box<Identifier>,
    pub comma: Box<Comma>,
    pub string_literal: Box<StringLiteral>,
    pub r_paren: Box<RParen>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IncludeTerm {
    pub include_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct IncludeToken {
    pub include_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Initial {
    pub initial_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InitialDeclaration {
    pub initial: Box<Initial>,
    pub statement_block: Box<StatementBlock>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InitialTerm {
    pub initial_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InitialToken {
    pub initial_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Inout {
    pub inout_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InoutTerm {
    pub inout_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InoutToken {
    pub inout_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Input {
    pub input_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InputTerm {
    pub input_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InputToken {
    pub input_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Inside {
    pub inside_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InsideExpression {
    pub inside: Box<Inside>,
    pub expression: Box<Expression>,
    pub l_brace: Box<LBrace>,
    pub range_list: Box<RangeList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InsideTerm {
    pub inside_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InsideToken {
    pub inside_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Inst {
    pub inst_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstDeclaration {
    pub inst: Box<Inst>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub scoped_identifier: Box<ScopedIdentifier>,
    pub inst_declaration_opt: Option<InstDeclarationOpt>,
    pub inst_declaration_opt0: Option<InstDeclarationOpt0>,
    pub inst_declaration_opt1: Option<InstDeclarationOpt1>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstDeclarationOpt {
    pub array: Box<Array>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstDeclarationOpt0 {
    pub inst_parameter: Box<InstParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstDeclarationOpt1 {
    pub l_paren: Box<LParen>,
    pub inst_declaration_opt2: Option<InstDeclarationOpt2>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstDeclarationOpt2 {
    pub inst_port_list: Box<InstPortList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameter {
    pub hash: Box<Hash>,
    pub l_paren: Box<LParen>,
    pub inst_parameter_opt: Option<InstParameterOpt>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterGroup {
    pub inst_parameter_group_list: Vec<InstParameterGroupList>,
    pub inst_parameter_group_group: Box<InstParameterGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum InstParameterGroupGroup {
    LBraceInstParameterListRBrace(InstParameterGroupGroupLBraceInstParameterListRBrace),
    InstParameterItem(InstParameterGroupGroupInstParameterItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterItem {
    pub identifier: Box<Identifier>,
    pub inst_parameter_item_opt: Option<InstParameterItemOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterItemOpt {
    pub colon: Box<Colon>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterList {
    pub inst_parameter_group: Box<InstParameterGroup>,
    pub inst_parameter_list_list: Vec<InstParameterListList>,
    pub inst_parameter_list_opt: Option<InstParameterListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterListList {
    pub comma: Box<Comma>,
    pub inst_parameter_group: Box<InstParameterGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstParameterOpt {
    pub inst_parameter_list: Box<InstParameterList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortGroup {
    pub inst_port_group_list: Vec<InstPortGroupList>,
    pub inst_port_group_group: Box<InstPortGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum InstPortGroupGroup {
    LBraceInstPortListRBrace(InstPortGroupGroupLBraceInstPortListRBrace),
    InstPortItem(InstPortGroupGroupInstPortItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortItem {
    pub identifier: Box<Identifier>,
    pub inst_port_item_opt: Option<InstPortItemOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortItemOpt {
    pub colon: Box<Colon>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortList {
    pub inst_port_group: Box<InstPortGroup>,
    pub inst_port_list_list: Vec<InstPortListList>,
    pub inst_port_list_opt: Option<InstPortListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortListList {
    pub comma: Box<Comma>,
    pub inst_port_group: Box<InstPortGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstPortListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstTerm {
    pub inst_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InstToken {
    pub inst_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum IntegralNumber {
    Based(IntegralNumberBased),
    BaseLess(IntegralNumberBaseLess),
    AllBit(IntegralNumberAllBit),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Interface {
    pub interface_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceDeclaration {
    pub interface_declaration_opt: Option<InterfaceDeclarationOpt>,
    pub interface: Box<Interface>,
    pub identifier: Box<Identifier>,
    pub interface_declaration_opt0: Option<InterfaceDeclarationOpt0>,
    pub interface_declaration_opt1: Option<InterfaceDeclarationOpt1>,
    pub l_brace: Box<LBrace>,
    pub interface_declaration_list: Vec<InterfaceDeclarationList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceDeclarationList {
    pub interface_group: Box<InterfaceGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceDeclarationOpt {
    pub r#pub: Box<Pub>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceDeclarationOpt0 {
    pub with_generic_parameter: Box<WithGenericParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceDeclarationOpt1 {
    pub with_parameter: Box<WithParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceGroup {
    pub interface_group_list: Vec<InterfaceGroupList>,
    pub interface_group_group: Box<InterfaceGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum InterfaceGroupGroup {
    LBraceInterfaceGroupGroupListRBrace(InterfaceGroupGroupLBraceInterfaceGroupGroupListRBrace),
    InterfaceItem(InterfaceGroupGroupInterfaceItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceGroupGroupList {
    pub interface_group: Box<InterfaceGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum InterfaceItem {
    GenerateItem(InterfaceItemGenerateItem),
    ModportDeclaration(InterfaceItemModportDeclaration),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceTerm {
    pub interface_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct InterfaceToken {
    pub interface_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LAngle {
    pub l_angle_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LAngleTerm {
    pub l_angle_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LAngleToken {
    pub l_angle_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LBrace {
    pub l_brace_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LBraceTerm {
    pub l_brace_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LBraceToken {
    pub l_brace_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LBracket {
    pub l_bracket_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LBracketTerm {
    pub l_bracket_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LBracketToken {
    pub l_bracket_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LParen {
    pub l_paren_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LParenTerm {
    pub l_paren_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LParenToken {
    pub l_paren_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Let {
    pub let_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LetDeclaration {
    pub r#let: Box<Let>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub let_declaration_opt: Option<LetDeclarationOpt>,
    pub array_type: Box<ArrayType>,
    pub equ: Box<Equ>,
    pub expression: Box<Expression>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LetDeclarationOpt {
    pub clock_domain: Box<ClockDomain>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LetStatement {
    pub r#let: Box<Let>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub let_statement_opt: Option<LetStatementOpt>,
    pub array_type: Box<ArrayType>,
    pub equ: Box<Equ>,
    pub expression: Box<Expression>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LetStatementOpt {
    pub clock_domain: Box<ClockDomain>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LetTerm {
    pub let_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LetToken {
    pub let_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Logic {
    pub logic_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LogicTerm {
    pub logic_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LogicToken {
    pub logic_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Lsb {
    pub lsb_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LsbTerm {
    pub lsb_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct LsbToken {
    pub lsb_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MinusColon {
    pub minus_colon_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MinusColonTerm {
    pub minus_colon_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MinusColonToken {
    pub minus_colon_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MinusGT {
    pub minus_g_t_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MinusGTTerm {
    pub minus_g_t_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MinusGTToken {
    pub minus_g_t_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Modport {
    pub modport_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportDeclaration {
    pub modport: Box<Modport>,
    pub identifier: Box<Identifier>,
    pub l_brace: Box<LBrace>,
    pub modport_list: Box<ModportList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportGroup {
    pub modport_group_list: Vec<ModportGroupList>,
    pub modport_group_group: Box<ModportGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ModportGroupGroup {
    LBraceModportListRBrace(ModportGroupGroupLBraceModportListRBrace),
    ModportItem(ModportGroupGroupModportItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportItem {
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub direction: Box<Direction>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportList {
    pub modport_group: Box<ModportGroup>,
    pub modport_list_list: Vec<ModportListList>,
    pub modport_list_opt: Option<ModportListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportListList {
    pub comma: Box<Comma>,
    pub modport_group: Box<ModportGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportTerm {
    pub modport_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModportToken {
    pub modport_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Module {
    pub module_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclaration {
    pub module_declaration_opt: Option<ModuleDeclarationOpt>,
    pub module: Box<Module>,
    pub identifier: Box<Identifier>,
    pub module_declaration_opt0: Option<ModuleDeclarationOpt0>,
    pub module_declaration_opt1: Option<ModuleDeclarationOpt1>,
    pub module_declaration_opt2: Option<ModuleDeclarationOpt2>,
    pub module_declaration_opt3: Option<ModuleDeclarationOpt3>,
    pub l_brace: Box<LBrace>,
    pub module_declaration_list: Vec<ModuleDeclarationList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclarationList {
    pub module_group: Box<ModuleGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclarationOpt {
    pub r#pub: Box<Pub>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclarationOpt0 {
    pub with_generic_parameter: Box<WithGenericParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclarationOpt1 {
    pub r#for: Box<For>,
    pub scoped_identifier: Box<ScopedIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclarationOpt2 {
    pub with_parameter: Box<WithParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleDeclarationOpt3 {
    pub port_declaration: Box<PortDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleGroup {
    pub module_group_list: Vec<ModuleGroupList>,
    pub module_group_group: Box<ModuleGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ModuleGroupGroup {
    LBraceModuleGroupGroupListRBrace(ModuleGroupGroupLBraceModuleGroupGroupListRBrace),
    ModuleItem(ModuleGroupGroupModuleItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleGroupGroupList {
    pub module_group: Box<ModuleGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleItem {
    pub generate_item: Box<GenerateItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleTerm {
    pub module_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ModuleToken {
    pub module_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Msb {
    pub msb_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MsbTerm {
    pub msb_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct MsbToken {
    pub msb_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Number {
    IntegralNumber(NumberIntegralNumber),
    RealNumber(NumberRealNumber),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator01 {
    pub operator01_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator01Term {
    pub operator01_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator01Token {
    pub operator01_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator02 {
    pub operator02_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator02Term {
    pub operator02_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator02Token {
    pub operator02_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator03 {
    pub operator03_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator03Term {
    pub operator03_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator03Token {
    pub operator03_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator04 {
    pub operator04_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator04Term {
    pub operator04_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator04Token {
    pub operator04_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator05 {
    pub operator05_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator05Term {
    pub operator05_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator05Token {
    pub operator05_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator06 {
    pub operator06_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator06Term {
    pub operator06_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator06Token {
    pub operator06_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator07 {
    pub operator07_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator07Term {
    pub operator07_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator07Token {
    pub operator07_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator08 {
    pub operator08_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator08Term {
    pub operator08_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator08Token {
    pub operator08_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator09 {
    pub operator09_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator09Term {
    pub operator09_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator09Token {
    pub operator09_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator10 {
    pub operator10_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator10Term {
    pub operator10_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator10Token {
    pub operator10_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator11 {
    pub operator11_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator11Term {
    pub operator11_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Operator11Token {
    pub operator11_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Output {
    pub output_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct OutputTerm {
    pub output_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct OutputToken {
    pub output_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Outside {
    pub outside_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct OutsideExpression {
    pub outside: Box<Outside>,
    pub expression: Box<Expression>,
    pub l_brace: Box<LBrace>,
    pub range_list: Box<RangeList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct OutsideTerm {
    pub outside_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct OutsideToken {
    pub outside_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Package {
    pub package_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageDeclaration {
    pub package_declaration_opt: Option<PackageDeclarationOpt>,
    pub package: Box<Package>,
    pub identifier: Box<Identifier>,
    pub package_declaration_opt0: Option<PackageDeclarationOpt0>,
    pub l_brace: Box<LBrace>,
    pub package_declaration_list: Vec<PackageDeclarationList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageDeclarationList {
    pub package_group: Box<PackageGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageDeclarationOpt {
    pub r#pub: Box<Pub>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageDeclarationOpt0 {
    pub with_generic_parameter: Box<WithGenericParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageGroup {
    pub package_group_list: Vec<PackageGroupList>,
    pub package_group_group: Box<PackageGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum PackageGroupGroup {
    LBracePackageGroupGroupListRBrace(PackageGroupGroupLBracePackageGroupGroupListRBrace),
    PackageItem(PackageGroupGroupPackageItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageGroupGroupList {
    pub package_group: Box<PackageGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum PackageItem {
    VarDeclaration(PackageItemVarDeclaration),
    ConstDeclaration(PackageItemConstDeclaration),
    TypeDefDeclaration(PackageItemTypeDefDeclaration),
    EnumDeclaration(PackageItemEnumDeclaration),
    StructUnionDeclaration(PackageItemStructUnionDeclaration),
    FunctionDeclaration(PackageItemFunctionDeclaration),
    ImportDeclaration(PackageItemImportDeclaration),
    ExportDeclaration(PackageItemExportDeclaration),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageTerm {
    pub package_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PackageToken {
    pub package_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Param {
    pub param_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ParamTerm {
    pub param_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ParamToken {
    pub param_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PlusColon {
    pub plus_colon_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PlusColonTerm {
    pub plus_colon_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PlusColonToken {
    pub plus_colon_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclaration {
    pub l_paren: Box<LParen>,
    pub port_declaration_opt: Option<PortDeclarationOpt>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationGroup {
    pub port_declaration_group_list: Vec<PortDeclarationGroupList>,
    pub port_declaration_group_group: Box<PortDeclarationGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum PortDeclarationGroupGroup {
    LBracePortDeclarationListRBrace(PortDeclarationGroupGroupLBracePortDeclarationListRBrace),
    PortDeclarationItem(PortDeclarationGroupGroupPortDeclarationItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationItem {
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub port_declaration_item_group: Box<PortDeclarationItemGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum PortDeclarationItemGroup {
    PortTypeConcrete(PortDeclarationItemGroupPortTypeConcrete),
    PortTypeAbstract(PortDeclarationItemGroupPortTypeAbstract),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationList {
    pub port_declaration_group: Box<PortDeclarationGroup>,
    pub port_declaration_list_list: Vec<PortDeclarationListList>,
    pub port_declaration_list_opt: Option<PortDeclarationListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationListList {
    pub comma: Box<Comma>,
    pub port_declaration_group: Box<PortDeclarationGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortDeclarationOpt {
    pub port_declaration_list: Box<PortDeclarationList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortTypeAbstract {
    pub port_type_abstract_opt: Option<PortTypeAbstractOpt>,
    pub interface: Box<Interface>,
    pub port_type_abstract_opt0: Option<PortTypeAbstractOpt0>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortTypeAbstractOpt {
    pub clock_domain: Box<ClockDomain>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortTypeAbstractOpt0 {
    pub array: Box<Array>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortTypeConcrete {
    pub direction: Box<Direction>,
    pub port_type_concrete_opt: Option<PortTypeConcreteOpt>,
    pub array_type: Box<ArrayType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PortTypeConcreteOpt {
    pub clock_domain: Box<ClockDomain>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Proto {
    pub proto_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ProtoModuleDeclaration {
    pub proto_module_declaration_opt: Option<ProtoModuleDeclarationOpt>,
    pub proto: Box<Proto>,
    pub module: Box<Module>,
    pub identifier: Box<Identifier>,
    pub proto_module_declaration_opt0: Option<ProtoModuleDeclarationOpt0>,
    pub proto_module_declaration_opt1: Option<ProtoModuleDeclarationOpt1>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ProtoModuleDeclarationOpt {
    pub r#pub: Box<Pub>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ProtoModuleDeclarationOpt0 {
    pub with_parameter: Box<WithParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ProtoModuleDeclarationOpt1 {
    pub port_declaration: Box<PortDeclaration>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ProtoTerm {
    pub proto_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ProtoToken {
    pub proto_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Pub {
    pub pub_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PubTerm {
    pub pub_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PubToken {
    pub pub_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct QuoteLBrace {
    pub quote_l_brace_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct QuoteLBraceTerm {
    pub quote_l_brace_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct QuoteLBraceToken {
    pub quote_l_brace_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RAngle {
    pub r_angle_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RAngleTerm {
    pub r_angle_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RAngleToken {
    pub r_angle_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RBrace {
    pub r_brace_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RBraceTerm {
    pub r_brace_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RBraceToken {
    pub r_brace_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RBracket {
    pub r_bracket_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RBracketTerm {
    pub r_bracket_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RBracketToken {
    pub r_bracket_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RParen {
    pub r_paren_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RParenTerm {
    pub r_paren_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RParenToken {
    pub r_paren_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Range {
    pub expression: Box<Expression>,
    pub range_opt: Option<RangeOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeItem {
    pub range: Box<Range>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeList {
    pub range_item: Box<RangeItem>,
    pub range_list_list: Vec<RangeListList>,
    pub range_list_opt: Option<RangeListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeListList {
    pub comma: Box<Comma>,
    pub range_item: Box<RangeItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum RangeOperator {
    DotDot(RangeOperatorDotDot),
    DotDotEqu(RangeOperatorDotDotEqu),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RangeOpt {
    pub range_operator: Box<RangeOperator>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum RealNumber {
    FixedPoint(RealNumberFixedPoint),
    Exponent(RealNumberExponent),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Ref {
    pub ref_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RefTerm {
    pub ref_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RefToken {
    pub ref_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Repeat {
    pub repeat_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RepeatTerm {
    pub repeat_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RepeatToken {
    pub repeat_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Reset {
    pub reset_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetAsyncHigh {
    pub reset_async_high_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetAsyncHighTerm {
    pub reset_async_high_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetAsyncHighToken {
    pub reset_async_high_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetAsyncLow {
    pub reset_async_low_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetAsyncLowTerm {
    pub reset_async_low_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetAsyncLowToken {
    pub reset_async_low_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetSyncHigh {
    pub reset_sync_high_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetSyncHighTerm {
    pub reset_sync_high_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetSyncHighToken {
    pub reset_sync_high_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetSyncLow {
    pub reset_sync_low_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetSyncLowTerm {
    pub reset_sync_low_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetSyncLowToken {
    pub reset_sync_low_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetTerm {
    pub reset_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ResetToken {
    pub reset_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Return {
    pub return_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ReturnStatement {
    pub r#return: Box<Return>,
    pub expression: Box<Expression>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ReturnTerm {
    pub return_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ReturnToken {
    pub return_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScalarType {
    pub scalar_type_list: Vec<ScalarTypeList>,
    pub scalar_type_group: Box<ScalarTypeGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ScalarTypeGroup {
    UserDefinedTypeScalarTypeOpt(ScalarTypeGroupUserDefinedTypeScalarTypeOpt),
    FactorType(ScalarTypeGroupFactorType),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScalarTypeList {
    pub type_modifier: Box<TypeModifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScalarTypeOpt {
    pub width: Box<Width>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScopedIdentifier {
    pub scoped_identifier_group: Box<ScopedIdentifierGroup>,
    pub scoped_identifier_list: Vec<ScopedIdentifierList>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ScopedIdentifierGroup {
    DollarIdentifier(ScopedIdentifierGroupDollarIdentifier),
    IdentifierScopedIdentifierOpt(ScopedIdentifierGroupIdentifierScopedIdentifierOpt),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScopedIdentifierList {
    pub colon_colon: Box<ColonColon>,
    pub identifier: Box<Identifier>,
    pub scoped_identifier_opt0: Option<ScopedIdentifierOpt0>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScopedIdentifierOpt {
    pub with_generic_argument: Box<WithGenericArgument>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScopedIdentifierOpt0 {
    pub with_generic_argument: Box<WithGenericArgument>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Select {
    pub l_bracket: Box<LBracket>,
    pub expression: Box<Expression>,
    pub select_opt: Option<SelectOpt>,
    pub r_bracket: Box<RBracket>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum SelectOperator {
    Colon(SelectOperatorColon),
    PlusColon(SelectOperatorPlusColon),
    MinusColon(SelectOperatorMinusColon),
    Step(SelectOperatorStep),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SelectOpt {
    pub select_operator: Box<SelectOperator>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Semicolon {
    pub semicolon_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SemicolonTerm {
    pub semicolon_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SemicolonToken {
    pub semicolon_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Signed {
    pub signed_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SignedTerm {
    pub signed_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SignedToken {
    pub signed_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Star {
    pub star_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StarTerm {
    pub star_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StarToken {
    pub star_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Start {
    pub start_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StartToken {
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Statement {
    IdentifierStatement(StatementIdentifierStatement),
    IfStatement(StatementIfStatement),
    IfResetStatement(StatementIfResetStatement),
    ReturnStatement(StatementReturnStatement),
    BreakStatement(StatementBreakStatement),
    ForStatement(StatementForStatement),
    CaseStatement(StatementCaseStatement),
    SwitchStatement(StatementSwitchStatement),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementBlock {
    pub l_brace: Box<LBrace>,
    pub statement_block_list: Vec<StatementBlockList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum StatementBlockItem {
    VarDeclaration(StatementBlockItemVarDeclaration),
    LetStatement(StatementBlockItemLetStatement),
    Statement(StatementBlockItemStatement),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StatementBlockList {
    pub statement_block_item: Box<StatementBlockItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Step {
    pub step_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StepTerm {
    pub step_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StepToken {
    pub step_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Strin {
    pub string_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StringLiteral {
    pub string_literal_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StringLiteralTerm {
    pub string_literal_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StringLiteralToken {
    pub string_literal_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StringTerm {
    pub string_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StringToken {
    pub string_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Struct {
    pub struct_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructTerm {
    pub struct_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructToken {
    pub struct_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum StructUnion {
    Struct(StructUnionStruct),
    Union(StructUnionUnion),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionDeclaration {
    pub struct_union: Box<StructUnion>,
    pub identifier: Box<Identifier>,
    pub struct_union_declaration_opt: Option<StructUnionDeclarationOpt>,
    pub l_brace: Box<LBrace>,
    pub struct_union_list: Box<StructUnionList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionDeclarationOpt {
    pub with_generic_parameter: Box<WithGenericParameter>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionGroup {
    pub struct_union_group_list: Vec<StructUnionGroupList>,
    pub struct_union_group_group: Box<StructUnionGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum StructUnionGroupGroup {
    LBraceStructUnionListRBrace(StructUnionGroupGroupLBraceStructUnionListRBrace),
    StructUnionItem(StructUnionGroupGroupStructUnionItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionItem {
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub scalar_type: Box<ScalarType>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionList {
    pub struct_union_group: Box<StructUnionGroup>,
    pub struct_union_list_list: Vec<StructUnionListList>,
    pub struct_union_list_opt: Option<StructUnionListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionListList {
    pub comma: Box<Comma>,
    pub struct_union_group: Box<StructUnionGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StructUnionListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Switch {
    pub switch_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchCondition {
    pub expression: Box<Expression>,
    pub switch_condition_list: Vec<SwitchConditionList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchConditionList {
    pub comma: Box<Comma>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchExpression {
    pub switch: Box<Switch>,
    pub l_brace: Box<LBrace>,
    pub switch_condition: Box<SwitchCondition>,
    pub colon: Box<Colon>,
    pub expression: Box<Expression>,
    pub comma: Box<Comma>,
    pub switch_expression_list: Vec<SwitchExpressionList>,
    pub defaul: Box<Defaul>,
    pub colon0: Box<Colon>,
    pub expression0: Box<Expression>,
    pub switch_expression_opt: Option<SwitchExpressionOpt>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchExpressionList {
    pub switch_condition: Box<SwitchCondition>,
    pub colon: Box<Colon>,
    pub expression: Box<Expression>,
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchExpressionOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchItem {
    pub switch_item_group: Box<SwitchItemGroup>,
    pub colon: Box<Colon>,
    pub switch_item_group0: Box<SwitchItemGroup0>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum SwitchItemGroup {
    SwitchCondition(SwitchItemGroupSwitchCondition),
    Defaul(SwitchItemGroupDefaul),
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum SwitchItemGroup0 {
    Statement(SwitchItemGroup0Statement),
    StatementBlock(SwitchItemGroup0StatementBlock),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchStatement {
    pub switch: Box<Switch>,
    pub l_brace: Box<LBrace>,
    pub switch_statement_list: Vec<SwitchStatementList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchStatementList {
    pub switch_item: Box<SwitchItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchTerm {
    pub switch_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SwitchToken {
    pub switch_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Tri {
    pub tri_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TriTerm {
    pub tri_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TriToken {
    pub tri_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Type {
    pub type_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TypeDefDeclaration {
    pub r#type: Box<Type>,
    pub identifier: Box<Identifier>,
    pub equ: Box<Equ>,
    pub array_type: Box<ArrayType>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TypeExpression {
    pub r#type: Box<Type>,
    pub l_paren: Box<LParen>,
    pub expression: Box<Expression>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum TypeModifier {
    Tri(TypeModifierTri),
    Signed(TypeModifierSigned),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TypeTerm {
    pub type_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TypeToken {
    pub type_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct U32 {
    pub u32_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct U32Term {
    pub u32_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct U32Token {
    pub u32_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct U64 {
    pub u64_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct U64Term {
    pub u64_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct U64Token {
    pub u64_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnaryOperator {
    pub unary_operator_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnaryOperatorTerm {
    pub unary_operator_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnaryOperatorToken {
    pub unary_operator_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Union {
    pub union_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnionTerm {
    pub union_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnionToken {
    pub union_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Unsafe {
    pub unsafe_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnsafeBlock {
    pub r#unsafe: Box<Unsafe>,
    pub l_paren: Box<LParen>,
    pub identifier: Box<Identifier>,
    pub r_paren: Box<RParen>,
    pub l_brace: Box<LBrace>,
    pub unsafe_block_list: Vec<UnsafeBlockList>,
    pub r_brace: Box<RBrace>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnsafeBlockList {
    pub generate_group: Box<GenerateGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnsafeTerm {
    pub unsafe_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UnsafeToken {
    pub unsafe_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UserDefinedType {
    pub scoped_identifier: Box<ScopedIdentifier>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Var {
    pub var_token: crate::veryl_token::VerylToken,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VarDeclaration {
    pub var: Box<Var>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub var_declaration_opt: Option<VarDeclarationOpt>,
    pub array_type: Box<ArrayType>,
    pub semicolon: Box<Semicolon>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VarDeclarationOpt {
    pub clock_domain: Box<ClockDomain>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VarTerm {
    pub var_term: crate::veryl_token::Token, }
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VarToken {
    pub var_term: crate::veryl_token::Token,
    pub comments: Box<Comments>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum VariableType {
    Clock(VariableTypeClock),
    ClockPosedge(VariableTypeClockPosedge),
    ClockNegedge(VariableTypeClockNegedge),
    Reset(VariableTypeReset),
    ResetAsyncHigh(VariableTypeResetAsyncHigh),
    ResetAsyncLow(VariableTypeResetAsyncLow),
    ResetSyncHigh(VariableTypeResetSyncHigh),
    ResetSyncLow(VariableTypeResetSyncLow),
    Logic(VariableTypeLogic),
    Bit(VariableTypeBit),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Veryl {
    pub start: Box<Start>,
    pub veryl_list: Vec<VerylList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct VerylList {
    pub description_group: Box<DescriptionGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Width {
    pub l_angle: Box<LAngle>,
    pub expression: Box<Expression>,
    pub width_list: Vec<WidthList>,
    pub r_angle: Box<RAngle>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WidthList {
    pub comma: Box<Comma>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgument {
    pub colon_colon_l_angle: Box<ColonColonLAngle>,
    pub with_generic_argument_opt: Option<WithGenericArgumentOpt>,
    pub r_angle: Box<RAngle>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum WithGenericArgumentItem {
    ScopedIdentifier(WithGenericArgumentItemScopedIdentifier),
    Number(WithGenericArgumentItemNumber),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgumentList {
    pub with_generic_argument_item: Box<WithGenericArgumentItem>,
    pub with_generic_argument_list_list: Vec<WithGenericArgumentListList>,
    pub with_generic_argument_list_opt: Option<WithGenericArgumentListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgumentListList {
    pub comma: Box<Comma>,
    pub with_generic_argument_item: Box<WithGenericArgumentItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgumentListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericArgumentOpt {
    pub with_generic_argument_list: Box<WithGenericArgumentList>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericParameter {
    pub colon_colon_l_angle: Box<ColonColonLAngle>,
    pub with_generic_parameter_list: Box<WithGenericParameterList>,
    pub r_angle: Box<RAngle>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericParameterItem {
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub generic_bound: Box<GenericBound>,
    pub with_generic_parameter_item_opt: Option<WithGenericParameterItemOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericParameterItemOpt {
    pub equ: Box<Equ>,
    pub with_generic_argument_item: Box<WithGenericArgumentItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericParameterList {
    pub with_generic_parameter_item: Box<WithGenericParameterItem>,
    pub with_generic_parameter_list_list: Vec<WithGenericParameterListList>,
    pub with_generic_parameter_list_opt: Option<WithGenericParameterListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericParameterListList {
    pub comma: Box<Comma>,
    pub with_generic_parameter_item: Box<WithGenericParameterItem>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithGenericParameterListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameter {
    pub hash: Box<Hash>,
    pub l_paren: Box<LParen>,
    pub with_parameter_opt: Option<WithParameterOpt>,
    pub r_paren: Box<RParen>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterGroup {
    pub with_parameter_group_list: Vec<WithParameterGroupList>,
    pub with_parameter_group_group: Box<WithParameterGroupGroup>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum WithParameterGroupGroup {
    LBraceWithParameterListRBrace(WithParameterGroupGroupLBraceWithParameterListRBrace),
    WithParameterItem(WithParameterGroupGroupWithParameterItem),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterGroupList {
    pub attribute: Box<Attribute>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterItem {
    pub with_parameter_item_group: Box<WithParameterItemGroup>,
    pub identifier: Box<Identifier>,
    pub colon: Box<Colon>,
    pub with_parameter_item_group0: Box<WithParameterItemGroup0>,
    pub equ: Box<Equ>,
    pub expression: Box<Expression>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum WithParameterItemGroup {
    Param(WithParameterItemGroupParam),
    Const(WithParameterItemGroupConst),
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum WithParameterItemGroup0 {
    ArrayType(WithParameterItemGroup0ArrayType),
    Type(WithParameterItemGroup0Type),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterList {
    pub with_parameter_group: Box<WithParameterGroup>,
    pub with_parameter_list_list: Vec<WithParameterListList>,
    pub with_parameter_list_opt: Option<WithParameterListOpt>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterListList {
    pub comma: Box<Comma>,
    pub with_parameter_group: Box<WithParameterGroup>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterListOpt {
    pub comma: Box<Comma>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct WithParameterOpt {
    pub with_parameter_list: Box<WithParameterList>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ASTType {
    AllBit(AllBit),
    AllBitTerm(AllBitTerm),
    AllBitToken(AllBitToken),
    AlwayfFfEventList(AlwayfFfEventList),
    AlwayfFfEventListOpt(Option<AlwayfFfEventListOpt>),
    AlwaysComb(AlwaysComb),
    AlwaysCombDeclaration(AlwaysCombDeclaration),
    AlwaysCombTerm(AlwaysCombTerm),
    AlwaysCombToken(AlwaysCombToken),
    AlwaysFf(AlwaysFf),
    AlwaysFfClock(AlwaysFfClock),
    AlwaysFfDeclaration(AlwaysFfDeclaration),
    AlwaysFfDeclarationOpt(Option<AlwaysFfDeclarationOpt>),
    AlwaysFfReset(AlwaysFfReset),
    AlwaysFfTerm(AlwaysFfTerm),
    AlwaysFfToken(AlwaysFfToken),
    AnyTerm(AnyTerm),
    ArgumentItem(ArgumentItem),
    ArgumentList(ArgumentList),
    ArgumentListList(Vec<ArgumentListList>),
    ArgumentListOpt(Option<ArgumentListOpt>),
    Array(Array),
    ArrayList(Vec<ArrayList>),
    ArrayLiteralItem(ArrayLiteralItem),
    ArrayLiteralItemGroup(ArrayLiteralItemGroup),
    ArrayLiteralItemOpt(Option<ArrayLiteralItemOpt>),
    ArrayLiteralList(ArrayLiteralList),
    ArrayLiteralListList(Vec<ArrayLiteralListList>),
    ArrayLiteralListOpt(Option<ArrayLiteralListOpt>),
    ArrayType(ArrayType),
    ArrayTypeOpt(Option<ArrayTypeOpt>),
    As(As),
    AsTerm(AsTerm),
    AsToken(AsToken),
    Assign(Assign),
    AssignDeclaration(AssignDeclaration),
    AssignTerm(AssignTerm),
    AssignToken(AssignToken),
    Assignment(Assignment),
    AssignmentGroup(AssignmentGroup),
    AssignmentOperator(AssignmentOperator),
    AssignmentOperatorTerm(AssignmentOperatorTerm),
    AssignmentOperatorToken(AssignmentOperatorToken),
    Attribute(Attribute),
    AttributeItem(AttributeItem),
    AttributeList(AttributeList),
    AttributeListList(Vec<AttributeListList>),
    AttributeListOpt(Option<AttributeListOpt>),
    AttributeOpt(Option<AttributeOpt>),
    BackQuote(BackQuote),
    BackQuoteTerm(BackQuoteTerm),
    BackQuoteToken(BackQuoteToken),
    BaseLess(BaseLess),
    BaseLessTerm(BaseLessTerm),
    BaseLessToken(BaseLessToken),
    Based(Based),
    BasedTerm(BasedTerm),
    BasedToken(BasedToken),
    Bit(Bit),
    BitTerm(BitTerm),
    BitToken(BitToken),
    Break(Break),
    BreakStatement(BreakStatement),
    BreakTerm(BreakTerm),
    BreakToken(BreakToken),
    Case(Case),
    CaseCondition(CaseCondition),
    CaseConditionList(Vec<CaseConditionList>),
    CaseExpression(CaseExpression),
    CaseExpressionList(Vec<CaseExpressionList>),
    CaseExpressionOpt(Option<CaseExpressionOpt>),
    CaseItem(CaseItem),
    CaseItemGroup(CaseItemGroup),
    CaseItemGroup0(CaseItemGroup0),
    CaseStatement(CaseStatement),
    CaseStatementList(Vec<CaseStatementList>),
    CaseTerm(CaseTerm),
    CaseToken(CaseToken),
    CastingType(CastingType),
    Clock(Clock),
    ClockDomain(ClockDomain),
    ClockNegedge(ClockNegedge),
    ClockNegedgeTerm(ClockNegedgeTerm),
    ClockNegedgeToken(ClockNegedgeToken),
    ClockPosedge(ClockPosedge),
    ClockPosedgeTerm(ClockPosedgeTerm),
    ClockPosedgeToken(ClockPosedgeToken),
    ClockTerm(ClockTerm),
    ClockToken(ClockToken),
    Colon(Colon),
    ColonColon(ColonColon),
    ColonColonLAngle(ColonColonLAngle),
    ColonColonLAngleTerm(ColonColonLAngleTerm),
    ColonColonLAngleToken(ColonColonLAngleToken),
    ColonColonTerm(ColonColonTerm),
    ColonColonToken(ColonColonToken),
    ColonTerm(ColonTerm),
    ColonToken(ColonToken),
    Comma(Comma),
    CommaTerm(CommaTerm),
    CommaToken(CommaToken),
    Comments(Comments),
    CommentsOpt(Option<CommentsOpt>),
    CommentsTerm(CommentsTerm),
    ConcatenationItem(ConcatenationItem),
    ConcatenationItemOpt(Option<ConcatenationItemOpt>),
    ConcatenationList(ConcatenationList),
    ConcatenationListList(Vec<ConcatenationListList>),
    ConcatenationListOpt(Option<ConcatenationListOpt>),
    Const(Const),
    ConstDeclaration(ConstDeclaration),
    ConstDeclarationGroup(ConstDeclarationGroup),
    ConstTerm(ConstTerm),
    ConstToken(ConstToken),
    Defaul(Defaul),
    DefaultTerm(DefaultTerm),
    DefaultToken(DefaultToken),
    DescriptionGroup(DescriptionGroup),
    DescriptionGroupGroup(DescriptionGroupGroup),
    DescriptionGroupGroupList(Vec<DescriptionGroupGroupList>),
    DescriptionGroupList(Vec<DescriptionGroupList>),
    DescriptionItem(DescriptionItem),
    Direction(Direction),
    DollarIdentifier(DollarIdentifier),
    DollarIdentifierTerm(DollarIdentifierTerm),
    DollarIdentifierToken(DollarIdentifierToken),
    Dot(Dot),
    DotDot(DotDot),
    DotDotEqu(DotDotEqu),
    DotDotEquTerm(DotDotEquTerm),
    DotDotEquToken(DotDotEquToken),
    DotDotTerm(DotDotTerm),
    DotDotToken(DotDotToken),
    DotTerm(DotTerm),
    DotToken(DotToken),
    Else(Else),
    ElseTerm(ElseTerm),
    ElseToken(ElseToken),
    Embed(Embed),
    EmbedContent(EmbedContent),
    EmbedContentToken(EmbedContentToken),
    EmbedContentTokenList(Vec<EmbedContentTokenList>),
    EmbedDeclaration(EmbedDeclaration),
    EmbedItem(EmbedItem),
    EmbedItemList(Vec<EmbedItemList>),
    EmbedTerm(EmbedTerm),
    EmbedToken(EmbedToken),
    Enum(Enum),
    EnumDeclaration(EnumDeclaration),
    EnumDeclarationOpt(Option<EnumDeclarationOpt>),
    EnumGroup(EnumGroup),
    EnumGroupGroup(EnumGroupGroup),
    EnumGroupList(Vec<EnumGroupList>),
    EnumItem(EnumItem),
    EnumItemOpt(Option<EnumItemOpt>),
    EnumList(EnumList),
    EnumListList(Vec<EnumListList>),
    EnumListOpt(Option<EnumListOpt>),
    EnumTerm(EnumTerm),
    EnumToken(EnumToken),
    Equ(Equ),
    EquTerm(EquTerm),
    EquToken(EquToken),
    Exponent(Exponent),
    ExponentTerm(ExponentTerm),
    ExponentToken(ExponentToken),
    Export(Export),
    ExportDeclaration(ExportDeclaration),
    ExportDeclarationGroup(ExportDeclarationGroup),
    ExportDeclarationOpt(Option<ExportDeclarationOpt>),
    ExportTerm(ExportTerm),
    ExportToken(ExportToken),
    Expression(Expression),
    Expression01(Expression01),
    Expression01List(Vec<Expression01List>),
    Expression02(Expression02),
    Expression02List(Vec<Expression02List>),
    Expression03(Expression03),
    Expression03List(Vec<Expression03List>),
    Expression04(Expression04),
    Expression04List(Vec<Expression04List>),
    Expression05(Expression05),
    Expression05List(Vec<Expression05List>),
    Expression06(Expression06),
    Expression06List(Vec<Expression06List>),
    Expression07(Expression07),
    Expression07List(Vec<Expression07List>),
    Expression08(Expression08),
    Expression08List(Vec<Expression08List>),
    Expression09(Expression09),
    Expression09List(Vec<Expression09List>),
    Expression09ListGroup(Expression09ListGroup),
    Expression10(Expression10),
    Expression10List(Vec<Expression10List>),
    Expression11(Expression11),
    Expression11Opt(Option<Expression11Opt>),
    Expression12(Expression12),
    Expression12List(Vec<Expression12List>),
    Expression12ListGroup(Expression12ListGroup),
    ExpressionIdentifier(ExpressionIdentifier),
    ExpressionIdentifierList(Vec<ExpressionIdentifierList>),
    ExpressionIdentifierList0(Vec<ExpressionIdentifierList0>),
    ExpressionIdentifierList0List(Vec<ExpressionIdentifierList0List>),
    ExpressionIdentifierOpt(Option<ExpressionIdentifierOpt>),
    ExpressionList(Vec<ExpressionList>),
    F32(F32),
    F32Term(F32Term),
    F32Token(F32Token),
    F64(F64),
    F64Term(F64Term),
    F64Token(F64Token),
    Factor(Factor),
    FactorGroup(FactorGroup),
    FactorOpt(Option<FactorOpt>),
    FactorType(FactorType),
    FactorTypeGroup(FactorTypeGroup),
    FactorTypeOpt(Option<FactorTypeOpt>),
    Final(Final),
    FinalDeclaration(FinalDeclaration),
    FinalTerm(FinalTerm),
    FinalToken(FinalToken),
    FixedPoint(FixedPoint),
    FixedPointTerm(FixedPointTerm),
    FixedPointToken(FixedPointToken),
    FixedType(FixedType),
    For(For),
    ForStatement(ForStatement),
    ForStatementOpt(Option<ForStatementOpt>),
    ForTerm(ForTerm),
    ForToken(ForToken),
    Function(Function),
    FunctionCall(FunctionCall),
    FunctionCallOpt(Option<FunctionCallOpt>),
    FunctionDeclaration(FunctionDeclaration),
    FunctionDeclarationOpt(Option<FunctionDeclarationOpt>),
    FunctionDeclarationOpt0(Option<FunctionDeclarationOpt0>),
    FunctionDeclarationOpt1(Option<FunctionDeclarationOpt1>),
    FunctionTerm(FunctionTerm),
    FunctionToken(FunctionToken),
    GenerateBlockDeclaration(GenerateBlockDeclaration),
    GenerateForDeclaration(GenerateForDeclaration),
    GenerateForDeclarationOpt(Option<GenerateForDeclarationOpt>),
    GenerateGroup(GenerateGroup),
    GenerateGroupGroup(GenerateGroupGroup),
    GenerateGroupGroupList(Vec<GenerateGroupGroupList>),
    GenerateGroupList(Vec<GenerateGroupList>),
    GenerateIfDeclaration(GenerateIfDeclaration),
    GenerateIfDeclarationList(Vec<GenerateIfDeclarationList>),
    GenerateIfDeclarationOpt(Option<GenerateIfDeclarationOpt>),
    GenerateItem(GenerateItem),
    GenerateNamedBlock(GenerateNamedBlock),
    GenerateNamedBlockList(Vec<GenerateNamedBlockList>),
    GenerateOptionalNamedBlock(GenerateOptionalNamedBlock),
    GenerateOptionalNamedBlockList(Vec<GenerateOptionalNamedBlockList>),
    GenerateOptionalNamedBlockOpt(Option<GenerateOptionalNamedBlockOpt>),
    GenericBound(GenericBound),
    Hash(Hash),
    HashTerm(HashTerm),
    HashToken(HashToken),
    HierarchicalIdentifier(HierarchicalIdentifier),
    HierarchicalIdentifierList(Vec<HierarchicalIdentifierList>),
    HierarchicalIdentifierList0(Vec<HierarchicalIdentifierList0>),
    HierarchicalIdentifierList0List(Vec<HierarchicalIdentifierList0List>),
    I32(I32),
    I32Term(I32Term),
    I32Token(I32Token),
    I64(I64),
    I64Term(I64Term),
    I64Token(I64Token),
    Identifier(Identifier),
    IdentifierStatement(IdentifierStatement),
    IdentifierStatementGroup(IdentifierStatementGroup),
    IdentifierTerm(IdentifierTerm),
    IdentifierToken(IdentifierToken),
    If(If),
    IfExpression(IfExpression),
    IfExpressionList(Vec<IfExpressionList>),
    IfReset(IfReset),
    IfResetStatement(IfResetStatement),
    IfResetStatementList(Vec<IfResetStatementList>),
    IfResetStatementOpt(Option<IfResetStatementOpt>),
    IfResetTerm(IfResetTerm),
    IfResetToken(IfResetToken),
    IfStatement(IfStatement),
    IfStatementList(Vec<IfStatementList>),
    IfStatementOpt(Option<IfStatementOpt>),
    IfTerm(IfTerm),
    IfToken(IfToken),
    Import(Import),
    ImportDeclaration(ImportDeclaration),
    ImportDeclarationOpt(Option<ImportDeclarationOpt>),
    ImportTerm(ImportTerm),
    ImportToken(ImportToken),
    In(In),
    InTerm(InTerm),
    InToken(InToken),
    Include(Include),
    IncludeDeclaration(IncludeDeclaration),
    IncludeTerm(IncludeTerm),
    IncludeToken(IncludeToken),
    Initial(Initial),
    InitialDeclaration(InitialDeclaration),
    InitialTerm(InitialTerm),
    InitialToken(InitialToken),
    Inout(Inout),
    InoutTerm(InoutTerm),
    InoutToken(InoutToken),
    Input(Input),
    InputTerm(InputTerm),
    InputToken(InputToken),
    Inside(Inside),
    InsideExpression(InsideExpression),
    InsideTerm(InsideTerm),
    InsideToken(InsideToken),
    Inst(Inst),
    InstDeclaration(InstDeclaration),
    InstDeclarationOpt(Option<InstDeclarationOpt>),
    InstDeclarationOpt0(Option<InstDeclarationOpt0>),
    InstDeclarationOpt1(Option<InstDeclarationOpt1>),
    InstDeclarationOpt2(Option<InstDeclarationOpt2>),
    InstParameter(InstParameter),
    InstParameterGroup(InstParameterGroup),
    InstParameterGroupGroup(InstParameterGroupGroup),
    InstParameterGroupList(Vec<InstParameterGroupList>),
    InstParameterItem(InstParameterItem),
    InstParameterItemOpt(Option<InstParameterItemOpt>),
    InstParameterList(InstParameterList),
    InstParameterListList(Vec<InstParameterListList>),
    InstParameterListOpt(Option<InstParameterListOpt>),
    InstParameterOpt(Option<InstParameterOpt>),
    InstPortGroup(InstPortGroup),
    InstPortGroupGroup(InstPortGroupGroup),
    InstPortGroupList(Vec<InstPortGroupList>),
    InstPortItem(InstPortItem),
    InstPortItemOpt(Option<InstPortItemOpt>),
    InstPortList(InstPortList),
    InstPortListList(Vec<InstPortListList>),
    InstPortListOpt(Option<InstPortListOpt>),
    InstTerm(InstTerm),
    InstToken(InstToken),
    IntegralNumber(IntegralNumber),
    Interface(Interface),
    InterfaceDeclaration(InterfaceDeclaration),
    InterfaceDeclarationList(Vec<InterfaceDeclarationList>),
    InterfaceDeclarationOpt(Option<InterfaceDeclarationOpt>),
    InterfaceDeclarationOpt0(Option<InterfaceDeclarationOpt0>),
    InterfaceDeclarationOpt1(Option<InterfaceDeclarationOpt1>),
    InterfaceGroup(InterfaceGroup),
    InterfaceGroupGroup(InterfaceGroupGroup),
    InterfaceGroupGroupList(Vec<InterfaceGroupGroupList>),
    InterfaceGroupList(Vec<InterfaceGroupList>),
    InterfaceItem(InterfaceItem),
    InterfaceTerm(InterfaceTerm),
    InterfaceToken(InterfaceToken),
    LAngle(LAngle),
    LAngleTerm(LAngleTerm),
    LAngleToken(LAngleToken),
    LBrace(LBrace),
    LBraceTerm(LBraceTerm),
    LBraceToken(LBraceToken),
    LBracket(LBracket),
    LBracketTerm(LBracketTerm),
    LBracketToken(LBracketToken),
    LParen(LParen),
    LParenTerm(LParenTerm),
    LParenToken(LParenToken),
    Let(Let),
    LetDeclaration(LetDeclaration),
    LetDeclarationOpt(Option<LetDeclarationOpt>),
    LetStatement(LetStatement),
    LetStatementOpt(Option<LetStatementOpt>),
    LetTerm(LetTerm),
    LetToken(LetToken),
    Logic(Logic),
    LogicTerm(LogicTerm),
    LogicToken(LogicToken),
    Lsb(Lsb),
    LsbTerm(LsbTerm),
    LsbToken(LsbToken),
    MinusColon(MinusColon),
    MinusColonTerm(MinusColonTerm),
    MinusColonToken(MinusColonToken),
    MinusGT(MinusGT),
    MinusGTTerm(MinusGTTerm),
    MinusGTToken(MinusGTToken),
    Modport(Modport),
    ModportDeclaration(ModportDeclaration),
    ModportGroup(ModportGroup),
    ModportGroupGroup(ModportGroupGroup),
    ModportGroupList(Vec<ModportGroupList>),
    ModportItem(ModportItem),
    ModportList(ModportList),
    ModportListList(Vec<ModportListList>),
    ModportListOpt(Option<ModportListOpt>),
    ModportTerm(ModportTerm),
    ModportToken(ModportToken),
    Module(Module),
    ModuleDeclaration(ModuleDeclaration),
    ModuleDeclarationList(Vec<ModuleDeclarationList>),
    ModuleDeclarationOpt(Option<ModuleDeclarationOpt>),
    ModuleDeclarationOpt0(Option<ModuleDeclarationOpt0>),
    ModuleDeclarationOpt1(Option<ModuleDeclarationOpt1>),
    ModuleDeclarationOpt2(Option<ModuleDeclarationOpt2>),
    ModuleDeclarationOpt3(Option<ModuleDeclarationOpt3>),
    ModuleGroup(ModuleGroup),
    ModuleGroupGroup(ModuleGroupGroup),
    ModuleGroupGroupList(Vec<ModuleGroupGroupList>),
    ModuleGroupList(Vec<ModuleGroupList>),
    ModuleItem(ModuleItem),
    ModuleTerm(ModuleTerm),
    ModuleToken(ModuleToken),
    Msb(Msb),
    MsbTerm(MsbTerm),
    MsbToken(MsbToken),
    Number(Number),
    Operator01(Operator01),
    Operator01Term(Operator01Term),
    Operator01Token(Operator01Token),
    Operator02(Operator02),
    Operator02Term(Operator02Term),
    Operator02Token(Operator02Token),
    Operator03(Operator03),
    Operator03Term(Operator03Term),
    Operator03Token(Operator03Token),
    Operator04(Operator04),
    Operator04Term(Operator04Term),
    Operator04Token(Operator04Token),
    Operator05(Operator05),
    Operator05Term(Operator05Term),
    Operator05Token(Operator05Token),
    Operator06(Operator06),
    Operator06Term(Operator06Term),
    Operator06Token(Operator06Token),
    Operator07(Operator07),
    Operator07Term(Operator07Term),
    Operator07Token(Operator07Token),
    Operator08(Operator08),
    Operator08Term(Operator08Term),
    Operator08Token(Operator08Token),
    Operator09(Operator09),
    Operator09Term(Operator09Term),
    Operator09Token(Operator09Token),
    Operator10(Operator10),
    Operator10Term(Operator10Term),
    Operator10Token(Operator10Token),
    Operator11(Operator11),
    Operator11Term(Operator11Term),
    Operator11Token(Operator11Token),
    Output(Output),
    OutputTerm(OutputTerm),
    OutputToken(OutputToken),
    Outside(Outside),
    OutsideExpression(OutsideExpression),
    OutsideTerm(OutsideTerm),
    OutsideToken(OutsideToken),
    Package(Package),
    PackageDeclaration(PackageDeclaration),
    PackageDeclarationList(Vec<PackageDeclarationList>),
    PackageDeclarationOpt(Option<PackageDeclarationOpt>),
    PackageDeclarationOpt0(Option<PackageDeclarationOpt0>),
    PackageGroup(PackageGroup),
    PackageGroupGroup(PackageGroupGroup),
    PackageGroupGroupList(Vec<PackageGroupGroupList>),
    PackageGroupList(Vec<PackageGroupList>),
    PackageItem(PackageItem),
    PackageTerm(PackageTerm),
    PackageToken(PackageToken),
    Param(Param),
    ParamTerm(ParamTerm),
    ParamToken(ParamToken),
    PlusColon(PlusColon),
    PlusColonTerm(PlusColonTerm),
    PlusColonToken(PlusColonToken),
    PortDeclaration(PortDeclaration),
    PortDeclarationGroup(PortDeclarationGroup),
    PortDeclarationGroupGroup(PortDeclarationGroupGroup),
    PortDeclarationGroupList(Vec<PortDeclarationGroupList>),
    PortDeclarationItem(PortDeclarationItem),
    PortDeclarationItemGroup(PortDeclarationItemGroup),
    PortDeclarationList(PortDeclarationList),
    PortDeclarationListList(Vec<PortDeclarationListList>),
    PortDeclarationListOpt(Option<PortDeclarationListOpt>),
    PortDeclarationOpt(Option<PortDeclarationOpt>),
    PortTypeAbstract(PortTypeAbstract),
    PortTypeAbstractOpt(Option<PortTypeAbstractOpt>),
    PortTypeAbstractOpt0(Option<PortTypeAbstractOpt0>),
    PortTypeConcrete(PortTypeConcrete),
    PortTypeConcreteOpt(Option<PortTypeConcreteOpt>),
    Proto(Proto),
    ProtoModuleDeclaration(ProtoModuleDeclaration),
    ProtoModuleDeclarationOpt(Option<ProtoModuleDeclarationOpt>),
    ProtoModuleDeclarationOpt0(Option<ProtoModuleDeclarationOpt0>),
    ProtoModuleDeclarationOpt1(Option<ProtoModuleDeclarationOpt1>),
    ProtoTerm(ProtoTerm),
    ProtoToken(ProtoToken),
    Pub(Pub),
    PubTerm(PubTerm),
    PubToken(PubToken),
    QuoteLBrace(QuoteLBrace),
    QuoteLBraceTerm(QuoteLBraceTerm),
    QuoteLBraceToken(QuoteLBraceToken),
    RAngle(RAngle),
    RAngleTerm(RAngleTerm),
    RAngleToken(RAngleToken),
    RBrace(RBrace),
    RBraceTerm(RBraceTerm),
    RBraceToken(RBraceToken),
    RBracket(RBracket),
    RBracketTerm(RBracketTerm),
    RBracketToken(RBracketToken),
    RParen(RParen),
    RParenTerm(RParenTerm),
    RParenToken(RParenToken),
    Range(Range),
    RangeItem(RangeItem),
    RangeList(RangeList),
    RangeListList(Vec<RangeListList>),
    RangeListOpt(Option<RangeListOpt>),
    RangeOperator(RangeOperator),
    RangeOpt(Option<RangeOpt>),
    RealNumber(RealNumber),
    Ref(Ref),
    RefTerm(RefTerm),
    RefToken(RefToken),
    Repeat(Repeat),
    RepeatTerm(RepeatTerm),
    RepeatToken(RepeatToken),
    Reset(Reset),
    ResetAsyncHigh(ResetAsyncHigh),
    ResetAsyncHighTerm(ResetAsyncHighTerm),
    ResetAsyncHighToken(ResetAsyncHighToken),
    ResetAsyncLow(ResetAsyncLow),
    ResetAsyncLowTerm(ResetAsyncLowTerm),
    ResetAsyncLowToken(ResetAsyncLowToken),
    ResetSyncHigh(ResetSyncHigh),
    ResetSyncHighTerm(ResetSyncHighTerm),
    ResetSyncHighToken(ResetSyncHighToken),
    ResetSyncLow(ResetSyncLow),
    ResetSyncLowTerm(ResetSyncLowTerm),
    ResetSyncLowToken(ResetSyncLowToken),
    ResetTerm(ResetTerm),
    ResetToken(ResetToken),
    Return(Return),
    ReturnStatement(ReturnStatement),
    ReturnTerm(ReturnTerm),
    ReturnToken(ReturnToken),
    ScalarType(ScalarType),
    ScalarTypeGroup(ScalarTypeGroup),
    ScalarTypeList(Vec<ScalarTypeList>),
    ScalarTypeOpt(Option<ScalarTypeOpt>),
    ScopedIdentifier(ScopedIdentifier),
    ScopedIdentifierGroup(ScopedIdentifierGroup),
    ScopedIdentifierList(Vec<ScopedIdentifierList>),
    ScopedIdentifierOpt(Option<ScopedIdentifierOpt>),
    ScopedIdentifierOpt0(Option<ScopedIdentifierOpt0>),
    Select(Select),
    SelectOperator(SelectOperator),
    SelectOpt(Option<SelectOpt>),
    Semicolon(Semicolon),
    SemicolonTerm(SemicolonTerm),
    SemicolonToken(SemicolonToken),
    Signed(Signed),
    SignedTerm(SignedTerm),
    SignedToken(SignedToken),
    Star(Star),
    StarTerm(StarTerm),
    StarToken(StarToken),
    Start(Start),
    StartToken(StartToken),
    Statement(Statement),
    StatementBlock(StatementBlock),
    StatementBlockItem(StatementBlockItem),
    StatementBlockList(Vec<StatementBlockList>),
    Step(Step),
    StepTerm(StepTerm),
    StepToken(StepToken),
    Strin(Strin),
    StringLiteral(StringLiteral),
    StringLiteralTerm(StringLiteralTerm),
    StringLiteralToken(StringLiteralToken),
    StringTerm(StringTerm),
    StringToken(StringToken),
    Struct(Struct),
    StructTerm(StructTerm),
    StructToken(StructToken),
    StructUnion(StructUnion),
    StructUnionDeclaration(StructUnionDeclaration),
    StructUnionDeclarationOpt(Option<StructUnionDeclarationOpt>),
    StructUnionGroup(StructUnionGroup),
    StructUnionGroupGroup(StructUnionGroupGroup),
    StructUnionGroupList(Vec<StructUnionGroupList>),
    StructUnionItem(StructUnionItem),
    StructUnionList(StructUnionList),
    StructUnionListList(Vec<StructUnionListList>),
    StructUnionListOpt(Option<StructUnionListOpt>),
    Switch(Switch),
    SwitchCondition(SwitchCondition),
    SwitchConditionList(Vec<SwitchConditionList>),
    SwitchExpression(SwitchExpression),
    SwitchExpressionList(Vec<SwitchExpressionList>),
    SwitchExpressionOpt(Option<SwitchExpressionOpt>),
    SwitchItem(SwitchItem),
    SwitchItemGroup(SwitchItemGroup),
    SwitchItemGroup0(SwitchItemGroup0),
    SwitchStatement(SwitchStatement),
    SwitchStatementList(Vec<SwitchStatementList>),
    SwitchTerm(SwitchTerm),
    SwitchToken(SwitchToken),
    Tri(Tri),
    TriTerm(TriTerm),
    TriToken(TriToken),
    Type(Type),
    TypeDefDeclaration(TypeDefDeclaration),
    TypeExpression(TypeExpression),
    TypeModifier(TypeModifier),
    TypeTerm(TypeTerm),
    TypeToken(TypeToken),
    U32(U32),
    U32Term(U32Term),
    U32Token(U32Token),
    U64(U64),
    U64Term(U64Term),
    U64Token(U64Token),
    UnaryOperator(UnaryOperator),
    UnaryOperatorTerm(UnaryOperatorTerm),
    UnaryOperatorToken(UnaryOperatorToken),
    Union(Union),
    UnionTerm(UnionTerm),
    UnionToken(UnionToken),
    Unsafe(Unsafe),
    UnsafeBlock(UnsafeBlock),
    UnsafeBlockList(Vec<UnsafeBlockList>),
    UnsafeTerm(UnsafeTerm),
    UnsafeToken(UnsafeToken),
    UserDefinedType(UserDefinedType),
    Var(Var),
    VarDeclaration(VarDeclaration),
    VarDeclarationOpt(Option<VarDeclarationOpt>),
    VarTerm(VarTerm),
    VarToken(VarToken),
    VariableType(VariableType),
    Veryl(Veryl),
    VerylList(Vec<VerylList>),
    Width(Width),
    WidthList(Vec<WidthList>),
    WithGenericArgument(WithGenericArgument),
    WithGenericArgumentItem(WithGenericArgumentItem),
    WithGenericArgumentList(WithGenericArgumentList),
    WithGenericArgumentListList(Vec<WithGenericArgumentListList>),
    WithGenericArgumentListOpt(Option<WithGenericArgumentListOpt>),
    WithGenericArgumentOpt(Option<WithGenericArgumentOpt>),
    WithGenericParameter(WithGenericParameter),
    WithGenericParameterItem(WithGenericParameterItem),
    WithGenericParameterItemOpt(Option<WithGenericParameterItemOpt>),
    WithGenericParameterList(WithGenericParameterList),
    WithGenericParameterListList(Vec<WithGenericParameterListList>),
    WithGenericParameterListOpt(Option<WithGenericParameterListOpt>),
    WithParameter(WithParameter),
    WithParameterGroup(WithParameterGroup),
    WithParameterGroupGroup(WithParameterGroupGroup),
    WithParameterGroupList(Vec<WithParameterGroupList>),
    WithParameterItem(WithParameterItem),
    WithParameterItemGroup(WithParameterItemGroup),
    WithParameterItemGroup0(WithParameterItemGroup0),
    WithParameterList(WithParameterList),
    WithParameterListList(Vec<WithParameterListList>),
    WithParameterListOpt(Option<WithParameterListOpt>),
    WithParameterOpt(Option<WithParameterOpt>),
}
#[allow(dead_code)]
pub struct VerylGrammarAuto<'t, 'u>
where
    't: 'u,
{
    user_grammar: &'u mut dyn VerylGrammarTrait,
    item_stack: Vec<ASTType>,
    phantom: PhantomData<&'t str>,
}
impl<'t, 'u> VerylGrammarAuto<'t, 'u> {
    pub fn new(user_grammar: &'u mut dyn VerylGrammarTrait) -> Self {
        Self {
            user_grammar,
            item_stack: Vec::new(),
            phantom: PhantomData,
        }
    }
    #[allow(dead_code)]
    fn push(&mut self, item: ASTType, context: &str) {
        trace!("push    {}: {:?}", context, item);
        self.item_stack.push(item)
    }
    #[allow(dead_code)]
    fn pop(&mut self, context: &str) -> Option<ASTType> {
        let item = self.item_stack.pop();
        if let Some(ref item) = item {
            trace!("pop     {}: {:?}", context, item);
        }
        item
    }
    #[allow(dead_code)]
    fn trace_item_stack(&self, context: &str) -> std::string::String {
        format!(
            "Item stack at {}:\n{}",
            context,
            self.item_stack
                .iter()
                .rev()
                .map(|s| format!("  {:?}", s))
                .collect::<Vec<std::string::String>>()
                .join("\n")
        )
    }
    #[parol_runtime::function_name::named]
    fn comments_term(&mut self, comments_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments_term = comments_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let comments_term_built = CommentsTerm { comments_term };
        self.user_grammar.comments_term(&comments_term_built)?;
        self.push(ASTType::CommentsTerm(comments_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn string_literal_term(&mut self, string_literal_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let string_literal_term = string_literal_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let string_literal_term_built = StringLiteralTerm {
            string_literal_term,
        };
        self.user_grammar
            .string_literal_term(&string_literal_term_built)?;
        self.push(
            ASTType::StringLiteralTerm(string_literal_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn exponent_term(&mut self, exponent_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let exponent_term = exponent_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let exponent_term_built = ExponentTerm { exponent_term };
        self.user_grammar.exponent_term(&exponent_term_built)?;
        self.push(ASTType::ExponentTerm(exponent_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_point_term(&mut self, fixed_point_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let fixed_point_term = fixed_point_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let fixed_point_term_built = FixedPointTerm { fixed_point_term };
        self.user_grammar
            .fixed_point_term(&fixed_point_term_built)?;
        self.push(ASTType::FixedPointTerm(fixed_point_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn based_term(&mut self, based_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let based_term = based_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let based_term_built = BasedTerm { based_term };
        self.user_grammar.based_term(&based_term_built)?;
        self.push(ASTType::BasedTerm(based_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn all_bit_term(&mut self, all_bit_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let all_bit_term = all_bit_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let all_bit_term_built = AllBitTerm { all_bit_term };
        self.user_grammar.all_bit_term(&all_bit_term_built)?;
        self.push(ASTType::AllBitTerm(all_bit_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn base_less_term(&mut self, base_less_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let base_less_term = base_less_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let base_less_term_built = BaseLessTerm { base_less_term };
        self.user_grammar.base_less_term(&base_less_term_built)?;
        self.push(ASTType::BaseLessTerm(base_less_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn minus_colon_term(&mut self, minus_colon_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let minus_colon_term = minus_colon_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let minus_colon_term_built = MinusColonTerm { minus_colon_term };
        self.user_grammar
            .minus_colon_term(&minus_colon_term_built)?;
        self.push(ASTType::MinusColonTerm(minus_colon_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn minus_g_t_term(&mut self, minus_g_t_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let minus_g_t_term = minus_g_t_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let minus_g_t_term_built = MinusGTTerm { minus_g_t_term };
        self.user_grammar.minus_g_t_term(&minus_g_t_term_built)?;
        self.push(ASTType::MinusGTTerm(minus_g_t_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn plus_colon_term(&mut self, plus_colon_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let plus_colon_term = plus_colon_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let plus_colon_term_built = PlusColonTerm { plus_colon_term };
        self.user_grammar.plus_colon_term(&plus_colon_term_built)?;
        self.push(ASTType::PlusColonTerm(plus_colon_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assignment_operator_term(
        &mut self,
        assignment_operator_term: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assignment_operator_term = assignment_operator_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let assignment_operator_term_built = AssignmentOperatorTerm {
            assignment_operator_term,
        };
        self.user_grammar
            .assignment_operator_term(&assignment_operator_term_built)?;
        self.push(
            ASTType::AssignmentOperatorTerm(assignment_operator_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator11_term(&mut self, operator11_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator11_term = operator11_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator11_term_built = Operator11Term { operator11_term };
        self.user_grammar.operator11_term(&operator11_term_built)?;
        self.push(ASTType::Operator11Term(operator11_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator10_term(&mut self, operator10_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator10_term = operator10_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator10_term_built = Operator10Term { operator10_term };
        self.user_grammar.operator10_term(&operator10_term_built)?;
        self.push(ASTType::Operator10Term(operator10_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator09_term(&mut self, operator09_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator09_term = operator09_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator09_term_built = Operator09Term { operator09_term };
        self.user_grammar.operator09_term(&operator09_term_built)?;
        self.push(ASTType::Operator09Term(operator09_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator08_term(&mut self, operator08_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator08_term = operator08_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator08_term_built = Operator08Term { operator08_term };
        self.user_grammar.operator08_term(&operator08_term_built)?;
        self.push(ASTType::Operator08Term(operator08_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator07_term(&mut self, operator07_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator07_term = operator07_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator07_term_built = Operator07Term { operator07_term };
        self.user_grammar.operator07_term(&operator07_term_built)?;
        self.push(ASTType::Operator07Term(operator07_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator06_term(&mut self, operator06_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator06_term = operator06_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator06_term_built = Operator06Term { operator06_term };
        self.user_grammar.operator06_term(&operator06_term_built)?;
        self.push(ASTType::Operator06Term(operator06_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator02_term(&mut self, operator02_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator02_term = operator02_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator02_term_built = Operator02Term { operator02_term };
        self.user_grammar.operator02_term(&operator02_term_built)?;
        self.push(ASTType::Operator02Term(operator02_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator01_term(&mut self, operator01_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator01_term = operator01_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator01_term_built = Operator01Term { operator01_term };
        self.user_grammar.operator01_term(&operator01_term_built)?;
        self.push(ASTType::Operator01Term(operator01_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator05_term(&mut self, operator05_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator05_term = operator05_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator05_term_built = Operator05Term { operator05_term };
        self.user_grammar.operator05_term(&operator05_term_built)?;
        self.push(ASTType::Operator05Term(operator05_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator04_term(&mut self, operator04_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator04_term = operator04_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator04_term_built = Operator04Term { operator04_term };
        self.user_grammar.operator04_term(&operator04_term_built)?;
        self.push(ASTType::Operator04Term(operator04_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator03_term(&mut self, operator03_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator03_term = operator03_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let operator03_term_built = Operator03Term { operator03_term };
        self.user_grammar.operator03_term(&operator03_term_built)?;
        self.push(ASTType::Operator03Term(operator03_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unary_operator_term(&mut self, unary_operator_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unary_operator_term = unary_operator_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let unary_operator_term_built = UnaryOperatorTerm {
            unary_operator_term,
        };
        self.user_grammar
            .unary_operator_term(&unary_operator_term_built)?;
        self.push(
            ASTType::UnaryOperatorTerm(unary_operator_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn back_quote_term(&mut self, back_quote_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let back_quote_term = back_quote_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let back_quote_term_built = BackQuoteTerm { back_quote_term };
        self.user_grammar.back_quote_term(&back_quote_term_built)?;
        self.push(ASTType::BackQuoteTerm(back_quote_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_colon_l_angle_term(
        &mut self,
        colon_colon_l_angle_term: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon_colon_l_angle_term = colon_colon_l_angle_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let colon_colon_l_angle_term_built = ColonColonLAngleTerm {
            colon_colon_l_angle_term,
        };
        self.user_grammar
            .colon_colon_l_angle_term(&colon_colon_l_angle_term_built)?;
        self.push(
            ASTType::ColonColonLAngleTerm(colon_colon_l_angle_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_colon_term(&mut self, colon_colon_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon_colon_term = colon_colon_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let colon_colon_term_built = ColonColonTerm { colon_colon_term };
        self.user_grammar
            .colon_colon_term(&colon_colon_term_built)?;
        self.push(ASTType::ColonColonTerm(colon_colon_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_term(&mut self, colon_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon_term = colon_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let colon_term_built = ColonTerm { colon_term };
        self.user_grammar.colon_term(&colon_term_built)?;
        self.push(ASTType::ColonTerm(colon_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn comma_term(&mut self, comma_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma_term = comma_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let comma_term_built = CommaTerm { comma_term };
        self.user_grammar.comma_term(&comma_term_built)?;
        self.push(ASTType::CommaTerm(comma_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_dot_equ_term(&mut self, dot_dot_equ_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_dot_equ_term = dot_dot_equ_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let dot_dot_equ_term_built = DotDotEquTerm { dot_dot_equ_term };
        self.user_grammar
            .dot_dot_equ_term(&dot_dot_equ_term_built)?;
        self.push(ASTType::DotDotEquTerm(dot_dot_equ_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_dot_term(&mut self, dot_dot_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_dot_term = dot_dot_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let dot_dot_term_built = DotDotTerm { dot_dot_term };
        self.user_grammar.dot_dot_term(&dot_dot_term_built)?;
        self.push(ASTType::DotDotTerm(dot_dot_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_term(&mut self, dot_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_term = dot_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let dot_term_built = DotTerm { dot_term };
        self.user_grammar.dot_term(&dot_term_built)?;
        self.push(ASTType::DotTerm(dot_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn equ_term(&mut self, equ_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let equ_term = equ_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let equ_term_built = EquTerm { equ_term };
        self.user_grammar.equ_term(&equ_term_built)?;
        self.push(ASTType::EquTerm(equ_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hash_term(&mut self, hash_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hash_term = hash_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let hash_term_built = HashTerm { hash_term };
        self.user_grammar.hash_term(&hash_term_built)?;
        self.push(ASTType::HashTerm(hash_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_angle_term(&mut self, l_angle_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_angle_term = l_angle_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let l_angle_term_built = LAngleTerm { l_angle_term };
        self.user_grammar.l_angle_term(&l_angle_term_built)?;
        self.push(ASTType::LAngleTerm(l_angle_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn quote_l_brace_term(&mut self, quote_l_brace_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let quote_l_brace_term = quote_l_brace_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let quote_l_brace_term_built = QuoteLBraceTerm { quote_l_brace_term };
        self.user_grammar
            .quote_l_brace_term("e_l_brace_term_built)?;
        self.push(ASTType::QuoteLBraceTerm(quote_l_brace_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_brace_term(&mut self, l_brace_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_brace_term = l_brace_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let l_brace_term_built = LBraceTerm { l_brace_term };
        self.user_grammar.l_brace_term(&l_brace_term_built)?;
        self.push(ASTType::LBraceTerm(l_brace_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_bracket_term(&mut self, l_bracket_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_bracket_term = l_bracket_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let l_bracket_term_built = LBracketTerm { l_bracket_term };
        self.user_grammar.l_bracket_term(&l_bracket_term_built)?;
        self.push(ASTType::LBracketTerm(l_bracket_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_paren_term(&mut self, l_paren_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_paren_term = l_paren_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let l_paren_term_built = LParenTerm { l_paren_term };
        self.user_grammar.l_paren_term(&l_paren_term_built)?;
        self.push(ASTType::LParenTerm(l_paren_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_angle_term(&mut self, r_angle_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_angle_term = r_angle_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let r_angle_term_built = RAngleTerm { r_angle_term };
        self.user_grammar.r_angle_term(&r_angle_term_built)?;
        self.push(ASTType::RAngleTerm(r_angle_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_brace_term(&mut self, r_brace_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace_term = r_brace_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let r_brace_term_built = RBraceTerm { r_brace_term };
        self.user_grammar.r_brace_term(&r_brace_term_built)?;
        self.push(ASTType::RBraceTerm(r_brace_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_bracket_term(&mut self, r_bracket_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_bracket_term = r_bracket_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let r_bracket_term_built = RBracketTerm { r_bracket_term };
        self.user_grammar.r_bracket_term(&r_bracket_term_built)?;
        self.push(ASTType::RBracketTerm(r_bracket_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_paren_term(&mut self, r_paren_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren_term = r_paren_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let r_paren_term_built = RParenTerm { r_paren_term };
        self.user_grammar.r_paren_term(&r_paren_term_built)?;
        self.push(ASTType::RParenTerm(r_paren_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn semicolon_term(&mut self, semicolon_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon_term = semicolon_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let semicolon_term_built = SemicolonTerm { semicolon_term };
        self.user_grammar.semicolon_term(&semicolon_term_built)?;
        self.push(ASTType::SemicolonTerm(semicolon_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn star_term(&mut self, star_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let star_term = star_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let star_term_built = StarTerm { star_term };
        self.user_grammar.star_term(&star_term_built)?;
        self.push(ASTType::StarTerm(star_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_comb_term(&mut self, always_comb_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_comb_term = always_comb_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let always_comb_term_built = AlwaysCombTerm { always_comb_term };
        self.user_grammar
            .always_comb_term(&always_comb_term_built)?;
        self.push(ASTType::AlwaysCombTerm(always_comb_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_term(&mut self, always_ff_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_ff_term = always_ff_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let always_ff_term_built = AlwaysFfTerm { always_ff_term };
        self.user_grammar.always_ff_term(&always_ff_term_built)?;
        self.push(ASTType::AlwaysFfTerm(always_ff_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assign_term(&mut self, assign_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assign_term = assign_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let assign_term_built = AssignTerm { assign_term };
        self.user_grammar.assign_term(&assign_term_built)?;
        self.push(ASTType::AssignTerm(assign_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn as_term(&mut self, as_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let as_term = as_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let as_term_built = AsTerm { as_term };
        self.user_grammar.as_term(&as_term_built)?;
        self.push(ASTType::AsTerm(as_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn bit_term(&mut self, bit_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let bit_term = bit_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let bit_term_built = BitTerm { bit_term };
        self.user_grammar.bit_term(&bit_term_built)?;
        self.push(ASTType::BitTerm(bit_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_term(&mut self, case_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_term = case_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let case_term_built = CaseTerm { case_term };
        self.user_grammar.case_term(&case_term_built)?;
        self.push(ASTType::CaseTerm(case_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_term(&mut self, clock_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_term = clock_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let clock_term_built = ClockTerm { clock_term };
        self.user_grammar.clock_term(&clock_term_built)?;
        self.push(ASTType::ClockTerm(clock_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_posedge_term(&mut self, clock_posedge_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_posedge_term = clock_posedge_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let clock_posedge_term_built = ClockPosedgeTerm { clock_posedge_term };
        self.user_grammar
            .clock_posedge_term(&clock_posedge_term_built)?;
        self.push(ASTType::ClockPosedgeTerm(clock_posedge_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_negedge_term(&mut self, clock_negedge_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_negedge_term = clock_negedge_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let clock_negedge_term_built = ClockNegedgeTerm { clock_negedge_term };
        self.user_grammar
            .clock_negedge_term(&clock_negedge_term_built)?;
        self.push(ASTType::ClockNegedgeTerm(clock_negedge_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn const_term(&mut self, const_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let const_term = const_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let const_term_built = ConstTerm { const_term };
        self.user_grammar.const_term(&const_term_built)?;
        self.push(ASTType::ConstTerm(const_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn default_term(&mut self, default_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let default_term = default_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let default_term_built = DefaultTerm { default_term };
        self.user_grammar.default_term(&default_term_built)?;
        self.push(ASTType::DefaultTerm(default_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn else_term(&mut self, else_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let else_term = else_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let else_term_built = ElseTerm { else_term };
        self.user_grammar.else_term(&else_term_built)?;
        self.push(ASTType::ElseTerm(else_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_term(&mut self, embed_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_term = embed_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let embed_term_built = EmbedTerm { embed_term };
        self.user_grammar.embed_term(&embed_term_built)?;
        self.push(ASTType::EmbedTerm(embed_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_term(&mut self, enum_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_term = enum_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let enum_term_built = EnumTerm { enum_term };
        self.user_grammar.enum_term(&enum_term_built)?;
        self.push(ASTType::EnumTerm(enum_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_term(&mut self, export_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let export_term = export_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let export_term_built = ExportTerm { export_term };
        self.user_grammar.export_term(&export_term_built)?;
        self.push(ASTType::ExportTerm(export_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn f32_term(&mut self, f32_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f32_term = f32_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let f32_term_built = F32Term { f32_term };
        self.user_grammar.f32_term(&f32_term_built)?;
        self.push(ASTType::F32Term(f32_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn f64_term(&mut self, f64_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f64_term = f64_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let f64_term_built = F64Term { f64_term };
        self.user_grammar.f64_term(&f64_term_built)?;
        self.push(ASTType::F64Term(f64_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn final_term(&mut self, final_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let final_term = final_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let final_term_built = FinalTerm { final_term };
        self.user_grammar.final_term(&final_term_built)?;
        self.push(ASTType::FinalTerm(final_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn for_term(&mut self, for_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let for_term = for_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let for_term_built = ForTerm { for_term };
        self.user_grammar.for_term(&for_term_built)?;
        self.push(ASTType::ForTerm(for_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_term(&mut self, function_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let function_term = function_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let function_term_built = FunctionTerm { function_term };
        self.user_grammar.function_term(&function_term_built)?;
        self.push(ASTType::FunctionTerm(function_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn i32_term(&mut self, i32_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i32_term = i32_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let i32_term_built = I32Term { i32_term };
        self.user_grammar.i32_term(&i32_term_built)?;
        self.push(ASTType::I32Term(i32_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn i64_term(&mut self, i64_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i64_term = i64_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let i64_term_built = I64Term { i64_term };
        self.user_grammar.i64_term(&i64_term_built)?;
        self.push(ASTType::I64Term(i64_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_term(&mut self, if_reset_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_reset_term = if_reset_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let if_reset_term_built = IfResetTerm { if_reset_term };
        self.user_grammar.if_reset_term(&if_reset_term_built)?;
        self.push(ASTType::IfResetTerm(if_reset_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_term(&mut self, if_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_term = if_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let if_term_built = IfTerm { if_term };
        self.user_grammar.if_term(&if_term_built)?;
        self.push(ASTType::IfTerm(if_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn import_term(&mut self, import_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let import_term = import_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let import_term_built = ImportTerm { import_term };
        self.user_grammar.import_term(&import_term_built)?;
        self.push(ASTType::ImportTerm(import_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn include_term(&mut self, include_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let include_term = include_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let include_term_built = IncludeTerm { include_term };
        self.user_grammar.include_term(&include_term_built)?;
        self.push(ASTType::IncludeTerm(include_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn initial_term(&mut self, initial_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let initial_term = initial_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let initial_term_built = InitialTerm { initial_term };
        self.user_grammar.initial_term(&initial_term_built)?;
        self.push(ASTType::InitialTerm(initial_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inout_term(&mut self, inout_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inout_term = inout_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let inout_term_built = InoutTerm { inout_term };
        self.user_grammar.inout_term(&inout_term_built)?;
        self.push(ASTType::InoutTerm(inout_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn input_term(&mut self, input_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let input_term = input_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let input_term_built = InputTerm { input_term };
        self.user_grammar.input_term(&input_term_built)?;
        self.push(ASTType::InputTerm(input_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inside_term(&mut self, inside_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inside_term = inside_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let inside_term_built = InsideTerm { inside_term };
        self.user_grammar.inside_term(&inside_term_built)?;
        self.push(ASTType::InsideTerm(inside_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_term(&mut self, inst_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_term = inst_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let inst_term_built = InstTerm { inst_term };
        self.user_grammar.inst_term(&inst_term_built)?;
        self.push(ASTType::InstTerm(inst_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_term(&mut self, interface_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_term = interface_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let interface_term_built = InterfaceTerm { interface_term };
        self.user_grammar.interface_term(&interface_term_built)?;
        self.push(ASTType::InterfaceTerm(interface_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn in_term(&mut self, in_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let in_term = in_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let in_term_built = InTerm { in_term };
        self.user_grammar.in_term(&in_term_built)?;
        self.push(ASTType::InTerm(in_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_term(&mut self, let_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let let_term = let_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let let_term_built = LetTerm { let_term };
        self.user_grammar.let_term(&let_term_built)?;
        self.push(ASTType::LetTerm(let_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn logic_term(&mut self, logic_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let logic_term = logic_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let logic_term_built = LogicTerm { logic_term };
        self.user_grammar.logic_term(&logic_term_built)?;
        self.push(ASTType::LogicTerm(logic_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn lsb_term(&mut self, lsb_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let lsb_term = lsb_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let lsb_term_built = LsbTerm { lsb_term };
        self.user_grammar.lsb_term(&lsb_term_built)?;
        self.push(ASTType::LsbTerm(lsb_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_term(&mut self, modport_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_term = modport_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let modport_term_built = ModportTerm { modport_term };
        self.user_grammar.modport_term(&modport_term_built)?;
        self.push(ASTType::ModportTerm(modport_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_term(&mut self, module_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_term = module_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let module_term_built = ModuleTerm { module_term };
        self.user_grammar.module_term(&module_term_built)?;
        self.push(ASTType::ModuleTerm(module_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn msb_term(&mut self, msb_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let msb_term = msb_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let msb_term_built = MsbTerm { msb_term };
        self.user_grammar.msb_term(&msb_term_built)?;
        self.push(ASTType::MsbTerm(msb_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn output_term(&mut self, output_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let output_term = output_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let output_term_built = OutputTerm { output_term };
        self.user_grammar.output_term(&output_term_built)?;
        self.push(ASTType::OutputTerm(output_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn outside_term(&mut self, outside_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let outside_term = outside_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let outside_term_built = OutsideTerm { outside_term };
        self.user_grammar.outside_term(&outside_term_built)?;
        self.push(ASTType::OutsideTerm(outside_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_term(&mut self, package_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_term = package_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let package_term_built = PackageTerm { package_term };
        self.user_grammar.package_term(&package_term_built)?;
        self.push(ASTType::PackageTerm(package_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn param_term(&mut self, param_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let param_term = param_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let param_term_built = ParamTerm { param_term };
        self.user_grammar.param_term(¶m_term_built)?;
        self.push(ASTType::ParamTerm(param_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_term(&mut self, proto_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let proto_term = proto_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let proto_term_built = ProtoTerm { proto_term };
        self.user_grammar.proto_term(&proto_term_built)?;
        self.push(ASTType::ProtoTerm(proto_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn pub_term(&mut self, pub_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let pub_term = pub_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let pub_term_built = PubTerm { pub_term };
        self.user_grammar.pub_term(&pub_term_built)?;
        self.push(ASTType::PubTerm(pub_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn ref_term(&mut self, ref_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let ref_term = ref_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let ref_term_built = RefTerm { ref_term };
        self.user_grammar.ref_term(&ref_term_built)?;
        self.push(ASTType::RefTerm(ref_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn repeat_term(&mut self, repeat_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let repeat_term = repeat_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let repeat_term_built = RepeatTerm { repeat_term };
        self.user_grammar.repeat_term(&repeat_term_built)?;
        self.push(ASTType::RepeatTerm(repeat_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_term(&mut self, reset_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_term = reset_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let reset_term_built = ResetTerm { reset_term };
        self.user_grammar.reset_term(&reset_term_built)?;
        self.push(ASTType::ResetTerm(reset_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_async_high_term(&mut self, reset_async_high_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_high_term = reset_async_high_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let reset_async_high_term_built = ResetAsyncHighTerm {
            reset_async_high_term,
        };
        self.user_grammar
            .reset_async_high_term(&reset_async_high_term_built)?;
        self.push(
            ASTType::ResetAsyncHighTerm(reset_async_high_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_async_low_term(&mut self, reset_async_low_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_low_term = reset_async_low_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let reset_async_low_term_built = ResetAsyncLowTerm {
            reset_async_low_term,
        };
        self.user_grammar
            .reset_async_low_term(&reset_async_low_term_built)?;
        self.push(
            ASTType::ResetAsyncLowTerm(reset_async_low_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_sync_high_term(&mut self, reset_sync_high_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_high_term = reset_sync_high_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let reset_sync_high_term_built = ResetSyncHighTerm {
            reset_sync_high_term,
        };
        self.user_grammar
            .reset_sync_high_term(&reset_sync_high_term_built)?;
        self.push(
            ASTType::ResetSyncHighTerm(reset_sync_high_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_sync_low_term(&mut self, reset_sync_low_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_low_term = reset_sync_low_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let reset_sync_low_term_built = ResetSyncLowTerm {
            reset_sync_low_term,
        };
        self.user_grammar
            .reset_sync_low_term(&reset_sync_low_term_built)?;
        self.push(
            ASTType::ResetSyncLowTerm(reset_sync_low_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn return_term(&mut self, return_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let return_term = return_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let return_term_built = ReturnTerm { return_term };
        self.user_grammar.return_term(&return_term_built)?;
        self.push(ASTType::ReturnTerm(return_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn break_term(&mut self, break_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let break_term = break_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let break_term_built = BreakTerm { break_term };
        self.user_grammar.break_term(&break_term_built)?;
        self.push(ASTType::BreakTerm(break_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn signed_term(&mut self, signed_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let signed_term = signed_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let signed_term_built = SignedTerm { signed_term };
        self.user_grammar.signed_term(&signed_term_built)?;
        self.push(ASTType::SignedTerm(signed_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn step_term(&mut self, step_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let step_term = step_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let step_term_built = StepTerm { step_term };
        self.user_grammar.step_term(&step_term_built)?;
        self.push(ASTType::StepTerm(step_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn string_term(&mut self, string_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let string_term = string_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let string_term_built = StringTerm { string_term };
        self.user_grammar.string_term(&string_term_built)?;
        self.push(ASTType::StringTerm(string_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_term(&mut self, struct_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_term = struct_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let struct_term_built = StructTerm { struct_term };
        self.user_grammar.struct_term(&struct_term_built)?;
        self.push(ASTType::StructTerm(struct_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_term(&mut self, switch_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_term = switch_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let switch_term_built = SwitchTerm { switch_term };
        self.user_grammar.switch_term(&switch_term_built)?;
        self.push(ASTType::SwitchTerm(switch_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn tri_term(&mut self, tri_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let tri_term = tri_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let tri_term_built = TriTerm { tri_term };
        self.user_grammar.tri_term(&tri_term_built)?;
        self.push(ASTType::TriTerm(tri_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn type_term(&mut self, type_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let type_term = type_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let type_term_built = TypeTerm { type_term };
        self.user_grammar.type_term(&type_term_built)?;
        self.push(ASTType::TypeTerm(type_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn u32_term(&mut self, u32_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u32_term = u32_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let u32_term_built = U32Term { u32_term };
        self.user_grammar.u32_term(&u32_term_built)?;
        self.push(ASTType::U32Term(u32_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn u64_term(&mut self, u64_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u64_term = u64_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let u64_term_built = U64Term { u64_term };
        self.user_grammar.u64_term(&u64_term_built)?;
        self.push(ASTType::U64Term(u64_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn union_term(&mut self, union_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let union_term = union_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let union_term_built = UnionTerm { union_term };
        self.user_grammar.union_term(&union_term_built)?;
        self.push(ASTType::UnionTerm(union_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unsafe_term(&mut self, unsafe_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unsafe_term = unsafe_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let unsafe_term_built = UnsafeTerm { unsafe_term };
        self.user_grammar.unsafe_term(&unsafe_term_built)?;
        self.push(ASTType::UnsafeTerm(unsafe_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn var_term(&mut self, var_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let var_term = var_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let var_term_built = VarTerm { var_term };
        self.user_grammar.var_term(&var_term_built)?;
        self.push(ASTType::VarTerm(var_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dollar_identifier_term(&mut self, dollar_identifier_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dollar_identifier_term = dollar_identifier_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let dollar_identifier_term_built = DollarIdentifierTerm {
            dollar_identifier_term,
        };
        self.user_grammar
            .dollar_identifier_term(&dollar_identifier_term_built)?;
        self.push(
            ASTType::DollarIdentifierTerm(dollar_identifier_term_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn identifier_term(&mut self, identifier_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let identifier_term = identifier_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let identifier_term_built = IdentifierTerm { identifier_term };
        self.user_grammar.identifier_term(&identifier_term_built)?;
        self.push(ASTType::IdentifierTerm(identifier_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn any_term(&mut self, any_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let any_term = any_term
            .token()?
            .try_into()
            .map_err(parol_runtime::ParolError::UserError)?;
        let any_term_built = AnyTerm { any_term };
        self.user_grammar.any_term(&any_term_built)?;
        self.push(ASTType::AnyTerm(any_term_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn comments(&mut self, _comments_opt: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments_opt = pop_item!(self, comments_opt, CommentsOpt, context);
        let comments_built = Comments { comments_opt };
        self.user_grammar.comments(&comments_built)?;
        self.push(ASTType::Comments(comments_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn comments_opt_0(&mut self, _comments_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments_term = pop_item!(self, comments_term, CommentsTerm, context);
        let comments_opt_0_built = CommentsOpt {
            comments_term: Box::new(comments_term),
        };
        self.push(ASTType::CommentsOpt(Some(comments_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn comments_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::CommentsOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn start_token(&mut self, _comments: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let start_token_built = StartToken {
            comments: Box::new(comments),
        };
        self.user_grammar.start_token(&start_token_built)?;
        self.push(ASTType::StartToken(start_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn string_literal_token(
        &mut self,
        _string_literal_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let string_literal_term = pop_item!(self, string_literal_term, StringLiteralTerm, context);
        let string_literal_token_built = StringLiteralToken {
            string_literal_term: (&string_literal_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .string_literal_token(&string_literal_token_built)?;
        self.push(
            ASTType::StringLiteralToken(string_literal_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn exponent_token(
        &mut self,
        _exponent_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let exponent_term = pop_item!(self, exponent_term, ExponentTerm, context);
        let exponent_token_built = ExponentToken {
            exponent_term: (&exponent_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.exponent_token(&exponent_token_built)?;
        self.push(ASTType::ExponentToken(exponent_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_point_token(
        &mut self,
        _fixed_point_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let fixed_point_term = pop_item!(self, fixed_point_term, FixedPointTerm, context);
        let fixed_point_token_built = FixedPointToken {
            fixed_point_term: (&fixed_point_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .fixed_point_token(&fixed_point_token_built)?;
        self.push(ASTType::FixedPointToken(fixed_point_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn based_token(
        &mut self,
        _based_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let based_term = pop_item!(self, based_term, BasedTerm, context);
        let based_token_built = BasedToken {
            based_term: (&based_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.based_token(&based_token_built)?;
        self.push(ASTType::BasedToken(based_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn base_less_token(
        &mut self,
        _base_less_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let base_less_term = pop_item!(self, base_less_term, BaseLessTerm, context);
        let base_less_token_built = BaseLessToken {
            base_less_term: (&base_less_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.base_less_token(&base_less_token_built)?;
        self.push(ASTType::BaseLessToken(base_less_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn all_bit_token(
        &mut self,
        _all_bit_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let all_bit_term = pop_item!(self, all_bit_term, AllBitTerm, context);
        let all_bit_token_built = AllBitToken {
            all_bit_term: (&all_bit_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.all_bit_token(&all_bit_token_built)?;
        self.push(ASTType::AllBitToken(all_bit_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assignment_operator_token(
        &mut self,
        _assignment_operator_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let assignment_operator_term = pop_item!(
            self,
            assignment_operator_term,
            AssignmentOperatorTerm,
            context
        );
        let assignment_operator_token_built = AssignmentOperatorToken {
            assignment_operator_term: (&assignment_operator_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .assignment_operator_token(&assignment_operator_token_built)?;
        self.push(
            ASTType::AssignmentOperatorToken(assignment_operator_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator01_token(
        &mut self,
        _operator01_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator01_term = pop_item!(self, operator01_term, Operator01Term, context);
        let operator01_token_built = Operator01Token {
            operator01_term: (&operator01_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator01_token(&operator01_token_built)?;
        self.push(ASTType::Operator01Token(operator01_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator02_token(
        &mut self,
        _operator02_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator02_term = pop_item!(self, operator02_term, Operator02Term, context);
        let operator02_token_built = Operator02Token {
            operator02_term: (&operator02_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator02_token(&operator02_token_built)?;
        self.push(ASTType::Operator02Token(operator02_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator03_token(
        &mut self,
        _operator03_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator03_term = pop_item!(self, operator03_term, Operator03Term, context);
        let operator03_token_built = Operator03Token {
            operator03_term: (&operator03_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator03_token(&operator03_token_built)?;
        self.push(ASTType::Operator03Token(operator03_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator04_token(
        &mut self,
        _operator04_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator04_term = pop_item!(self, operator04_term, Operator04Term, context);
        let operator04_token_built = Operator04Token {
            operator04_term: (&operator04_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator04_token(&operator04_token_built)?;
        self.push(ASTType::Operator04Token(operator04_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator05_token(
        &mut self,
        _operator05_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator05_term = pop_item!(self, operator05_term, Operator05Term, context);
        let operator05_token_built = Operator05Token {
            operator05_term: (&operator05_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator05_token(&operator05_token_built)?;
        self.push(ASTType::Operator05Token(operator05_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator06_token(
        &mut self,
        _operator06_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator06_term = pop_item!(self, operator06_term, Operator06Term, context);
        let operator06_token_built = Operator06Token {
            operator06_term: (&operator06_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator06_token(&operator06_token_built)?;
        self.push(ASTType::Operator06Token(operator06_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator07_token(
        &mut self,
        _operator07_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator07_term = pop_item!(self, operator07_term, Operator07Term, context);
        let operator07_token_built = Operator07Token {
            operator07_term: (&operator07_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator07_token(&operator07_token_built)?;
        self.push(ASTType::Operator07Token(operator07_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator08_token(
        &mut self,
        _operator08_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator08_term = pop_item!(self, operator08_term, Operator08Term, context);
        let operator08_token_built = Operator08Token {
            operator08_term: (&operator08_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator08_token(&operator08_token_built)?;
        self.push(ASTType::Operator08Token(operator08_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator09_token(
        &mut self,
        _operator09_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator09_term = pop_item!(self, operator09_term, Operator09Term, context);
        let operator09_token_built = Operator09Token {
            operator09_term: (&operator09_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator09_token(&operator09_token_built)?;
        self.push(ASTType::Operator09Token(operator09_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator10_token(
        &mut self,
        _operator10_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator10_term = pop_item!(self, operator10_term, Operator10Term, context);
        let operator10_token_built = Operator10Token {
            operator10_term: (&operator10_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator10_token(&operator10_token_built)?;
        self.push(ASTType::Operator10Token(operator10_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator11_token(
        &mut self,
        _operator11_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let operator11_term = pop_item!(self, operator11_term, Operator11Term, context);
        let operator11_token_built = Operator11Token {
            operator11_term: (&operator11_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .operator11_token(&operator11_token_built)?;
        self.push(ASTType::Operator11Token(operator11_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unary_operator_token(
        &mut self,
        _unary_operator_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let unary_operator_term = pop_item!(self, unary_operator_term, UnaryOperatorTerm, context);
        let unary_operator_token_built = UnaryOperatorToken {
            unary_operator_term: (&unary_operator_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .unary_operator_token(&unary_operator_token_built)?;
        self.push(
            ASTType::UnaryOperatorToken(unary_operator_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn back_quote_token(
        &mut self,
        _back_quote_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let back_quote_term = pop_item!(self, back_quote_term, BackQuoteTerm, context);
        let back_quote_token_built = BackQuoteToken {
            back_quote_term: (&back_quote_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .back_quote_token(&back_quote_token_built)?;
        self.push(ASTType::BackQuoteToken(back_quote_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_token(
        &mut self,
        _colon_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let colon_term = pop_item!(self, colon_term, ColonTerm, context);
        let colon_token_built = ColonToken {
            colon_term: (&colon_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.colon_token(&colon_token_built)?;
        self.push(ASTType::ColonToken(colon_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_colon_l_angle_token(
        &mut self,
        _colon_colon_l_angle_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let colon_colon_l_angle_term = pop_item!(
            self,
            colon_colon_l_angle_term,
            ColonColonLAngleTerm,
            context
        );
        let colon_colon_l_angle_token_built = ColonColonLAngleToken {
            colon_colon_l_angle_term: (&colon_colon_l_angle_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .colon_colon_l_angle_token(&colon_colon_l_angle_token_built)?;
        self.push(
            ASTType::ColonColonLAngleToken(colon_colon_l_angle_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_colon_token(
        &mut self,
        _colon_colon_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let colon_colon_term = pop_item!(self, colon_colon_term, ColonColonTerm, context);
        let colon_colon_token_built = ColonColonToken {
            colon_colon_term: (&colon_colon_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .colon_colon_token(&colon_colon_token_built)?;
        self.push(ASTType::ColonColonToken(colon_colon_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn comma_token(
        &mut self,
        _comma_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let comma_term = pop_item!(self, comma_term, CommaTerm, context);
        let comma_token_built = CommaToken {
            comma_term: (&comma_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.comma_token(&comma_token_built)?;
        self.push(ASTType::CommaToken(comma_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_dot_token(
        &mut self,
        _dot_dot_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let dot_dot_term = pop_item!(self, dot_dot_term, DotDotTerm, context);
        let dot_dot_token_built = DotDotToken {
            dot_dot_term: (&dot_dot_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.dot_dot_token(&dot_dot_token_built)?;
        self.push(ASTType::DotDotToken(dot_dot_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_dot_equ_token(
        &mut self,
        _dot_dot_equ_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let dot_dot_equ_term = pop_item!(self, dot_dot_equ_term, DotDotEquTerm, context);
        let dot_dot_equ_token_built = DotDotEquToken {
            dot_dot_equ_term: (&dot_dot_equ_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .dot_dot_equ_token(&dot_dot_equ_token_built)?;
        self.push(ASTType::DotDotEquToken(dot_dot_equ_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_token(
        &mut self,
        _dot_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let dot_term = pop_item!(self, dot_term, DotTerm, context);
        let dot_token_built = DotToken {
            dot_term: (&dot_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.dot_token(&dot_token_built)?;
        self.push(ASTType::DotToken(dot_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn equ_token(
        &mut self,
        _equ_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let equ_term = pop_item!(self, equ_term, EquTerm, context);
        let equ_token_built = EquToken {
            equ_term: (&equ_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.equ_token(&equ_token_built)?;
        self.push(ASTType::EquToken(equ_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hash_token(
        &mut self,
        _hash_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let hash_term = pop_item!(self, hash_term, HashTerm, context);
        let hash_token_built = HashToken {
            hash_term: (&hash_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.hash_token(&hash_token_built)?;
        self.push(ASTType::HashToken(hash_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn quote_l_brace_token(
        &mut self,
        _quote_l_brace_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let quote_l_brace_term = pop_item!(self, quote_l_brace_term, QuoteLBraceTerm, context);
        let quote_l_brace_token_built = QuoteLBraceToken {
            quote_l_brace_term: ("e_l_brace_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .quote_l_brace_token("e_l_brace_token_built)?;
        self.push(
            ASTType::QuoteLBraceToken(quote_l_brace_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_angle_token(
        &mut self,
        _l_angle_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let l_angle_term = pop_item!(self, l_angle_term, LAngleTerm, context);
        let l_angle_token_built = LAngleToken {
            l_angle_term: (&l_angle_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.l_angle_token(&l_angle_token_built)?;
        self.push(ASTType::LAngleToken(l_angle_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_brace_token(
        &mut self,
        _l_brace_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let l_brace_term = pop_item!(self, l_brace_term, LBraceTerm, context);
        let l_brace_token_built = LBraceToken {
            l_brace_term: (&l_brace_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.l_brace_token(&l_brace_token_built)?;
        self.push(ASTType::LBraceToken(l_brace_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_bracket_token(
        &mut self,
        _l_bracket_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let l_bracket_term = pop_item!(self, l_bracket_term, LBracketTerm, context);
        let l_bracket_token_built = LBracketToken {
            l_bracket_term: (&l_bracket_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.l_bracket_token(&l_bracket_token_built)?;
        self.push(ASTType::LBracketToken(l_bracket_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_paren_token(
        &mut self,
        _l_paren_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let l_paren_term = pop_item!(self, l_paren_term, LParenTerm, context);
        let l_paren_token_built = LParenToken {
            l_paren_term: (&l_paren_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.l_paren_token(&l_paren_token_built)?;
        self.push(ASTType::LParenToken(l_paren_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn minus_colon_token(
        &mut self,
        _minus_colon_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let minus_colon_term = pop_item!(self, minus_colon_term, MinusColonTerm, context);
        let minus_colon_token_built = MinusColonToken {
            minus_colon_term: (&minus_colon_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .minus_colon_token(&minus_colon_token_built)?;
        self.push(ASTType::MinusColonToken(minus_colon_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn minus_g_t_token(
        &mut self,
        _minus_g_t_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let minus_g_t_term = pop_item!(self, minus_g_t_term, MinusGTTerm, context);
        let minus_g_t_token_built = MinusGTToken {
            minus_g_t_term: (&minus_g_t_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.minus_g_t_token(&minus_g_t_token_built)?;
        self.push(ASTType::MinusGTToken(minus_g_t_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn plus_colon_token(
        &mut self,
        _plus_colon_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let plus_colon_term = pop_item!(self, plus_colon_term, PlusColonTerm, context);
        let plus_colon_token_built = PlusColonToken {
            plus_colon_term: (&plus_colon_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .plus_colon_token(&plus_colon_token_built)?;
        self.push(ASTType::PlusColonToken(plus_colon_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_angle_token(
        &mut self,
        _r_angle_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let r_angle_term = pop_item!(self, r_angle_term, RAngleTerm, context);
        let r_angle_token_built = RAngleToken {
            r_angle_term: (&r_angle_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.r_angle_token(&r_angle_token_built)?;
        self.push(ASTType::RAngleToken(r_angle_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_brace_token(
        &mut self,
        _r_brace_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let r_brace_term = pop_item!(self, r_brace_term, RBraceTerm, context);
        let r_brace_token_built = RBraceToken {
            r_brace_term: (&r_brace_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.r_brace_token(&r_brace_token_built)?;
        self.push(ASTType::RBraceToken(r_brace_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_bracket_token(
        &mut self,
        _r_bracket_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let r_bracket_term = pop_item!(self, r_bracket_term, RBracketTerm, context);
        let r_bracket_token_built = RBracketToken {
            r_bracket_term: (&r_bracket_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.r_bracket_token(&r_bracket_token_built)?;
        self.push(ASTType::RBracketToken(r_bracket_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_paren_token(
        &mut self,
        _r_paren_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let r_paren_term = pop_item!(self, r_paren_term, RParenTerm, context);
        let r_paren_token_built = RParenToken {
            r_paren_term: (&r_paren_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.r_paren_token(&r_paren_token_built)?;
        self.push(ASTType::RParenToken(r_paren_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn semicolon_token(
        &mut self,
        _semicolon_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let semicolon_term = pop_item!(self, semicolon_term, SemicolonTerm, context);
        let semicolon_token_built = SemicolonToken {
            semicolon_term: (&semicolon_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.semicolon_token(&semicolon_token_built)?;
        self.push(ASTType::SemicolonToken(semicolon_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn star_token(
        &mut self,
        _star_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let star_term = pop_item!(self, star_term, StarTerm, context);
        let star_token_built = StarToken {
            star_term: (&star_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.star_token(&star_token_built)?;
        self.push(ASTType::StarToken(star_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_comb_token(
        &mut self,
        _always_comb_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let always_comb_term = pop_item!(self, always_comb_term, AlwaysCombTerm, context);
        let always_comb_token_built = AlwaysCombToken {
            always_comb_term: (&always_comb_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .always_comb_token(&always_comb_token_built)?;
        self.push(ASTType::AlwaysCombToken(always_comb_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_token(
        &mut self,
        _always_ff_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let always_ff_term = pop_item!(self, always_ff_term, AlwaysFfTerm, context);
        let always_ff_token_built = AlwaysFfToken {
            always_ff_term: (&always_ff_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.always_ff_token(&always_ff_token_built)?;
        self.push(ASTType::AlwaysFfToken(always_ff_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn as_token(
        &mut self,
        _as_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let as_term = pop_item!(self, as_term, AsTerm, context);
        let as_token_built = AsToken {
            as_term: (&as_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.as_token(&as_token_built)?;
        self.push(ASTType::AsToken(as_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assign_token(
        &mut self,
        _assign_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let assign_term = pop_item!(self, assign_term, AssignTerm, context);
        let assign_token_built = AssignToken {
            assign_term: (&assign_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.assign_token(&assign_token_built)?;
        self.push(ASTType::AssignToken(assign_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn bit_token(
        &mut self,
        _bit_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let bit_term = pop_item!(self, bit_term, BitTerm, context);
        let bit_token_built = BitToken {
            bit_term: (&bit_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.bit_token(&bit_token_built)?;
        self.push(ASTType::BitToken(bit_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_token(
        &mut self,
        _case_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let case_term = pop_item!(self, case_term, CaseTerm, context);
        let case_token_built = CaseToken {
            case_term: (&case_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.case_token(&case_token_built)?;
        self.push(ASTType::CaseToken(case_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_token(
        &mut self,
        _clock_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let clock_term = pop_item!(self, clock_term, ClockTerm, context);
        let clock_token_built = ClockToken {
            clock_term: (&clock_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.clock_token(&clock_token_built)?;
        self.push(ASTType::ClockToken(clock_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_posedge_token(
        &mut self,
        _clock_posedge_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let clock_posedge_term = pop_item!(self, clock_posedge_term, ClockPosedgeTerm, context);
        let clock_posedge_token_built = ClockPosedgeToken {
            clock_posedge_term: (&clock_posedge_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .clock_posedge_token(&clock_posedge_token_built)?;
        self.push(
            ASTType::ClockPosedgeToken(clock_posedge_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_negedge_token(
        &mut self,
        _clock_negedge_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let clock_negedge_term = pop_item!(self, clock_negedge_term, ClockNegedgeTerm, context);
        let clock_negedge_token_built = ClockNegedgeToken {
            clock_negedge_term: (&clock_negedge_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .clock_negedge_token(&clock_negedge_token_built)?;
        self.push(
            ASTType::ClockNegedgeToken(clock_negedge_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn const_token(
        &mut self,
        _const_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let const_term = pop_item!(self, const_term, ConstTerm, context);
        let const_token_built = ConstToken {
            const_term: (&const_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.const_token(&const_token_built)?;
        self.push(ASTType::ConstToken(const_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn default_token(
        &mut self,
        _default_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let default_term = pop_item!(self, default_term, DefaultTerm, context);
        let default_token_built = DefaultToken {
            default_term: (&default_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.default_token(&default_token_built)?;
        self.push(ASTType::DefaultToken(default_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn else_token(
        &mut self,
        _else_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let else_term = pop_item!(self, else_term, ElseTerm, context);
        let else_token_built = ElseToken {
            else_term: (&else_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.else_token(&else_token_built)?;
        self.push(ASTType::ElseToken(else_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_token(
        &mut self,
        _embed_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let embed_term = pop_item!(self, embed_term, EmbedTerm, context);
        let embed_token_built = EmbedToken {
            embed_term: (&embed_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.embed_token(&embed_token_built)?;
        self.push(ASTType::EmbedToken(embed_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_token(
        &mut self,
        _enum_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let enum_term = pop_item!(self, enum_term, EnumTerm, context);
        let enum_token_built = EnumToken {
            enum_term: (&enum_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.enum_token(&enum_token_built)?;
        self.push(ASTType::EnumToken(enum_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_token(
        &mut self,
        _export_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let export_term = pop_item!(self, export_term, ExportTerm, context);
        let export_token_built = ExportToken {
            export_term: (&export_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.export_token(&export_token_built)?;
        self.push(ASTType::ExportToken(export_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn f32_token(
        &mut self,
        _f32_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let f32_term = pop_item!(self, f32_term, F32Term, context);
        let f32_token_built = F32Token {
            f32_term: (&f32_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.f32_token(&f32_token_built)?;
        self.push(ASTType::F32Token(f32_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn f64_token(
        &mut self,
        _f64_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let f64_term = pop_item!(self, f64_term, F64Term, context);
        let f64_token_built = F64Token {
            f64_term: (&f64_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.f64_token(&f64_token_built)?;
        self.push(ASTType::F64Token(f64_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn final_token(
        &mut self,
        _final_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let final_term = pop_item!(self, final_term, FinalTerm, context);
        let final_token_built = FinalToken {
            final_term: (&final_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.final_token(&final_token_built)?;
        self.push(ASTType::FinalToken(final_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn for_token(
        &mut self,
        _for_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let for_term = pop_item!(self, for_term, ForTerm, context);
        let for_token_built = ForToken {
            for_term: (&for_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.for_token(&for_token_built)?;
        self.push(ASTType::ForToken(for_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_token(
        &mut self,
        _function_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let function_term = pop_item!(self, function_term, FunctionTerm, context);
        let function_token_built = FunctionToken {
            function_term: (&function_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.function_token(&function_token_built)?;
        self.push(ASTType::FunctionToken(function_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn i32_token(
        &mut self,
        _i32_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let i32_term = pop_item!(self, i32_term, I32Term, context);
        let i32_token_built = I32Token {
            i32_term: (&i32_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.i32_token(&i32_token_built)?;
        self.push(ASTType::I32Token(i32_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn i64_token(
        &mut self,
        _i64_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let i64_term = pop_item!(self, i64_term, I64Term, context);
        let i64_token_built = I64Token {
            i64_term: (&i64_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.i64_token(&i64_token_built)?;
        self.push(ASTType::I64Token(i64_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_token(
        &mut self,
        _if_reset_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let if_reset_term = pop_item!(self, if_reset_term, IfResetTerm, context);
        let if_reset_token_built = IfResetToken {
            if_reset_term: (&if_reset_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.if_reset_token(&if_reset_token_built)?;
        self.push(ASTType::IfResetToken(if_reset_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_token(
        &mut self,
        _if_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let if_term = pop_item!(self, if_term, IfTerm, context);
        let if_token_built = IfToken {
            if_term: (&if_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.if_token(&if_token_built)?;
        self.push(ASTType::IfToken(if_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn import_token(
        &mut self,
        _import_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let import_term = pop_item!(self, import_term, ImportTerm, context);
        let import_token_built = ImportToken {
            import_term: (&import_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.import_token(&import_token_built)?;
        self.push(ASTType::ImportToken(import_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn include_token(
        &mut self,
        _include_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let include_term = pop_item!(self, include_term, IncludeTerm, context);
        let include_token_built = IncludeToken {
            include_term: (&include_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.include_token(&include_token_built)?;
        self.push(ASTType::IncludeToken(include_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn initial_token(
        &mut self,
        _initial_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let initial_term = pop_item!(self, initial_term, InitialTerm, context);
        let initial_token_built = InitialToken {
            initial_term: (&initial_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.initial_token(&initial_token_built)?;
        self.push(ASTType::InitialToken(initial_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inout_token(
        &mut self,
        _inout_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let inout_term = pop_item!(self, inout_term, InoutTerm, context);
        let inout_token_built = InoutToken {
            inout_term: (&inout_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.inout_token(&inout_token_built)?;
        self.push(ASTType::InoutToken(inout_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn input_token(
        &mut self,
        _input_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let input_term = pop_item!(self, input_term, InputTerm, context);
        let input_token_built = InputToken {
            input_term: (&input_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.input_token(&input_token_built)?;
        self.push(ASTType::InputToken(input_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inside_token(
        &mut self,
        _inside_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let inside_term = pop_item!(self, inside_term, InsideTerm, context);
        let inside_token_built = InsideToken {
            inside_term: (&inside_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.inside_token(&inside_token_built)?;
        self.push(ASTType::InsideToken(inside_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_token(
        &mut self,
        _inst_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let inst_term = pop_item!(self, inst_term, InstTerm, context);
        let inst_token_built = InstToken {
            inst_term: (&inst_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.inst_token(&inst_token_built)?;
        self.push(ASTType::InstToken(inst_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_token(
        &mut self,
        _interface_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let interface_term = pop_item!(self, interface_term, InterfaceTerm, context);
        let interface_token_built = InterfaceToken {
            interface_term: (&interface_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.interface_token(&interface_token_built)?;
        self.push(ASTType::InterfaceToken(interface_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn in_token(
        &mut self,
        _in_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let in_term = pop_item!(self, in_term, InTerm, context);
        let in_token_built = InToken {
            in_term: (&in_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.in_token(&in_token_built)?;
        self.push(ASTType::InToken(in_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_token(
        &mut self,
        _let_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let let_term = pop_item!(self, let_term, LetTerm, context);
        let let_token_built = LetToken {
            let_term: (&let_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.let_token(&let_token_built)?;
        self.push(ASTType::LetToken(let_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn logic_token(
        &mut self,
        _logic_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let logic_term = pop_item!(self, logic_term, LogicTerm, context);
        let logic_token_built = LogicToken {
            logic_term: (&logic_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.logic_token(&logic_token_built)?;
        self.push(ASTType::LogicToken(logic_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn lsb_token(
        &mut self,
        _lsb_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let lsb_term = pop_item!(self, lsb_term, LsbTerm, context);
        let lsb_token_built = LsbToken {
            lsb_term: (&lsb_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.lsb_token(&lsb_token_built)?;
        self.push(ASTType::LsbToken(lsb_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_token(
        &mut self,
        _modport_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let modport_term = pop_item!(self, modport_term, ModportTerm, context);
        let modport_token_built = ModportToken {
            modport_term: (&modport_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.modport_token(&modport_token_built)?;
        self.push(ASTType::ModportToken(modport_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_token(
        &mut self,
        _module_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let module_term = pop_item!(self, module_term, ModuleTerm, context);
        let module_token_built = ModuleToken {
            module_term: (&module_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.module_token(&module_token_built)?;
        self.push(ASTType::ModuleToken(module_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn msb_token(
        &mut self,
        _msb_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let msb_term = pop_item!(self, msb_term, MsbTerm, context);
        let msb_token_built = MsbToken {
            msb_term: (&msb_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.msb_token(&msb_token_built)?;
        self.push(ASTType::MsbToken(msb_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn output_token(
        &mut self,
        _output_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let output_term = pop_item!(self, output_term, OutputTerm, context);
        let output_token_built = OutputToken {
            output_term: (&output_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.output_token(&output_token_built)?;
        self.push(ASTType::OutputToken(output_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn outside_token(
        &mut self,
        _outside_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let outside_term = pop_item!(self, outside_term, OutsideTerm, context);
        let outside_token_built = OutsideToken {
            outside_term: (&outside_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.outside_token(&outside_token_built)?;
        self.push(ASTType::OutsideToken(outside_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_token(
        &mut self,
        _package_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let package_term = pop_item!(self, package_term, PackageTerm, context);
        let package_token_built = PackageToken {
            package_term: (&package_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.package_token(&package_token_built)?;
        self.push(ASTType::PackageToken(package_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn param_token(
        &mut self,
        _param_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let param_term = pop_item!(self, param_term, ParamTerm, context);
        let param_token_built = ParamToken {
            param_term: (¶m_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.param_token(¶m_token_built)?;
        self.push(ASTType::ParamToken(param_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_token(
        &mut self,
        _proto_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let proto_term = pop_item!(self, proto_term, ProtoTerm, context);
        let proto_token_built = ProtoToken {
            proto_term: (&proto_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.proto_token(&proto_token_built)?;
        self.push(ASTType::ProtoToken(proto_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn pub_token(
        &mut self,
        _pub_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let pub_term = pop_item!(self, pub_term, PubTerm, context);
        let pub_token_built = PubToken {
            pub_term: (&pub_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.pub_token(&pub_token_built)?;
        self.push(ASTType::PubToken(pub_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn ref_token(
        &mut self,
        _ref_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let ref_term = pop_item!(self, ref_term, RefTerm, context);
        let ref_token_built = RefToken {
            ref_term: (&ref_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.ref_token(&ref_token_built)?;
        self.push(ASTType::RefToken(ref_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn repeat_token(
        &mut self,
        _repeat_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let repeat_term = pop_item!(self, repeat_term, RepeatTerm, context);
        let repeat_token_built = RepeatToken {
            repeat_term: (&repeat_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.repeat_token(&repeat_token_built)?;
        self.push(ASTType::RepeatToken(repeat_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_token(
        &mut self,
        _reset_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let reset_term = pop_item!(self, reset_term, ResetTerm, context);
        let reset_token_built = ResetToken {
            reset_term: (&reset_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.reset_token(&reset_token_built)?;
        self.push(ASTType::ResetToken(reset_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_async_high_token(
        &mut self,
        _reset_async_high_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let reset_async_high_term =
            pop_item!(self, reset_async_high_term, ResetAsyncHighTerm, context);
        let reset_async_high_token_built = ResetAsyncHighToken {
            reset_async_high_term: (&reset_async_high_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .reset_async_high_token(&reset_async_high_token_built)?;
        self.push(
            ASTType::ResetAsyncHighToken(reset_async_high_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_async_low_token(
        &mut self,
        _reset_async_low_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let reset_async_low_term =
            pop_item!(self, reset_async_low_term, ResetAsyncLowTerm, context);
        let reset_async_low_token_built = ResetAsyncLowToken {
            reset_async_low_term: (&reset_async_low_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .reset_async_low_token(&reset_async_low_token_built)?;
        self.push(
            ASTType::ResetAsyncLowToken(reset_async_low_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_sync_high_token(
        &mut self,
        _reset_sync_high_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let reset_sync_high_term =
            pop_item!(self, reset_sync_high_term, ResetSyncHighTerm, context);
        let reset_sync_high_token_built = ResetSyncHighToken {
            reset_sync_high_term: (&reset_sync_high_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .reset_sync_high_token(&reset_sync_high_token_built)?;
        self.push(
            ASTType::ResetSyncHighToken(reset_sync_high_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_sync_low_token(
        &mut self,
        _reset_sync_low_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let reset_sync_low_term = pop_item!(self, reset_sync_low_term, ResetSyncLowTerm, context);
        let reset_sync_low_token_built = ResetSyncLowToken {
            reset_sync_low_term: (&reset_sync_low_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .reset_sync_low_token(&reset_sync_low_token_built)?;
        self.push(
            ASTType::ResetSyncLowToken(reset_sync_low_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn return_token(
        &mut self,
        _return_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let return_term = pop_item!(self, return_term, ReturnTerm, context);
        let return_token_built = ReturnToken {
            return_term: (&return_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.return_token(&return_token_built)?;
        self.push(ASTType::ReturnToken(return_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn break_token(
        &mut self,
        _break_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let break_term = pop_item!(self, break_term, BreakTerm, context);
        let break_token_built = BreakToken {
            break_term: (&break_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.break_token(&break_token_built)?;
        self.push(ASTType::BreakToken(break_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn signed_token(
        &mut self,
        _signed_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let signed_term = pop_item!(self, signed_term, SignedTerm, context);
        let signed_token_built = SignedToken {
            signed_term: (&signed_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.signed_token(&signed_token_built)?;
        self.push(ASTType::SignedToken(signed_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn step_token(
        &mut self,
        _step_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let step_term = pop_item!(self, step_term, StepTerm, context);
        let step_token_built = StepToken {
            step_term: (&step_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.step_token(&step_token_built)?;
        self.push(ASTType::StepToken(step_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn string_token(
        &mut self,
        _string_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let string_term = pop_item!(self, string_term, StringTerm, context);
        let string_token_built = StringToken {
            string_term: (&string_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.string_token(&string_token_built)?;
        self.push(ASTType::StringToken(string_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_token(
        &mut self,
        _struct_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let struct_term = pop_item!(self, struct_term, StructTerm, context);
        let struct_token_built = StructToken {
            struct_term: (&struct_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.struct_token(&struct_token_built)?;
        self.push(ASTType::StructToken(struct_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_token(
        &mut self,
        _switch_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let switch_term = pop_item!(self, switch_term, SwitchTerm, context);
        let switch_token_built = SwitchToken {
            switch_term: (&switch_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.switch_token(&switch_token_built)?;
        self.push(ASTType::SwitchToken(switch_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn tri_token(
        &mut self,
        _tri_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let tri_term = pop_item!(self, tri_term, TriTerm, context);
        let tri_token_built = TriToken {
            tri_term: (&tri_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.tri_token(&tri_token_built)?;
        self.push(ASTType::TriToken(tri_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn type_token(
        &mut self,
        _type_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let type_term = pop_item!(self, type_term, TypeTerm, context);
        let type_token_built = TypeToken {
            type_term: (&type_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.type_token(&type_token_built)?;
        self.push(ASTType::TypeToken(type_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn u32_token(
        &mut self,
        _u32_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let u32_term = pop_item!(self, u32_term, U32Term, context);
        let u32_token_built = U32Token {
            u32_term: (&u32_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.u32_token(&u32_token_built)?;
        self.push(ASTType::U32Token(u32_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn u64_token(
        &mut self,
        _u64_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let u64_term = pop_item!(self, u64_term, U64Term, context);
        let u64_token_built = U64Token {
            u64_term: (&u64_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.u64_token(&u64_token_built)?;
        self.push(ASTType::U64Token(u64_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn union_token(
        &mut self,
        _union_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let union_term = pop_item!(self, union_term, UnionTerm, context);
        let union_token_built = UnionToken {
            union_term: (&union_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.union_token(&union_token_built)?;
        self.push(ASTType::UnionToken(union_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unsafe_token(
        &mut self,
        _unsafe_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let unsafe_term = pop_item!(self, unsafe_term, UnsafeTerm, context);
        let unsafe_token_built = UnsafeToken {
            unsafe_term: (&unsafe_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.unsafe_token(&unsafe_token_built)?;
        self.push(ASTType::UnsafeToken(unsafe_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn var_token(
        &mut self,
        _var_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let var_term = pop_item!(self, var_term, VarTerm, context);
        let var_token_built = VarToken {
            var_term: (&var_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar.var_token(&var_token_built)?;
        self.push(ASTType::VarToken(var_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dollar_identifier_token(
        &mut self,
        _dollar_identifier_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let dollar_identifier_term =
            pop_item!(self, dollar_identifier_term, DollarIdentifierTerm, context);
        let dollar_identifier_token_built = DollarIdentifierToken {
            dollar_identifier_term: (&dollar_identifier_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .dollar_identifier_token(&dollar_identifier_token_built)?;
        self.push(
            ASTType::DollarIdentifierToken(dollar_identifier_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn identifier_token(
        &mut self,
        _identifier_term: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let identifier_term = pop_item!(self, identifier_term, IdentifierTerm, context);
        let identifier_token_built = IdentifierToken {
            identifier_term: (&identifier_term)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
            comments: Box::new(comments),
        };
        self.user_grammar
            .identifier_token(&identifier_token_built)?;
        self.push(ASTType::IdentifierToken(identifier_token_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn start(&mut self, _start_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let start_token = pop_item!(self, start_token, StartToken, context);
        let start_built = Start {
            start_token: (&start_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.start(&start_built)?;
        self.push(ASTType::Start(start_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn string_literal(&mut self, _string_literal_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let string_literal_token =
            pop_item!(self, string_literal_token, StringLiteralToken, context);
        let string_literal_built = StringLiteral {
            string_literal_token: (&string_literal_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.string_literal(&string_literal_built)?;
        self.push(ASTType::StringLiteral(string_literal_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn exponent(&mut self, _exponent_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let exponent_token = pop_item!(self, exponent_token, ExponentToken, context);
        let exponent_built = Exponent {
            exponent_token: (&exponent_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.exponent(&exponent_built)?;
        self.push(ASTType::Exponent(exponent_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_point(&mut self, _fixed_point_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let fixed_point_token = pop_item!(self, fixed_point_token, FixedPointToken, context);
        let fixed_point_built = FixedPoint {
            fixed_point_token: (&fixed_point_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.fixed_point(&fixed_point_built)?;
        self.push(ASTType::FixedPoint(fixed_point_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn based(&mut self, _based_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let based_token = pop_item!(self, based_token, BasedToken, context);
        let based_built = Based {
            based_token: (&based_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.based(&based_built)?;
        self.push(ASTType::Based(based_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn base_less(&mut self, _base_less_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let base_less_token = pop_item!(self, base_less_token, BaseLessToken, context);
        let base_less_built = BaseLess {
            base_less_token: (&base_less_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.base_less(&base_less_built)?;
        self.push(ASTType::BaseLess(base_less_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn all_bit(&mut self, _all_bit_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let all_bit_token = pop_item!(self, all_bit_token, AllBitToken, context);
        let all_bit_built = AllBit {
            all_bit_token: (&all_bit_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.all_bit(&all_bit_built)?;
        self.push(ASTType::AllBit(all_bit_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assignment_operator(
        &mut self,
        _assignment_operator_token: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assignment_operator_token = pop_item!(
            self,
            assignment_operator_token,
            AssignmentOperatorToken,
            context
        );
        let assignment_operator_built = AssignmentOperator {
            assignment_operator_token: (&assignment_operator_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar
            .assignment_operator(&assignment_operator_built)?;
        self.push(
            ASTType::AssignmentOperator(assignment_operator_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator01(&mut self, _operator01_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator01_token = pop_item!(self, operator01_token, Operator01Token, context);
        let operator01_built = Operator01 {
            operator01_token: (&operator01_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator01(&operator01_built)?;
        self.push(ASTType::Operator01(operator01_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator02(&mut self, _operator02_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator02_token = pop_item!(self, operator02_token, Operator02Token, context);
        let operator02_built = Operator02 {
            operator02_token: (&operator02_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator02(&operator02_built)?;
        self.push(ASTType::Operator02(operator02_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator03(&mut self, _operator03_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator03_token = pop_item!(self, operator03_token, Operator03Token, context);
        let operator03_built = Operator03 {
            operator03_token: (&operator03_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator03(&operator03_built)?;
        self.push(ASTType::Operator03(operator03_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator04(&mut self, _operator04_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator04_token = pop_item!(self, operator04_token, Operator04Token, context);
        let operator04_built = Operator04 {
            operator04_token: (&operator04_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator04(&operator04_built)?;
        self.push(ASTType::Operator04(operator04_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator05(&mut self, _operator05_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator05_token = pop_item!(self, operator05_token, Operator05Token, context);
        let operator05_built = Operator05 {
            operator05_token: (&operator05_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator05(&operator05_built)?;
        self.push(ASTType::Operator05(operator05_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator06(&mut self, _operator06_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator06_token = pop_item!(self, operator06_token, Operator06Token, context);
        let operator06_built = Operator06 {
            operator06_token: (&operator06_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator06(&operator06_built)?;
        self.push(ASTType::Operator06(operator06_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator07(&mut self, _operator07_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator07_token = pop_item!(self, operator07_token, Operator07Token, context);
        let operator07_built = Operator07 {
            operator07_token: (&operator07_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator07(&operator07_built)?;
        self.push(ASTType::Operator07(operator07_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator08(&mut self, _operator08_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator08_token = pop_item!(self, operator08_token, Operator08Token, context);
        let operator08_built = Operator08 {
            operator08_token: (&operator08_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator08(&operator08_built)?;
        self.push(ASTType::Operator08(operator08_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator09(&mut self, _operator09_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator09_token = pop_item!(self, operator09_token, Operator09Token, context);
        let operator09_built = Operator09 {
            operator09_token: (&operator09_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator09(&operator09_built)?;
        self.push(ASTType::Operator09(operator09_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator10(&mut self, _operator10_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator10_token = pop_item!(self, operator10_token, Operator10Token, context);
        let operator10_built = Operator10 {
            operator10_token: (&operator10_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator10(&operator10_built)?;
        self.push(ASTType::Operator10(operator10_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn operator11(&mut self, _operator11_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator11_token = pop_item!(self, operator11_token, Operator11Token, context);
        let operator11_built = Operator11 {
            operator11_token: (&operator11_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.operator11(&operator11_built)?;
        self.push(ASTType::Operator11(operator11_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unary_operator(&mut self, _unary_operator_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unary_operator_token =
            pop_item!(self, unary_operator_token, UnaryOperatorToken, context);
        let unary_operator_built = UnaryOperator {
            unary_operator_token: (&unary_operator_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.unary_operator(&unary_operator_built)?;
        self.push(ASTType::UnaryOperator(unary_operator_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn back_quote(&mut self, _back_quote_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let back_quote_token = pop_item!(self, back_quote_token, BackQuoteToken, context);
        let back_quote_built = BackQuote {
            back_quote_token: (&back_quote_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.back_quote(&back_quote_built)?;
        self.push(ASTType::BackQuote(back_quote_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon(&mut self, _colon_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon_token = pop_item!(self, colon_token, ColonToken, context);
        let colon_built = Colon {
            colon_token: (&colon_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.colon(&colon_built)?;
        self.push(ASTType::Colon(colon_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_colon_l_angle(
        &mut self,
        _colon_colon_l_angle_token: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon_colon_l_angle_token = pop_item!(
            self,
            colon_colon_l_angle_token,
            ColonColonLAngleToken,
            context
        );
        let colon_colon_l_angle_built = ColonColonLAngle {
            colon_colon_l_angle_token: (&colon_colon_l_angle_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar
            .colon_colon_l_angle(&colon_colon_l_angle_built)?;
        self.push(
            ASTType::ColonColonLAngle(colon_colon_l_angle_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn colon_colon(&mut self, _colon_colon_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon_colon_token = pop_item!(self, colon_colon_token, ColonColonToken, context);
        let colon_colon_built = ColonColon {
            colon_colon_token: (&colon_colon_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.colon_colon(&colon_colon_built)?;
        self.push(ASTType::ColonColon(colon_colon_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn comma(&mut self, _comma_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma_token = pop_item!(self, comma_token, CommaToken, context);
        let comma_built = Comma {
            comma_token: (&comma_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.comma(&comma_built)?;
        self.push(ASTType::Comma(comma_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_dot(&mut self, _dot_dot_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_dot_token = pop_item!(self, dot_dot_token, DotDotToken, context);
        let dot_dot_built = DotDot {
            dot_dot_token: (&dot_dot_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.dot_dot(&dot_dot_built)?;
        self.push(ASTType::DotDot(dot_dot_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot_dot_equ(&mut self, _dot_dot_equ_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_dot_equ_token = pop_item!(self, dot_dot_equ_token, DotDotEquToken, context);
        let dot_dot_equ_built = DotDotEqu {
            dot_dot_equ_token: (&dot_dot_equ_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.dot_dot_equ(&dot_dot_equ_built)?;
        self.push(ASTType::DotDotEqu(dot_dot_equ_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dot(&mut self, _dot_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_token = pop_item!(self, dot_token, DotToken, context);
        let dot_built = Dot {
            dot_token: (&dot_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.dot(&dot_built)?;
        self.push(ASTType::Dot(dot_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn equ(&mut self, _equ_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let equ_token = pop_item!(self, equ_token, EquToken, context);
        let equ_built = Equ {
            equ_token: (&equ_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.equ(&equ_built)?;
        self.push(ASTType::Equ(equ_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hash(&mut self, _hash_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hash_token = pop_item!(self, hash_token, HashToken, context);
        let hash_built = Hash {
            hash_token: (&hash_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.hash(&hash_built)?;
        self.push(ASTType::Hash(hash_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn quote_l_brace(&mut self, _quote_l_brace_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let quote_l_brace_token = pop_item!(self, quote_l_brace_token, QuoteLBraceToken, context);
        let quote_l_brace_built = QuoteLBrace {
            quote_l_brace_token: ("e_l_brace_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.quote_l_brace("e_l_brace_built)?;
        self.push(ASTType::QuoteLBrace(quote_l_brace_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_angle(&mut self, _l_angle_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_angle_token = pop_item!(self, l_angle_token, LAngleToken, context);
        let l_angle_built = LAngle {
            l_angle_token: (&l_angle_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.l_angle(&l_angle_built)?;
        self.push(ASTType::LAngle(l_angle_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_brace(&mut self, _l_brace_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_brace_token = pop_item!(self, l_brace_token, LBraceToken, context);
        let l_brace_built = LBrace {
            l_brace_token: (&l_brace_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.l_brace(&l_brace_built)?;
        self.push(ASTType::LBrace(l_brace_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_bracket(&mut self, _l_bracket_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_bracket_token = pop_item!(self, l_bracket_token, LBracketToken, context);
        let l_bracket_built = LBracket {
            l_bracket_token: (&l_bracket_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.l_bracket(&l_bracket_built)?;
        self.push(ASTType::LBracket(l_bracket_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn l_paren(&mut self, _l_paren_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let l_paren_token = pop_item!(self, l_paren_token, LParenToken, context);
        let l_paren_built = LParen {
            l_paren_token: (&l_paren_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.l_paren(&l_paren_built)?;
        self.push(ASTType::LParen(l_paren_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn minus_colon(&mut self, _minus_colon_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let minus_colon_token = pop_item!(self, minus_colon_token, MinusColonToken, context);
        let minus_colon_built = MinusColon {
            minus_colon_token: (&minus_colon_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.minus_colon(&minus_colon_built)?;
        self.push(ASTType::MinusColon(minus_colon_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn minus_g_t(&mut self, _minus_g_t_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let minus_g_t_token = pop_item!(self, minus_g_t_token, MinusGTToken, context);
        let minus_g_t_built = MinusGT {
            minus_g_t_token: (&minus_g_t_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.minus_g_t(&minus_g_t_built)?;
        self.push(ASTType::MinusGT(minus_g_t_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn plus_colon(&mut self, _plus_colon_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let plus_colon_token = pop_item!(self, plus_colon_token, PlusColonToken, context);
        let plus_colon_built = PlusColon {
            plus_colon_token: (&plus_colon_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.plus_colon(&plus_colon_built)?;
        self.push(ASTType::PlusColon(plus_colon_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_angle(&mut self, _r_angle_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_angle_token = pop_item!(self, r_angle_token, RAngleToken, context);
        let r_angle_built = RAngle {
            r_angle_token: (&r_angle_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r_angle(&r_angle_built)?;
        self.push(ASTType::RAngle(r_angle_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_brace(&mut self, _r_brace_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace_token = pop_item!(self, r_brace_token, RBraceToken, context);
        let r_brace_built = RBrace {
            r_brace_token: (&r_brace_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r_brace(&r_brace_built)?;
        self.push(ASTType::RBrace(r_brace_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_bracket(&mut self, _r_bracket_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_bracket_token = pop_item!(self, r_bracket_token, RBracketToken, context);
        let r_bracket_built = RBracket {
            r_bracket_token: (&r_bracket_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r_bracket(&r_bracket_built)?;
        self.push(ASTType::RBracket(r_bracket_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r_paren(&mut self, _r_paren_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren_token = pop_item!(self, r_paren_token, RParenToken, context);
        let r_paren_built = RParen {
            r_paren_token: (&r_paren_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r_paren(&r_paren_built)?;
        self.push(ASTType::RParen(r_paren_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn semicolon(&mut self, _semicolon_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon_token = pop_item!(self, semicolon_token, SemicolonToken, context);
        let semicolon_built = Semicolon {
            semicolon_token: (&semicolon_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.semicolon(&semicolon_built)?;
        self.push(ASTType::Semicolon(semicolon_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn star(&mut self, _star_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let star_token = pop_item!(self, star_token, StarToken, context);
        let star_built = Star {
            star_token: (&star_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.star(&star_built)?;
        self.push(ASTType::Star(star_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_comb(&mut self, _always_comb_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_comb_token = pop_item!(self, always_comb_token, AlwaysCombToken, context);
        let always_comb_built = AlwaysComb {
            always_comb_token: (&always_comb_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.always_comb(&always_comb_built)?;
        self.push(ASTType::AlwaysComb(always_comb_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff(&mut self, _always_ff_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_ff_token = pop_item!(self, always_ff_token, AlwaysFfToken, context);
        let always_ff_built = AlwaysFf {
            always_ff_token: (&always_ff_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.always_ff(&always_ff_built)?;
        self.push(ASTType::AlwaysFf(always_ff_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#as(&mut self, _as_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let as_token = pop_item!(self, as_token, AsToken, context);
        let r#as_built = As {
            as_token: (&as_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#as(&r#as_built)?;
        self.push(ASTType::As(r#as_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assign(&mut self, _assign_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assign_token = pop_item!(self, assign_token, AssignToken, context);
        let assign_built = Assign {
            assign_token: (&assign_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.assign(&assign_built)?;
        self.push(ASTType::Assign(assign_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn bit(&mut self, _bit_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let bit_token = pop_item!(self, bit_token, BitToken, context);
        let bit_built = Bit {
            bit_token: (&bit_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.bit(&bit_built)?;
        self.push(ASTType::Bit(bit_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#break(&mut self, _break_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let break_token = pop_item!(self, break_token, BreakToken, context);
        let r#break_built = Break {
            break_token: (&break_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#break(&r#break_built)?;
        self.push(ASTType::Break(r#break_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case(&mut self, _case_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_token = pop_item!(self, case_token, CaseToken, context);
        let case_built = Case {
            case_token: (&case_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.case(&case_built)?;
        self.push(ASTType::Case(case_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock(&mut self, _clock_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_token = pop_item!(self, clock_token, ClockToken, context);
        let clock_built = Clock {
            clock_token: (&clock_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.clock(&clock_built)?;
        self.push(ASTType::Clock(clock_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_posedge(&mut self, _clock_posedge_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_posedge_token = pop_item!(self, clock_posedge_token, ClockPosedgeToken, context);
        let clock_posedge_built = ClockPosedge {
            clock_posedge_token: (&clock_posedge_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.clock_posedge(&clock_posedge_built)?;
        self.push(ASTType::ClockPosedge(clock_posedge_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_negedge(&mut self, _clock_negedge_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_negedge_token = pop_item!(self, clock_negedge_token, ClockNegedgeToken, context);
        let clock_negedge_built = ClockNegedge {
            clock_negedge_token: (&clock_negedge_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.clock_negedge(&clock_negedge_built)?;
        self.push(ASTType::ClockNegedge(clock_negedge_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#const(&mut self, _const_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let const_token = pop_item!(self, const_token, ConstToken, context);
        let r#const_built = Const {
            const_token: (&const_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#const(&r#const_built)?;
        self.push(ASTType::Const(r#const_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn defaul(&mut self, _default_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let default_token = pop_item!(self, default_token, DefaultToken, context);
        let defaul_built = Defaul {
            default_token: (&default_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.defaul(&defaul_built)?;
        self.push(ASTType::Defaul(defaul_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#else(&mut self, _else_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let else_token = pop_item!(self, else_token, ElseToken, context);
        let r#else_built = Else {
            else_token: (&else_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#else(&r#else_built)?;
        self.push(ASTType::Else(r#else_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed(&mut self, _embed_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_token = pop_item!(self, embed_token, EmbedToken, context);
        let embed_built = Embed {
            embed_token: (&embed_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.embed(&embed_built)?;
        self.push(ASTType::Embed(embed_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#enum(&mut self, _enum_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_token = pop_item!(self, enum_token, EnumToken, context);
        let r#enum_built = Enum {
            enum_token: (&enum_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#enum(&r#enum_built)?;
        self.push(ASTType::Enum(r#enum_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export(&mut self, _export_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let export_token = pop_item!(self, export_token, ExportToken, context);
        let export_built = Export {
            export_token: (&export_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.export(&export_built)?;
        self.push(ASTType::Export(export_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn f32(&mut self, _f32_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f32_token = pop_item!(self, f32_token, F32Token, context);
        let f32_built = F32 {
            f32_token: (&f32_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.f32(&f32_built)?;
        self.push(ASTType::F32(f32_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn f64(&mut self, _f64_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f64_token = pop_item!(self, f64_token, F64Token, context);
        let f64_built = F64 {
            f64_token: (&f64_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.f64(&f64_built)?;
        self.push(ASTType::F64(f64_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#final(&mut self, _final_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let final_token = pop_item!(self, final_token, FinalToken, context);
        let r#final_built = Final {
            final_token: (&final_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#final(&r#final_built)?;
        self.push(ASTType::Final(r#final_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#for(&mut self, _for_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let for_token = pop_item!(self, for_token, ForToken, context);
        let r#for_built = For {
            for_token: (&for_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#for(&r#for_built)?;
        self.push(ASTType::For(r#for_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function(&mut self, _function_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let function_token = pop_item!(self, function_token, FunctionToken, context);
        let function_built = Function {
            function_token: (&function_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.function(&function_built)?;
        self.push(ASTType::Function(function_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn i32(&mut self, _i32_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i32_token = pop_item!(self, i32_token, I32Token, context);
        let i32_built = I32 {
            i32_token: (&i32_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.i32(&i32_built)?;
        self.push(ASTType::I32(i32_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn i64(&mut self, _i64_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i64_token = pop_item!(self, i64_token, I64Token, context);
        let i64_built = I64 {
            i64_token: (&i64_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.i64(&i64_built)?;
        self.push(ASTType::I64(i64_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#if(&mut self, _if_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_token = pop_item!(self, if_token, IfToken, context);
        let r#if_built = If {
            if_token: (&if_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#if(&r#if_built)?;
        self.push(ASTType::If(r#if_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset(&mut self, _if_reset_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_reset_token = pop_item!(self, if_reset_token, IfResetToken, context);
        let if_reset_built = IfReset {
            if_reset_token: (&if_reset_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.if_reset(&if_reset_built)?;
        self.push(ASTType::IfReset(if_reset_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn import(&mut self, _import_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let import_token = pop_item!(self, import_token, ImportToken, context);
        let import_built = Import {
            import_token: (&import_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.import(&import_built)?;
        self.push(ASTType::Import(import_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#in(&mut self, _in_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let in_token = pop_item!(self, in_token, InToken, context);
        let r#in_built = In {
            in_token: (&in_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#in(&r#in_built)?;
        self.push(ASTType::In(r#in_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn include(&mut self, _include_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let include_token = pop_item!(self, include_token, IncludeToken, context);
        let include_built = Include {
            include_token: (&include_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.include(&include_built)?;
        self.push(ASTType::Include(include_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn initial(&mut self, _initial_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let initial_token = pop_item!(self, initial_token, InitialToken, context);
        let initial_built = Initial {
            initial_token: (&initial_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.initial(&initial_built)?;
        self.push(ASTType::Initial(initial_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inout(&mut self, _inout_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inout_token = pop_item!(self, inout_token, InoutToken, context);
        let inout_built = Inout {
            inout_token: (&inout_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.inout(&inout_built)?;
        self.push(ASTType::Inout(inout_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn input(&mut self, _input_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let input_token = pop_item!(self, input_token, InputToken, context);
        let input_built = Input {
            input_token: (&input_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.input(&input_built)?;
        self.push(ASTType::Input(input_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inside(&mut self, _inside_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inside_token = pop_item!(self, inside_token, InsideToken, context);
        let inside_built = Inside {
            inside_token: (&inside_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.inside(&inside_built)?;
        self.push(ASTType::Inside(inside_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst(&mut self, _inst_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_token = pop_item!(self, inst_token, InstToken, context);
        let inst_built = Inst {
            inst_token: (&inst_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.inst(&inst_built)?;
        self.push(ASTType::Inst(inst_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface(&mut self, _interface_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_token = pop_item!(self, interface_token, InterfaceToken, context);
        let interface_built = Interface {
            interface_token: (&interface_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.interface(&interface_built)?;
        self.push(ASTType::Interface(interface_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#let(&mut self, _let_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let let_token = pop_item!(self, let_token, LetToken, context);
        let r#let_built = Let {
            let_token: (&let_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#let(&r#let_built)?;
        self.push(ASTType::Let(r#let_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn logic(&mut self, _logic_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let logic_token = pop_item!(self, logic_token, LogicToken, context);
        let logic_built = Logic {
            logic_token: (&logic_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.logic(&logic_built)?;
        self.push(ASTType::Logic(logic_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn lsb(&mut self, _lsb_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let lsb_token = pop_item!(self, lsb_token, LsbToken, context);
        let lsb_built = Lsb {
            lsb_token: (&lsb_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.lsb(&lsb_built)?;
        self.push(ASTType::Lsb(lsb_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport(&mut self, _modport_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_token = pop_item!(self, modport_token, ModportToken, context);
        let modport_built = Modport {
            modport_token: (&modport_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.modport(&modport_built)?;
        self.push(ASTType::Modport(modport_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module(&mut self, _module_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_token = pop_item!(self, module_token, ModuleToken, context);
        let module_built = Module {
            module_token: (&module_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.module(&module_built)?;
        self.push(ASTType::Module(module_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn msb(&mut self, _msb_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let msb_token = pop_item!(self, msb_token, MsbToken, context);
        let msb_built = Msb {
            msb_token: (&msb_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.msb(&msb_built)?;
        self.push(ASTType::Msb(msb_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn output(&mut self, _output_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let output_token = pop_item!(self, output_token, OutputToken, context);
        let output_built = Output {
            output_token: (&output_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.output(&output_built)?;
        self.push(ASTType::Output(output_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn outside(&mut self, _outside_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let outside_token = pop_item!(self, outside_token, OutsideToken, context);
        let outside_built = Outside {
            outside_token: (&outside_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.outside(&outside_built)?;
        self.push(ASTType::Outside(outside_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package(&mut self, _package_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_token = pop_item!(self, package_token, PackageToken, context);
        let package_built = Package {
            package_token: (&package_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.package(&package_built)?;
        self.push(ASTType::Package(package_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn param(&mut self, _param_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let param_token = pop_item!(self, param_token, ParamToken, context);
        let param_built = Param {
            param_token: (¶m_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.param(¶m_built)?;
        self.push(ASTType::Param(param_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto(&mut self, _proto_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let proto_token = pop_item!(self, proto_token, ProtoToken, context);
        let proto_built = Proto {
            proto_token: (&proto_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.proto(&proto_built)?;
        self.push(ASTType::Proto(proto_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#pub(&mut self, _pub_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let pub_token = pop_item!(self, pub_token, PubToken, context);
        let r#pub_built = Pub {
            pub_token: (&pub_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#pub(&r#pub_built)?;
        self.push(ASTType::Pub(r#pub_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#ref(&mut self, _ref_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let ref_token = pop_item!(self, ref_token, RefToken, context);
        let r#ref_built = Ref {
            ref_token: (&ref_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#ref(&r#ref_built)?;
        self.push(ASTType::Ref(r#ref_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn repeat(&mut self, _repeat_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let repeat_token = pop_item!(self, repeat_token, RepeatToken, context);
        let repeat_built = Repeat {
            repeat_token: (&repeat_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.repeat(&repeat_built)?;
        self.push(ASTType::Repeat(repeat_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset(&mut self, _reset_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_token = pop_item!(self, reset_token, ResetToken, context);
        let reset_built = Reset {
            reset_token: (&reset_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.reset(&reset_built)?;
        self.push(ASTType::Reset(reset_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_async_high(&mut self, _reset_async_high_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_high_token =
            pop_item!(self, reset_async_high_token, ResetAsyncHighToken, context);
        let reset_async_high_built = ResetAsyncHigh {
            reset_async_high_token: (&reset_async_high_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar
            .reset_async_high(&reset_async_high_built)?;
        self.push(ASTType::ResetAsyncHigh(reset_async_high_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_async_low(&mut self, _reset_async_low_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_low_token =
            pop_item!(self, reset_async_low_token, ResetAsyncLowToken, context);
        let reset_async_low_built = ResetAsyncLow {
            reset_async_low_token: (&reset_async_low_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.reset_async_low(&reset_async_low_built)?;
        self.push(ASTType::ResetAsyncLow(reset_async_low_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_sync_high(&mut self, _reset_sync_high_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_high_token =
            pop_item!(self, reset_sync_high_token, ResetSyncHighToken, context);
        let reset_sync_high_built = ResetSyncHigh {
            reset_sync_high_token: (&reset_sync_high_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.reset_sync_high(&reset_sync_high_built)?;
        self.push(ASTType::ResetSyncHigh(reset_sync_high_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn reset_sync_low(&mut self, _reset_sync_low_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_low_token =
            pop_item!(self, reset_sync_low_token, ResetSyncLowToken, context);
        let reset_sync_low_built = ResetSyncLow {
            reset_sync_low_token: (&reset_sync_low_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.reset_sync_low(&reset_sync_low_built)?;
        self.push(ASTType::ResetSyncLow(reset_sync_low_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#return(&mut self, _return_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let return_token = pop_item!(self, return_token, ReturnToken, context);
        let r#return_built = Return {
            return_token: (&return_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#return(&r#return_built)?;
        self.push(ASTType::Return(r#return_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn signed(&mut self, _signed_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let signed_token = pop_item!(self, signed_token, SignedToken, context);
        let signed_built = Signed {
            signed_token: (&signed_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.signed(&signed_built)?;
        self.push(ASTType::Signed(signed_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn step(&mut self, _step_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let step_token = pop_item!(self, step_token, StepToken, context);
        let step_built = Step {
            step_token: (&step_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.step(&step_built)?;
        self.push(ASTType::Step(step_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn strin(&mut self, _string_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let string_token = pop_item!(self, string_token, StringToken, context);
        let strin_built = Strin {
            string_token: (&string_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.strin(&strin_built)?;
        self.push(ASTType::Strin(strin_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#struct(&mut self, _struct_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_token = pop_item!(self, struct_token, StructToken, context);
        let r#struct_built = Struct {
            struct_token: (&struct_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#struct(&r#struct_built)?;
        self.push(ASTType::Struct(r#struct_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch(&mut self, _switch_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_token = pop_item!(self, switch_token, SwitchToken, context);
        let switch_built = Switch {
            switch_token: (&switch_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.switch(&switch_built)?;
        self.push(ASTType::Switch(switch_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn tri(&mut self, _tri_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let tri_token = pop_item!(self, tri_token, TriToken, context);
        let tri_built = Tri {
            tri_token: (&tri_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.tri(&tri_built)?;
        self.push(ASTType::Tri(tri_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#type(&mut self, _type_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let type_token = pop_item!(self, type_token, TypeToken, context);
        let r#type_built = Type {
            type_token: (&type_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#type(&r#type_built)?;
        self.push(ASTType::Type(r#type_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn u32(&mut self, _u32_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u32_token = pop_item!(self, u32_token, U32Token, context);
        let u32_built = U32 {
            u32_token: (&u32_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.u32(&u32_built)?;
        self.push(ASTType::U32(u32_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn u64(&mut self, _u64_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u64_token = pop_item!(self, u64_token, U64Token, context);
        let u64_built = U64 {
            u64_token: (&u64_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.u64(&u64_built)?;
        self.push(ASTType::U64(u64_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#union(&mut self, _union_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let union_token = pop_item!(self, union_token, UnionToken, context);
        let r#union_built = Union {
            union_token: (&union_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#union(&r#union_built)?;
        self.push(ASTType::Union(r#union_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn r#unsafe(&mut self, _unsafe_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unsafe_token = pop_item!(self, unsafe_token, UnsafeToken, context);
        let r#unsafe_built = Unsafe {
            unsafe_token: (&unsafe_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.r#unsafe(&r#unsafe_built)?;
        self.push(ASTType::Unsafe(r#unsafe_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn var(&mut self, _var_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let var_token = pop_item!(self, var_token, VarToken, context);
        let var_built = Var {
            var_token: (&var_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.var(&var_built)?;
        self.push(ASTType::Var(var_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn dollar_identifier(&mut self, _dollar_identifier_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dollar_identifier_token = pop_item!(
            self,
            dollar_identifier_token,
            DollarIdentifierToken,
            context
        );
        let dollar_identifier_built = DollarIdentifier {
            dollar_identifier_token: (&dollar_identifier_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar
            .dollar_identifier(&dollar_identifier_built)?;
        self.push(ASTType::DollarIdentifier(dollar_identifier_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn identifier(&mut self, _identifier_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let identifier_token = pop_item!(self, identifier_token, IdentifierToken, context);
        let identifier_built = Identifier {
            identifier_token: (&identifier_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.identifier(&identifier_built)?;
        self.push(ASTType::Identifier(identifier_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn number_0(&mut self, _integral_number: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let integral_number = pop_item!(self, integral_number, IntegralNumber, context);
        let number_0_built = NumberIntegralNumber {
            integral_number: Box::new(integral_number),
        };
        let number_0_built = Number::IntegralNumber(number_0_built);
        self.user_grammar.number(&number_0_built)?;
        self.push(ASTType::Number(number_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn number_1(&mut self, _real_number: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let real_number = pop_item!(self, real_number, RealNumber, context);
        let number_1_built = NumberRealNumber {
            real_number: Box::new(real_number),
        };
        let number_1_built = Number::RealNumber(number_1_built);
        self.user_grammar.number(&number_1_built)?;
        self.push(ASTType::Number(number_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn integral_number_0(&mut self, _based: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let based = pop_item!(self, based, Based, context);
        let integral_number_0_built = IntegralNumberBased {
            based: Box::new(based),
        };
        let integral_number_0_built = IntegralNumber::Based(integral_number_0_built);
        self.user_grammar
            .integral_number(&integral_number_0_built)?;
        self.push(ASTType::IntegralNumber(integral_number_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn integral_number_1(&mut self, _base_less: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let base_less = pop_item!(self, base_less, BaseLess, context);
        let integral_number_1_built = IntegralNumberBaseLess {
            base_less: Box::new(base_less),
        };
        let integral_number_1_built = IntegralNumber::BaseLess(integral_number_1_built);
        self.user_grammar
            .integral_number(&integral_number_1_built)?;
        self.push(ASTType::IntegralNumber(integral_number_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn integral_number_2(&mut self, _all_bit: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let all_bit = pop_item!(self, all_bit, AllBit, context);
        let integral_number_2_built = IntegralNumberAllBit {
            all_bit: Box::new(all_bit),
        };
        let integral_number_2_built = IntegralNumber::AllBit(integral_number_2_built);
        self.user_grammar
            .integral_number(&integral_number_2_built)?;
        self.push(ASTType::IntegralNumber(integral_number_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn real_number_0(&mut self, _fixed_point: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let fixed_point = pop_item!(self, fixed_point, FixedPoint, context);
        let real_number_0_built = RealNumberFixedPoint {
            fixed_point: Box::new(fixed_point),
        };
        let real_number_0_built = RealNumber::FixedPoint(real_number_0_built);
        self.user_grammar.real_number(&real_number_0_built)?;
        self.push(ASTType::RealNumber(real_number_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn real_number_1(&mut self, _exponent: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let exponent = pop_item!(self, exponent, Exponent, context);
        let real_number_1_built = RealNumberExponent {
            exponent: Box::new(exponent),
        };
        let real_number_1_built = RealNumber::Exponent(real_number_1_built);
        self.user_grammar.real_number(&real_number_1_built)?;
        self.push(ASTType::RealNumber(real_number_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _hierarchical_identifier_list: &ParseTreeType<'t>,
        _hierarchical_identifier_list0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hierarchical_identifier_list0 = pop_and_reverse_item!(
            self,
            hierarchical_identifier_list0,
            HierarchicalIdentifierList0,
            context
        );
        let hierarchical_identifier_list = pop_and_reverse_item!(
            self,
            hierarchical_identifier_list,
            HierarchicalIdentifierList,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let hierarchical_identifier_built = HierarchicalIdentifier {
            identifier: Box::new(identifier),
            hierarchical_identifier_list,
            hierarchical_identifier_list0,
        };
        self.user_grammar
            .hierarchical_identifier(&hierarchical_identifier_built)?;
        self.push(
            ASTType::HierarchicalIdentifier(hierarchical_identifier_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier_list0_0(
        &mut self,
        _dot: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _hierarchical_identifier_list0_list: &ParseTreeType<'t>,
        _hierarchical_identifier_list0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut hierarchical_identifier_list0 = pop_item!(
            self,
            hierarchical_identifier_list0,
            HierarchicalIdentifierList0,
            context
        );
        let hierarchical_identifier_list0_list = pop_and_reverse_item!(
            self,
            hierarchical_identifier_list0_list,
            HierarchicalIdentifierList0List,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let dot = pop_item!(self, dot, Dot, context);
        let hierarchical_identifier_list0_0_built = HierarchicalIdentifierList0 {
            hierarchical_identifier_list0_list,
            identifier: Box::new(identifier),
            dot: Box::new(dot),
        };
        hierarchical_identifier_list0.push(hierarchical_identifier_list0_0_built);
        self.push(
            ASTType::HierarchicalIdentifierList0(hierarchical_identifier_list0),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier_list0_list_0(
        &mut self,
        _select: &ParseTreeType<'t>,
        _hierarchical_identifier_list0_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut hierarchical_identifier_list0_list = pop_item!(
            self,
            hierarchical_identifier_list0_list,
            HierarchicalIdentifierList0List,
            context
        );
        let select = pop_item!(self, select, Select, context);
        let hierarchical_identifier_list0_list_0_built = HierarchicalIdentifierList0List {
            select: Box::new(select),
        };
        hierarchical_identifier_list0_list.push(hierarchical_identifier_list0_list_0_built);
        self.push(
            ASTType::HierarchicalIdentifierList0List(hierarchical_identifier_list0_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier_list0_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hierarchical_identifier_list0_list_1_built = Vec::new();
        self.push(
            ASTType::HierarchicalIdentifierList0List(hierarchical_identifier_list0_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier_list0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hierarchical_identifier_list0_1_built = Vec::new();
        self.push(
            ASTType::HierarchicalIdentifierList0(hierarchical_identifier_list0_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier_list_0(
        &mut self,
        _select: &ParseTreeType<'t>,
        _hierarchical_identifier_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut hierarchical_identifier_list = pop_item!(
            self,
            hierarchical_identifier_list,
            HierarchicalIdentifierList,
            context
        );
        let select = pop_item!(self, select, Select, context);
        let hierarchical_identifier_list_0_built = HierarchicalIdentifierList {
            select: Box::new(select),
        };
        hierarchical_identifier_list.push(hierarchical_identifier_list_0_built);
        self.push(
            ASTType::HierarchicalIdentifierList(hierarchical_identifier_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn hierarchical_identifier_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hierarchical_identifier_list_1_built = Vec::new();
        self.push(
            ASTType::HierarchicalIdentifierList(hierarchical_identifier_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier(
        &mut self,
        _scoped_identifier_group: &ParseTreeType<'t>,
        _scoped_identifier_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier_list =
            pop_and_reverse_item!(self, scoped_identifier_list, ScopedIdentifierList, context);
        let scoped_identifier_group = pop_item!(
            self,
            scoped_identifier_group,
            ScopedIdentifierGroup,
            context
        );
        let scoped_identifier_built = ScopedIdentifier {
            scoped_identifier_group: Box::new(scoped_identifier_group),
            scoped_identifier_list,
        };
        self.user_grammar
            .scoped_identifier(&scoped_identifier_built)?;
        self.push(ASTType::ScopedIdentifier(scoped_identifier_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_group_0(&mut self, _dollar_identifier: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dollar_identifier = pop_item!(self, dollar_identifier, DollarIdentifier, context);
        let scoped_identifier_group_0_built = ScopedIdentifierGroupDollarIdentifier {
            dollar_identifier: Box::new(dollar_identifier),
        };
        let scoped_identifier_group_0_built =
            ScopedIdentifierGroup::DollarIdentifier(scoped_identifier_group_0_built);
        self.push(
            ASTType::ScopedIdentifierGroup(scoped_identifier_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_group_1(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _scoped_identifier_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier_opt =
            pop_item!(self, scoped_identifier_opt, ScopedIdentifierOpt, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let scoped_identifier_group_1_built = ScopedIdentifierGroupIdentifierScopedIdentifierOpt {
            identifier: Box::new(identifier),
            scoped_identifier_opt,
        };
        let scoped_identifier_group_1_built =
            ScopedIdentifierGroup::IdentifierScopedIdentifierOpt(scoped_identifier_group_1_built);
        self.push(
            ASTType::ScopedIdentifierGroup(scoped_identifier_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_list_0(
        &mut self,
        _colon_colon: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _scoped_identifier_opt0: &ParseTreeType<'t>,
        _scoped_identifier_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut scoped_identifier_list =
            pop_item!(self, scoped_identifier_list, ScopedIdentifierList, context);
        let scoped_identifier_opt0 =
            pop_item!(self, scoped_identifier_opt0, ScopedIdentifierOpt0, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let colon_colon = pop_item!(self, colon_colon, ColonColon, context);
        let scoped_identifier_list_0_built = ScopedIdentifierList {
            scoped_identifier_opt0,
            identifier: Box::new(identifier),
            colon_colon: Box::new(colon_colon),
        };
        scoped_identifier_list.push(scoped_identifier_list_0_built);
        self.push(
            ASTType::ScopedIdentifierList(scoped_identifier_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier_list_1_built = Vec::new();
        self.push(
            ASTType::ScopedIdentifierList(scoped_identifier_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_opt0_0(
        &mut self,
        _with_generic_argument: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_argument =
            pop_item!(self, with_generic_argument, WithGenericArgument, context);
        let scoped_identifier_opt0_0_built = ScopedIdentifierOpt0 {
            with_generic_argument: Box::new(with_generic_argument),
        };
        self.push(
            ASTType::ScopedIdentifierOpt0(Some(scoped_identifier_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ScopedIdentifierOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_opt_0(
        &mut self,
        _with_generic_argument: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_argument =
            pop_item!(self, with_generic_argument, WithGenericArgument, context);
        let scoped_identifier_opt_0_built = ScopedIdentifierOpt {
            with_generic_argument: Box::new(with_generic_argument),
        };
        self.push(
            ASTType::ScopedIdentifierOpt(Some(scoped_identifier_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scoped_identifier_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ScopedIdentifierOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier(
        &mut self,
        _scoped_identifier: &ParseTreeType<'t>,
        _expression_identifier_opt: &ParseTreeType<'t>,
        _expression_identifier_list: &ParseTreeType<'t>,
        _expression_identifier_list0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression_identifier_list0 = pop_and_reverse_item!(
            self,
            expression_identifier_list0,
            ExpressionIdentifierList0,
            context
        );
        let expression_identifier_list = pop_and_reverse_item!(
            self,
            expression_identifier_list,
            ExpressionIdentifierList,
            context
        );
        let expression_identifier_opt = pop_item!(
            self,
            expression_identifier_opt,
            ExpressionIdentifierOpt,
            context
        );
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let expression_identifier_built = ExpressionIdentifier {
            scoped_identifier: Box::new(scoped_identifier),
            expression_identifier_opt,
            expression_identifier_list,
            expression_identifier_list0,
        };
        self.user_grammar
            .expression_identifier(&expression_identifier_built)?;
        self.push(
            ASTType::ExpressionIdentifier(expression_identifier_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_list0_0(
        &mut self,
        _dot: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _expression_identifier_list0_list: &ParseTreeType<'t>,
        _expression_identifier_list0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression_identifier_list0 = pop_item!(
            self,
            expression_identifier_list0,
            ExpressionIdentifierList0,
            context
        );
        let expression_identifier_list0_list = pop_and_reverse_item!(
            self,
            expression_identifier_list0_list,
            ExpressionIdentifierList0List,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let dot = pop_item!(self, dot, Dot, context);
        let expression_identifier_list0_0_built = ExpressionIdentifierList0 {
            expression_identifier_list0_list,
            identifier: Box::new(identifier),
            dot: Box::new(dot),
        };
        expression_identifier_list0.push(expression_identifier_list0_0_built);
        self.push(
            ASTType::ExpressionIdentifierList0(expression_identifier_list0),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_list0_list_0(
        &mut self,
        _select: &ParseTreeType<'t>,
        _expression_identifier_list0_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression_identifier_list0_list = pop_item!(
            self,
            expression_identifier_list0_list,
            ExpressionIdentifierList0List,
            context
        );
        let select = pop_item!(self, select, Select, context);
        let expression_identifier_list0_list_0_built = ExpressionIdentifierList0List {
            select: Box::new(select),
        };
        expression_identifier_list0_list.push(expression_identifier_list0_list_0_built);
        self.push(
            ASTType::ExpressionIdentifierList0List(expression_identifier_list0_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_list0_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression_identifier_list0_list_1_built = Vec::new();
        self.push(
            ASTType::ExpressionIdentifierList0List(expression_identifier_list0_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_list0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression_identifier_list0_1_built = Vec::new();
        self.push(
            ASTType::ExpressionIdentifierList0(expression_identifier_list0_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_list_0(
        &mut self,
        _select: &ParseTreeType<'t>,
        _expression_identifier_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression_identifier_list = pop_item!(
            self,
            expression_identifier_list,
            ExpressionIdentifierList,
            context
        );
        let select = pop_item!(self, select, Select, context);
        let expression_identifier_list_0_built = ExpressionIdentifierList {
            select: Box::new(select),
        };
        expression_identifier_list.push(expression_identifier_list_0_built);
        self.push(
            ASTType::ExpressionIdentifierList(expression_identifier_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression_identifier_list_1_built = Vec::new();
        self.push(
            ASTType::ExpressionIdentifierList(expression_identifier_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_opt_0(&mut self, _width: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let width = pop_item!(self, width, Width, context);
        let expression_identifier_opt_0_built = ExpressionIdentifierOpt {
            width: Box::new(width),
        };
        self.push(
            ASTType::ExpressionIdentifierOpt(Some(expression_identifier_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_identifier_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ExpressionIdentifierOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression(
        &mut self,
        _expression01: &ParseTreeType<'t>,
        _expression_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression_list = pop_and_reverse_item!(self, expression_list, ExpressionList, context);
        let expression01 = pop_item!(self, expression01, Expression01, context);
        let expression_built = Expression {
            expression01: Box::new(expression01),
            expression_list,
        };
        self.user_grammar.expression(&expression_built)?;
        self.push(ASTType::Expression(expression_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_list_0(
        &mut self,
        _operator01: &ParseTreeType<'t>,
        _expression01: &ParseTreeType<'t>,
        _expression_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression_list = pop_item!(self, expression_list, ExpressionList, context);
        let expression01 = pop_item!(self, expression01, Expression01, context);
        let operator01 = pop_item!(self, operator01, Operator01, context);
        let expression_list_0_built = ExpressionList {
            expression01: Box::new(expression01),
            operator01: Box::new(operator01),
        };
        expression_list.push(expression_list_0_built);
        self.push(ASTType::ExpressionList(expression_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression_list_1_built = Vec::new();
        self.push(ASTType::ExpressionList(expression_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression01(
        &mut self,
        _expression02: &ParseTreeType<'t>,
        _expression01_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression01_list =
            pop_and_reverse_item!(self, expression01_list, Expression01List, context);
        let expression02 = pop_item!(self, expression02, Expression02, context);
        let expression01_built = Expression01 {
            expression02: Box::new(expression02),
            expression01_list,
        };
        self.user_grammar.expression01(&expression01_built)?;
        self.push(ASTType::Expression01(expression01_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression01_list_0(
        &mut self,
        _operator02: &ParseTreeType<'t>,
        _expression02: &ParseTreeType<'t>,
        _expression01_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression01_list = pop_item!(self, expression01_list, Expression01List, context);
        let expression02 = pop_item!(self, expression02, Expression02, context);
        let operator02 = pop_item!(self, operator02, Operator02, context);
        let expression01_list_0_built = Expression01List {
            expression02: Box::new(expression02),
            operator02: Box::new(operator02),
        };
        expression01_list.push(expression01_list_0_built);
        self.push(ASTType::Expression01List(expression01_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression01_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression01_list_1_built = Vec::new();
        self.push(
            ASTType::Expression01List(expression01_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression02(
        &mut self,
        _expression03: &ParseTreeType<'t>,
        _expression02_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression02_list =
            pop_and_reverse_item!(self, expression02_list, Expression02List, context);
        let expression03 = pop_item!(self, expression03, Expression03, context);
        let expression02_built = Expression02 {
            expression03: Box::new(expression03),
            expression02_list,
        };
        self.user_grammar.expression02(&expression02_built)?;
        self.push(ASTType::Expression02(expression02_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression02_list_0(
        &mut self,
        _operator03: &ParseTreeType<'t>,
        _expression03: &ParseTreeType<'t>,
        _expression02_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression02_list = pop_item!(self, expression02_list, Expression02List, context);
        let expression03 = pop_item!(self, expression03, Expression03, context);
        let operator03 = pop_item!(self, operator03, Operator03, context);
        let expression02_list_0_built = Expression02List {
            expression03: Box::new(expression03),
            operator03: Box::new(operator03),
        };
        expression02_list.push(expression02_list_0_built);
        self.push(ASTType::Expression02List(expression02_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression02_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression02_list_1_built = Vec::new();
        self.push(
            ASTType::Expression02List(expression02_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression03(
        &mut self,
        _expression04: &ParseTreeType<'t>,
        _expression03_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression03_list =
            pop_and_reverse_item!(self, expression03_list, Expression03List, context);
        let expression04 = pop_item!(self, expression04, Expression04, context);
        let expression03_built = Expression03 {
            expression04: Box::new(expression04),
            expression03_list,
        };
        self.user_grammar.expression03(&expression03_built)?;
        self.push(ASTType::Expression03(expression03_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression03_list_0(
        &mut self,
        _operator04: &ParseTreeType<'t>,
        _expression04: &ParseTreeType<'t>,
        _expression03_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression03_list = pop_item!(self, expression03_list, Expression03List, context);
        let expression04 = pop_item!(self, expression04, Expression04, context);
        let operator04 = pop_item!(self, operator04, Operator04, context);
        let expression03_list_0_built = Expression03List {
            expression04: Box::new(expression04),
            operator04: Box::new(operator04),
        };
        expression03_list.push(expression03_list_0_built);
        self.push(ASTType::Expression03List(expression03_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression03_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression03_list_1_built = Vec::new();
        self.push(
            ASTType::Expression03List(expression03_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression04(
        &mut self,
        _expression05: &ParseTreeType<'t>,
        _expression04_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression04_list =
            pop_and_reverse_item!(self, expression04_list, Expression04List, context);
        let expression05 = pop_item!(self, expression05, Expression05, context);
        let expression04_built = Expression04 {
            expression05: Box::new(expression05),
            expression04_list,
        };
        self.user_grammar.expression04(&expression04_built)?;
        self.push(ASTType::Expression04(expression04_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression04_list_0(
        &mut self,
        _operator05: &ParseTreeType<'t>,
        _expression05: &ParseTreeType<'t>,
        _expression04_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression04_list = pop_item!(self, expression04_list, Expression04List, context);
        let expression05 = pop_item!(self, expression05, Expression05, context);
        let operator05 = pop_item!(self, operator05, Operator05, context);
        let expression04_list_0_built = Expression04List {
            expression05: Box::new(expression05),
            operator05: Box::new(operator05),
        };
        expression04_list.push(expression04_list_0_built);
        self.push(ASTType::Expression04List(expression04_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression04_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression04_list_1_built = Vec::new();
        self.push(
            ASTType::Expression04List(expression04_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression05(
        &mut self,
        _expression06: &ParseTreeType<'t>,
        _expression05_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression05_list =
            pop_and_reverse_item!(self, expression05_list, Expression05List, context);
        let expression06 = pop_item!(self, expression06, Expression06, context);
        let expression05_built = Expression05 {
            expression06: Box::new(expression06),
            expression05_list,
        };
        self.user_grammar.expression05(&expression05_built)?;
        self.push(ASTType::Expression05(expression05_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression05_list_0(
        &mut self,
        _operator06: &ParseTreeType<'t>,
        _expression06: &ParseTreeType<'t>,
        _expression05_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression05_list = pop_item!(self, expression05_list, Expression05List, context);
        let expression06 = pop_item!(self, expression06, Expression06, context);
        let operator06 = pop_item!(self, operator06, Operator06, context);
        let expression05_list_0_built = Expression05List {
            expression06: Box::new(expression06),
            operator06: Box::new(operator06),
        };
        expression05_list.push(expression05_list_0_built);
        self.push(ASTType::Expression05List(expression05_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression05_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression05_list_1_built = Vec::new();
        self.push(
            ASTType::Expression05List(expression05_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression06(
        &mut self,
        _expression07: &ParseTreeType<'t>,
        _expression06_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression06_list =
            pop_and_reverse_item!(self, expression06_list, Expression06List, context);
        let expression07 = pop_item!(self, expression07, Expression07, context);
        let expression06_built = Expression06 {
            expression07: Box::new(expression07),
            expression06_list,
        };
        self.user_grammar.expression06(&expression06_built)?;
        self.push(ASTType::Expression06(expression06_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression06_list_0(
        &mut self,
        _operator07: &ParseTreeType<'t>,
        _expression07: &ParseTreeType<'t>,
        _expression06_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression06_list = pop_item!(self, expression06_list, Expression06List, context);
        let expression07 = pop_item!(self, expression07, Expression07, context);
        let operator07 = pop_item!(self, operator07, Operator07, context);
        let expression06_list_0_built = Expression06List {
            expression07: Box::new(expression07),
            operator07: Box::new(operator07),
        };
        expression06_list.push(expression06_list_0_built);
        self.push(ASTType::Expression06List(expression06_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression06_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression06_list_1_built = Vec::new();
        self.push(
            ASTType::Expression06List(expression06_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression07(
        &mut self,
        _expression08: &ParseTreeType<'t>,
        _expression07_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression07_list =
            pop_and_reverse_item!(self, expression07_list, Expression07List, context);
        let expression08 = pop_item!(self, expression08, Expression08, context);
        let expression07_built = Expression07 {
            expression08: Box::new(expression08),
            expression07_list,
        };
        self.user_grammar.expression07(&expression07_built)?;
        self.push(ASTType::Expression07(expression07_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression07_list_0(
        &mut self,
        _operator08: &ParseTreeType<'t>,
        _expression08: &ParseTreeType<'t>,
        _expression07_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression07_list = pop_item!(self, expression07_list, Expression07List, context);
        let expression08 = pop_item!(self, expression08, Expression08, context);
        let operator08 = pop_item!(self, operator08, Operator08, context);
        let expression07_list_0_built = Expression07List {
            expression08: Box::new(expression08),
            operator08: Box::new(operator08),
        };
        expression07_list.push(expression07_list_0_built);
        self.push(ASTType::Expression07List(expression07_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression07_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression07_list_1_built = Vec::new();
        self.push(
            ASTType::Expression07List(expression07_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression08(
        &mut self,
        _expression09: &ParseTreeType<'t>,
        _expression08_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression08_list =
            pop_and_reverse_item!(self, expression08_list, Expression08List, context);
        let expression09 = pop_item!(self, expression09, Expression09, context);
        let expression08_built = Expression08 {
            expression09: Box::new(expression09),
            expression08_list,
        };
        self.user_grammar.expression08(&expression08_built)?;
        self.push(ASTType::Expression08(expression08_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression08_list_0(
        &mut self,
        _operator09: &ParseTreeType<'t>,
        _expression09: &ParseTreeType<'t>,
        _expression08_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression08_list = pop_item!(self, expression08_list, Expression08List, context);
        let expression09 = pop_item!(self, expression09, Expression09, context);
        let operator09 = pop_item!(self, operator09, Operator09, context);
        let expression08_list_0_built = Expression08List {
            expression09: Box::new(expression09),
            operator09: Box::new(operator09),
        };
        expression08_list.push(expression08_list_0_built);
        self.push(ASTType::Expression08List(expression08_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression08_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression08_list_1_built = Vec::new();
        self.push(
            ASTType::Expression08List(expression08_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression09(
        &mut self,
        _expression10: &ParseTreeType<'t>,
        _expression09_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression09_list =
            pop_and_reverse_item!(self, expression09_list, Expression09List, context);
        let expression10 = pop_item!(self, expression10, Expression10, context);
        let expression09_built = Expression09 {
            expression10: Box::new(expression10),
            expression09_list,
        };
        self.user_grammar.expression09(&expression09_built)?;
        self.push(ASTType::Expression09(expression09_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression09_list_0(
        &mut self,
        _expression09_list_group: &ParseTreeType<'t>,
        _expression10: &ParseTreeType<'t>,
        _expression09_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression09_list = pop_item!(self, expression09_list, Expression09List, context);
        let expression10 = pop_item!(self, expression10, Expression10, context);
        let expression09_list_group = pop_item!(
            self,
            expression09_list_group,
            Expression09ListGroup,
            context
        );
        let expression09_list_0_built = Expression09List {
            expression10: Box::new(expression10),
            expression09_list_group: Box::new(expression09_list_group),
        };
        expression09_list.push(expression09_list_0_built);
        self.push(ASTType::Expression09List(expression09_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression09_list_group_0(&mut self, _operator10: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator10 = pop_item!(self, operator10, Operator10, context);
        let expression09_list_group_0_built = Expression09ListGroupOperator10 {
            operator10: Box::new(operator10),
        };
        let expression09_list_group_0_built =
            Expression09ListGroup::Operator10(expression09_list_group_0_built);
        self.push(
            ASTType::Expression09ListGroup(expression09_list_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression09_list_group_1(&mut self, _star: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let star = pop_item!(self, star, Star, context);
        let expression09_list_group_1_built = Expression09ListGroupStar {
            star: Box::new(star),
        };
        let expression09_list_group_1_built =
            Expression09ListGroup::Star(expression09_list_group_1_built);
        self.push(
            ASTType::Expression09ListGroup(expression09_list_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression09_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression09_list_1_built = Vec::new();
        self.push(
            ASTType::Expression09List(expression09_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression10(
        &mut self,
        _expression11: &ParseTreeType<'t>,
        _expression10_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression10_list =
            pop_and_reverse_item!(self, expression10_list, Expression10List, context);
        let expression11 = pop_item!(self, expression11, Expression11, context);
        let expression10_built = Expression10 {
            expression11: Box::new(expression11),
            expression10_list,
        };
        self.user_grammar.expression10(&expression10_built)?;
        self.push(ASTType::Expression10(expression10_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression10_list_0(
        &mut self,
        _operator11: &ParseTreeType<'t>,
        _expression11: &ParseTreeType<'t>,
        _expression10_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression10_list = pop_item!(self, expression10_list, Expression10List, context);
        let expression11 = pop_item!(self, expression11, Expression11, context);
        let operator11 = pop_item!(self, operator11, Operator11, context);
        let expression10_list_0_built = Expression10List {
            expression11: Box::new(expression11),
            operator11: Box::new(operator11),
        };
        expression10_list.push(expression10_list_0_built);
        self.push(ASTType::Expression10List(expression10_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression10_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression10_list_1_built = Vec::new();
        self.push(
            ASTType::Expression10List(expression10_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression11(
        &mut self,
        _expression12: &ParseTreeType<'t>,
        _expression11_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression11_opt = pop_item!(self, expression11_opt, Expression11Opt, context);
        let expression12 = pop_item!(self, expression12, Expression12, context);
        let expression11_built = Expression11 {
            expression12: Box::new(expression12),
            expression11_opt,
        };
        self.user_grammar.expression11(&expression11_built)?;
        self.push(ASTType::Expression11(expression11_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression11_opt_0(
        &mut self,
        _as: &ParseTreeType<'t>,
        _casting_type: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let casting_type = pop_item!(self, casting_type, CastingType, context);
        let r#as = pop_item!(self, r#as, As, context);
        let expression11_opt_0_built = Expression11Opt {
            r#as: Box::new(r#as),
            casting_type: Box::new(casting_type),
        };
        self.push(
            ASTType::Expression11Opt(Some(expression11_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression11_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::Expression11Opt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12(
        &mut self,
        _expression12_list: &ParseTreeType<'t>,
        _factor: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor = pop_item!(self, factor, Factor, context);
        let expression12_list =
            pop_and_reverse_item!(self, expression12_list, Expression12List, context);
        let expression12_built = Expression12 {
            expression12_list,
            factor: Box::new(factor),
        };
        self.user_grammar.expression12(&expression12_built)?;
        self.push(ASTType::Expression12(expression12_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_0(
        &mut self,
        _expression12_list_group: &ParseTreeType<'t>,
        _expression12_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut expression12_list = pop_item!(self, expression12_list, Expression12List, context);
        let expression12_list_group = pop_item!(
            self,
            expression12_list_group,
            Expression12ListGroup,
            context
        );
        let expression12_list_0_built = Expression12List {
            expression12_list_group: Box::new(expression12_list_group),
        };
        expression12_list.push(expression12_list_0_built);
        self.push(ASTType::Expression12List(expression12_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_group_0(&mut self, _unary_operator: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unary_operator = pop_item!(self, unary_operator, UnaryOperator, context);
        let expression12_list_group_0_built = Expression12ListGroupUnaryOperator {
            unary_operator: Box::new(unary_operator),
        };
        let expression12_list_group_0_built =
            Expression12ListGroup::UnaryOperator(expression12_list_group_0_built);
        self.push(
            ASTType::Expression12ListGroup(expression12_list_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_group_1(&mut self, _operator09: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator09 = pop_item!(self, operator09, Operator09, context);
        let expression12_list_group_1_built = Expression12ListGroupOperator09 {
            operator09: Box::new(operator09),
        };
        let expression12_list_group_1_built =
            Expression12ListGroup::Operator09(expression12_list_group_1_built);
        self.push(
            ASTType::Expression12ListGroup(expression12_list_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_group_2(&mut self, _operator05: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator05 = pop_item!(self, operator05, Operator05, context);
        let expression12_list_group_2_built = Expression12ListGroupOperator05 {
            operator05: Box::new(operator05),
        };
        let expression12_list_group_2_built =
            Expression12ListGroup::Operator05(expression12_list_group_2_built);
        self.push(
            ASTType::Expression12ListGroup(expression12_list_group_2_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_group_3(&mut self, _operator03: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator03 = pop_item!(self, operator03, Operator03, context);
        let expression12_list_group_3_built = Expression12ListGroupOperator03 {
            operator03: Box::new(operator03),
        };
        let expression12_list_group_3_built =
            Expression12ListGroup::Operator03(expression12_list_group_3_built);
        self.push(
            ASTType::Expression12ListGroup(expression12_list_group_3_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_group_4(&mut self, _operator04: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let operator04 = pop_item!(self, operator04, Operator04, context);
        let expression12_list_group_4_built = Expression12ListGroupOperator04 {
            operator04: Box::new(operator04),
        };
        let expression12_list_group_4_built =
            Expression12ListGroup::Operator04(expression12_list_group_4_built);
        self.push(
            ASTType::Expression12ListGroup(expression12_list_group_4_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn expression12_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression12_list_1_built = Vec::new();
        self.push(
            ASTType::Expression12List(expression12_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_0(&mut self, _number: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let number = pop_item!(self, number, Number, context);
        let factor_0_built = FactorNumber {
            number: Box::new(number),
        };
        let factor_0_built = Factor::Number(factor_0_built);
        self.user_grammar.factor(&factor_0_built)?;
        self.push(ASTType::Factor(factor_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_1(
        &mut self,
        _expression_identifier: &ParseTreeType<'t>,
        _factor_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor_opt = pop_item!(self, factor_opt, FactorOpt, context);
        let expression_identifier =
            pop_item!(self, expression_identifier, ExpressionIdentifier, context);
        let factor_1_built = FactorExpressionIdentifierFactorOpt {
            expression_identifier: Box::new(expression_identifier),
            factor_opt,
        };
        let factor_1_built = Factor::ExpressionIdentifierFactorOpt(factor_1_built);
        self.user_grammar.factor(&factor_1_built)?;
        self.push(ASTType::Factor(factor_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_2(
        &mut self,
        _l_paren: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let expression = pop_item!(self, expression, Expression, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let factor_2_built = FactorLParenExpressionRParen {
            l_paren: Box::new(l_paren),
            expression: Box::new(expression),
            r_paren: Box::new(r_paren),
        };
        let factor_2_built = Factor::LParenExpressionRParen(factor_2_built);
        self.user_grammar.factor(&factor_2_built)?;
        self.push(ASTType::Factor(factor_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_3(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _concatenation_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let concatenation_list = pop_item!(self, concatenation_list, ConcatenationList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let factor_3_built = FactorLBraceConcatenationListRBrace {
            l_brace: Box::new(l_brace),
            concatenation_list: Box::new(concatenation_list),
            r_brace: Box::new(r_brace),
        };
        let factor_3_built = Factor::LBraceConcatenationListRBrace(factor_3_built);
        self.user_grammar.factor(&factor_3_built)?;
        self.push(ASTType::Factor(factor_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_4(
        &mut self,
        _quote_l_brace: &ParseTreeType<'t>,
        _array_literal_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let array_literal_list = pop_item!(self, array_literal_list, ArrayLiteralList, context);
        let quote_l_brace = pop_item!(self, quote_l_brace, QuoteLBrace, context);
        let factor_4_built = FactorQuoteLBraceArrayLiteralListRBrace {
            quote_l_brace: Box::new(quote_l_brace),
            array_literal_list: Box::new(array_literal_list),
            r_brace: Box::new(r_brace),
        };
        let factor_4_built = Factor::QuoteLBraceArrayLiteralListRBrace(factor_4_built);
        self.user_grammar.factor(&factor_4_built)?;
        self.push(ASTType::Factor(factor_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_5(&mut self, _if_expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_expression = pop_item!(self, if_expression, IfExpression, context);
        let factor_5_built = FactorIfExpression {
            if_expression: Box::new(if_expression),
        };
        let factor_5_built = Factor::IfExpression(factor_5_built);
        self.user_grammar.factor(&factor_5_built)?;
        self.push(ASTType::Factor(factor_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_6(&mut self, _case_expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_expression = pop_item!(self, case_expression, CaseExpression, context);
        let factor_6_built = FactorCaseExpression {
            case_expression: Box::new(case_expression),
        };
        let factor_6_built = Factor::CaseExpression(factor_6_built);
        self.user_grammar.factor(&factor_6_built)?;
        self.push(ASTType::Factor(factor_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_7(&mut self, _switch_expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_expression = pop_item!(self, switch_expression, SwitchExpression, context);
        let factor_7_built = FactorSwitchExpression {
            switch_expression: Box::new(switch_expression),
        };
        let factor_7_built = Factor::SwitchExpression(factor_7_built);
        self.user_grammar.factor(&factor_7_built)?;
        self.push(ASTType::Factor(factor_7_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_8(&mut self, _string_literal: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let string_literal = pop_item!(self, string_literal, StringLiteral, context);
        let factor_8_built = FactorStringLiteral {
            string_literal: Box::new(string_literal),
        };
        let factor_8_built = Factor::StringLiteral(factor_8_built);
        self.user_grammar.factor(&factor_8_built)?;
        self.push(ASTType::Factor(factor_8_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_9(&mut self, _factor_group: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor_group = pop_item!(self, factor_group, FactorGroup, context);
        let factor_9_built = FactorFactorGroup {
            factor_group: Box::new(factor_group),
        };
        let factor_9_built = Factor::FactorGroup(factor_9_built);
        self.user_grammar.factor(&factor_9_built)?;
        self.push(ASTType::Factor(factor_9_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_group_0(&mut self, _msb: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let msb = pop_item!(self, msb, Msb, context);
        let factor_group_0_built = FactorGroupMsb { msb: Box::new(msb) };
        let factor_group_0_built = FactorGroup::Msb(factor_group_0_built);
        self.push(ASTType::FactorGroup(factor_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_group_1(&mut self, _lsb: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let lsb = pop_item!(self, lsb, Lsb, context);
        let factor_group_1_built = FactorGroupLsb { lsb: Box::new(lsb) };
        let factor_group_1_built = FactorGroup::Lsb(factor_group_1_built);
        self.push(ASTType::FactorGroup(factor_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_10(&mut self, _inside_expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inside_expression = pop_item!(self, inside_expression, InsideExpression, context);
        let factor_10_built = FactorInsideExpression {
            inside_expression: Box::new(inside_expression),
        };
        let factor_10_built = Factor::InsideExpression(factor_10_built);
        self.user_grammar.factor(&factor_10_built)?;
        self.push(ASTType::Factor(factor_10_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_11(&mut self, _outside_expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let outside_expression = pop_item!(self, outside_expression, OutsideExpression, context);
        let factor_11_built = FactorOutsideExpression {
            outside_expression: Box::new(outside_expression),
        };
        let factor_11_built = Factor::OutsideExpression(factor_11_built);
        self.user_grammar.factor(&factor_11_built)?;
        self.push(ASTType::Factor(factor_11_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_12(&mut self, _type_expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let type_expression = pop_item!(self, type_expression, TypeExpression, context);
        let factor_12_built = FactorTypeExpression {
            type_expression: Box::new(type_expression),
        };
        let factor_12_built = Factor::TypeExpression(factor_12_built);
        self.user_grammar.factor(&factor_12_built)?;
        self.push(ASTType::Factor(factor_12_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_13(&mut self, _factor_type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor_type = pop_item!(self, factor_type, FactorType, context);
        let factor_13_built = FactorFactorType {
            factor_type: Box::new(factor_type),
        };
        let factor_13_built = Factor::FactorType(factor_13_built);
        self.user_grammar.factor(&factor_13_built)?;
        self.push(ASTType::Factor(factor_13_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_opt_0(&mut self, _function_call: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let function_call = pop_item!(self, function_call, FunctionCall, context);
        let factor_opt_0_built = FactorOpt {
            function_call: Box::new(function_call),
        };
        self.push(ASTType::FactorOpt(Some(factor_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::FactorOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_call(
        &mut self,
        _l_paren: &ParseTreeType<'t>,
        _function_call_opt: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let function_call_opt = pop_item!(self, function_call_opt, FunctionCallOpt, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let function_call_built = FunctionCall {
            l_paren: Box::new(l_paren),
            function_call_opt,
            r_paren: Box::new(r_paren),
        };
        self.user_grammar.function_call(&function_call_built)?;
        self.push(ASTType::FunctionCall(function_call_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_call_opt_0(&mut self, _argument_list: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let argument_list = pop_item!(self, argument_list, ArgumentList, context);
        let function_call_opt_0_built = FunctionCallOpt {
            argument_list: Box::new(argument_list),
        };
        self.push(
            ASTType::FunctionCallOpt(Some(function_call_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_call_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::FunctionCallOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn argument_list(
        &mut self,
        _argument_item: &ParseTreeType<'t>,
        _argument_list_list: &ParseTreeType<'t>,
        _argument_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let argument_list_opt = pop_item!(self, argument_list_opt, ArgumentListOpt, context);
        let argument_list_list =
            pop_and_reverse_item!(self, argument_list_list, ArgumentListList, context);
        let argument_item = pop_item!(self, argument_item, ArgumentItem, context);
        let argument_list_built = ArgumentList {
            argument_item: Box::new(argument_item),
            argument_list_list,
            argument_list_opt,
        };
        self.user_grammar.argument_list(&argument_list_built)?;
        self.push(ASTType::ArgumentList(argument_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn argument_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _argument_item: &ParseTreeType<'t>,
        _argument_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut argument_list_list = pop_item!(self, argument_list_list, ArgumentListList, context);
        let argument_item = pop_item!(self, argument_item, ArgumentItem, context);
        let comma = pop_item!(self, comma, Comma, context);
        let argument_list_list_0_built = ArgumentListList {
            argument_item: Box::new(argument_item),
            comma: Box::new(comma),
        };
        argument_list_list.push(argument_list_list_0_built);
        self.push(ASTType::ArgumentListList(argument_list_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn argument_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let argument_list_list_1_built = Vec::new();
        self.push(
            ASTType::ArgumentListList(argument_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn argument_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let argument_list_opt_0_built = ArgumentListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::ArgumentListOpt(Some(argument_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn argument_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ArgumentListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn argument_item(&mut self, _expression: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let argument_item_built = ArgumentItem {
            expression: Box::new(expression),
        };
        self.user_grammar.argument_item(&argument_item_built)?;
        self.push(ASTType::ArgumentItem(argument_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_list(
        &mut self,
        _concatenation_item: &ParseTreeType<'t>,
        _concatenation_list_list: &ParseTreeType<'t>,
        _concatenation_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let concatenation_list_opt =
            pop_item!(self, concatenation_list_opt, ConcatenationListOpt, context);
        let concatenation_list_list = pop_and_reverse_item!(
            self,
            concatenation_list_list,
            ConcatenationListList,
            context
        );
        let concatenation_item = pop_item!(self, concatenation_item, ConcatenationItem, context);
        let concatenation_list_built = ConcatenationList {
            concatenation_item: Box::new(concatenation_item),
            concatenation_list_list,
            concatenation_list_opt,
        };
        self.user_grammar
            .concatenation_list(&concatenation_list_built)?;
        self.push(
            ASTType::ConcatenationList(concatenation_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _concatenation_item: &ParseTreeType<'t>,
        _concatenation_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut concatenation_list_list = pop_item!(
            self,
            concatenation_list_list,
            ConcatenationListList,
            context
        );
        let concatenation_item = pop_item!(self, concatenation_item, ConcatenationItem, context);
        let comma = pop_item!(self, comma, Comma, context);
        let concatenation_list_list_0_built = ConcatenationListList {
            concatenation_item: Box::new(concatenation_item),
            comma: Box::new(comma),
        };
        concatenation_list_list.push(concatenation_list_list_0_built);
        self.push(
            ASTType::ConcatenationListList(concatenation_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let concatenation_list_list_1_built = Vec::new();
        self.push(
            ASTType::ConcatenationListList(concatenation_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let concatenation_list_opt_0_built = ConcatenationListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::ConcatenationListOpt(Some(concatenation_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ConcatenationListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_item(
        &mut self,
        _expression: &ParseTreeType<'t>,
        _concatenation_item_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let concatenation_item_opt =
            pop_item!(self, concatenation_item_opt, ConcatenationItemOpt, context);
        let expression = pop_item!(self, expression, Expression, context);
        let concatenation_item_built = ConcatenationItem {
            expression: Box::new(expression),
            concatenation_item_opt,
        };
        self.user_grammar
            .concatenation_item(&concatenation_item_built)?;
        self.push(
            ASTType::ConcatenationItem(concatenation_item_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_item_opt_0(
        &mut self,
        _repeat: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let repeat = pop_item!(self, repeat, Repeat, context);
        let concatenation_item_opt_0_built = ConcatenationItemOpt {
            repeat: Box::new(repeat),
            expression: Box::new(expression),
        };
        self.push(
            ASTType::ConcatenationItemOpt(Some(concatenation_item_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn concatenation_item_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ConcatenationItemOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_list(
        &mut self,
        _array_literal_item: &ParseTreeType<'t>,
        _array_literal_list_list: &ParseTreeType<'t>,
        _array_literal_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_literal_list_opt =
            pop_item!(self, array_literal_list_opt, ArrayLiteralListOpt, context);
        let array_literal_list_list =
            pop_and_reverse_item!(self, array_literal_list_list, ArrayLiteralListList, context);
        let array_literal_item = pop_item!(self, array_literal_item, ArrayLiteralItem, context);
        let array_literal_list_built = ArrayLiteralList {
            array_literal_item: Box::new(array_literal_item),
            array_literal_list_list,
            array_literal_list_opt,
        };
        self.user_grammar
            .array_literal_list(&array_literal_list_built)?;
        self.push(ASTType::ArrayLiteralList(array_literal_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _array_literal_item: &ParseTreeType<'t>,
        _array_literal_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut array_literal_list_list =
            pop_item!(self, array_literal_list_list, ArrayLiteralListList, context);
        let array_literal_item = pop_item!(self, array_literal_item, ArrayLiteralItem, context);
        let comma = pop_item!(self, comma, Comma, context);
        let array_literal_list_list_0_built = ArrayLiteralListList {
            array_literal_item: Box::new(array_literal_item),
            comma: Box::new(comma),
        };
        array_literal_list_list.push(array_literal_list_list_0_built);
        self.push(
            ASTType::ArrayLiteralListList(array_literal_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_literal_list_list_1_built = Vec::new();
        self.push(
            ASTType::ArrayLiteralListList(array_literal_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let array_literal_list_opt_0_built = ArrayLiteralListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::ArrayLiteralListOpt(Some(array_literal_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ArrayLiteralListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_item(&mut self, _array_literal_item_group: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_literal_item_group = pop_item!(
            self,
            array_literal_item_group,
            ArrayLiteralItemGroup,
            context
        );
        let array_literal_item_built = ArrayLiteralItem {
            array_literal_item_group: Box::new(array_literal_item_group),
        };
        self.user_grammar
            .array_literal_item(&array_literal_item_built)?;
        self.push(ASTType::ArrayLiteralItem(array_literal_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_item_group_0(
        &mut self,
        _expression: &ParseTreeType<'t>,
        _array_literal_item_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_literal_item_opt =
            pop_item!(self, array_literal_item_opt, ArrayLiteralItemOpt, context);
        let expression = pop_item!(self, expression, Expression, context);
        let array_literal_item_group_0_built = ArrayLiteralItemGroupExpressionArrayLiteralItemOpt {
            expression: Box::new(expression),
            array_literal_item_opt,
        };
        let array_literal_item_group_0_built =
            ArrayLiteralItemGroup::ExpressionArrayLiteralItemOpt(array_literal_item_group_0_built);
        self.push(
            ASTType::ArrayLiteralItemGroup(array_literal_item_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_item_group_1(
        &mut self,
        _defaul: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let defaul = pop_item!(self, defaul, Defaul, context);
        let array_literal_item_group_1_built = ArrayLiteralItemGroupDefaulColonExpression {
            defaul: Box::new(defaul),
            colon: Box::new(colon),
            expression: Box::new(expression),
        };
        let array_literal_item_group_1_built =
            ArrayLiteralItemGroup::DefaulColonExpression(array_literal_item_group_1_built);
        self.push(
            ASTType::ArrayLiteralItemGroup(array_literal_item_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_item_opt_0(
        &mut self,
        _repeat: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let repeat = pop_item!(self, repeat, Repeat, context);
        let array_literal_item_opt_0_built = ArrayLiteralItemOpt {
            repeat: Box::new(repeat),
            expression: Box::new(expression),
        };
        self.push(
            ASTType::ArrayLiteralItemOpt(Some(array_literal_item_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_literal_item_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ArrayLiteralItemOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_expression(
        &mut self,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _expression0: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
        _if_expression_list: &ParseTreeType<'t>,
        _else: &ParseTreeType<'t>,
        _l_brace0: &ParseTreeType<'t>,
        _expression1: &ParseTreeType<'t>,
        _r_brace0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace0 = pop_item!(self, r_brace0, RBrace, context);
        let expression1 = pop_item!(self, expression1, Expression, context);
        let l_brace0 = pop_item!(self, l_brace0, LBrace, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let if_expression_list =
            pop_and_reverse_item!(self, if_expression_list, IfExpressionList, context);
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let expression0 = pop_item!(self, expression0, Expression, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let if_expression_built = IfExpression {
            r#if: Box::new(r#if),
            expression: Box::new(expression),
            l_brace: Box::new(l_brace),
            expression0: Box::new(expression0),
            r_brace: Box::new(r_brace),
            if_expression_list,
            r#else: Box::new(r#else),
            l_brace0: Box::new(l_brace0),
            expression1: Box::new(expression1),
            r_brace0: Box::new(r_brace0),
        };
        self.user_grammar.if_expression(&if_expression_built)?;
        self.push(ASTType::IfExpression(if_expression_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_expression_list_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _expression0: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
        _if_expression_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut if_expression_list = pop_item!(self, if_expression_list, IfExpressionList, context);
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let expression0 = pop_item!(self, expression0, Expression, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let if_expression_list_0_built = IfExpressionList {
            r_brace: Box::new(r_brace),
            expression0: Box::new(expression0),
            l_brace: Box::new(l_brace),
            expression: Box::new(expression),
            r#if: Box::new(r#if),
            r#else: Box::new(r#else),
        };
        if_expression_list.push(if_expression_list_0_built);
        self.push(ASTType::IfExpressionList(if_expression_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_expression_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_expression_list_1_built = Vec::new();
        self.push(
            ASTType::IfExpressionList(if_expression_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_expression(
        &mut self,
        _case: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _case_condition: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _expression0: &ParseTreeType<'t>,
        _comma: &ParseTreeType<'t>,
        _case_expression_list: &ParseTreeType<'t>,
        _defaul: &ParseTreeType<'t>,
        _colon0: &ParseTreeType<'t>,
        _expression1: &ParseTreeType<'t>,
        _case_expression_opt: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let case_expression_opt = pop_item!(self, case_expression_opt, CaseExpressionOpt, context);
        let expression1 = pop_item!(self, expression1, Expression, context);
        let colon0 = pop_item!(self, colon0, Colon, context);
        let defaul = pop_item!(self, defaul, Defaul, context);
        let case_expression_list =
            pop_and_reverse_item!(self, case_expression_list, CaseExpressionList, context);
        let comma = pop_item!(self, comma, Comma, context);
        let expression0 = pop_item!(self, expression0, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let case_condition = pop_item!(self, case_condition, CaseCondition, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let expression = pop_item!(self, expression, Expression, context);
        let case = pop_item!(self, case, Case, context);
        let case_expression_built = CaseExpression {
            case: Box::new(case),
            expression: Box::new(expression),
            l_brace: Box::new(l_brace),
            case_condition: Box::new(case_condition),
            colon: Box::new(colon),
            expression0: Box::new(expression0),
            comma: Box::new(comma),
            case_expression_list,
            defaul: Box::new(defaul),
            colon0: Box::new(colon0),
            expression1: Box::new(expression1),
            case_expression_opt,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar.case_expression(&case_expression_built)?;
        self.push(ASTType::CaseExpression(case_expression_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_expression_list_0(
        &mut self,
        _case_condition: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _comma: &ParseTreeType<'t>,
        _case_expression_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut case_expression_list =
            pop_item!(self, case_expression_list, CaseExpressionList, context);
        let comma = pop_item!(self, comma, Comma, context);
        let expression = pop_item!(self, expression, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let case_condition = pop_item!(self, case_condition, CaseCondition, context);
        let case_expression_list_0_built = CaseExpressionList {
            comma: Box::new(comma),
            expression: Box::new(expression),
            colon: Box::new(colon),
            case_condition: Box::new(case_condition),
        };
        case_expression_list.push(case_expression_list_0_built);
        self.push(ASTType::CaseExpressionList(case_expression_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_expression_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_expression_list_1_built = Vec::new();
        self.push(
            ASTType::CaseExpressionList(case_expression_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_expression_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let case_expression_opt_0_built = CaseExpressionOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::CaseExpressionOpt(Some(case_expression_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_expression_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::CaseExpressionOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_expression(
        &mut self,
        _switch: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _switch_condition: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _comma: &ParseTreeType<'t>,
        _switch_expression_list: &ParseTreeType<'t>,
        _defaul: &ParseTreeType<'t>,
        _colon0: &ParseTreeType<'t>,
        _expression0: &ParseTreeType<'t>,
        _switch_expression_opt: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let switch_expression_opt =
            pop_item!(self, switch_expression_opt, SwitchExpressionOpt, context);
        let expression0 = pop_item!(self, expression0, Expression, context);
        let colon0 = pop_item!(self, colon0, Colon, context);
        let defaul = pop_item!(self, defaul, Defaul, context);
        let switch_expression_list =
            pop_and_reverse_item!(self, switch_expression_list, SwitchExpressionList, context);
        let comma = pop_item!(self, comma, Comma, context);
        let expression = pop_item!(self, expression, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let switch_condition = pop_item!(self, switch_condition, SwitchCondition, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let switch = pop_item!(self, switch, Switch, context);
        let switch_expression_built = SwitchExpression {
            switch: Box::new(switch),
            l_brace: Box::new(l_brace),
            switch_condition: Box::new(switch_condition),
            colon: Box::new(colon),
            expression: Box::new(expression),
            comma: Box::new(comma),
            switch_expression_list,
            defaul: Box::new(defaul),
            colon0: Box::new(colon0),
            expression0: Box::new(expression0),
            switch_expression_opt,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .switch_expression(&switch_expression_built)?;
        self.push(ASTType::SwitchExpression(switch_expression_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_expression_list_0(
        &mut self,
        _switch_condition: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _comma: &ParseTreeType<'t>,
        _switch_expression_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut switch_expression_list =
            pop_item!(self, switch_expression_list, SwitchExpressionList, context);
        let comma = pop_item!(self, comma, Comma, context);
        let expression = pop_item!(self, expression, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let switch_condition = pop_item!(self, switch_condition, SwitchCondition, context);
        let switch_expression_list_0_built = SwitchExpressionList {
            comma: Box::new(comma),
            expression: Box::new(expression),
            colon: Box::new(colon),
            switch_condition: Box::new(switch_condition),
        };
        switch_expression_list.push(switch_expression_list_0_built);
        self.push(
            ASTType::SwitchExpressionList(switch_expression_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_expression_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_expression_list_1_built = Vec::new();
        self.push(
            ASTType::SwitchExpressionList(switch_expression_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_expression_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let switch_expression_opt_0_built = SwitchExpressionOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::SwitchExpressionOpt(Some(switch_expression_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_expression_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::SwitchExpressionOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn type_expression(
        &mut self,
        _type: &ParseTreeType<'t>,
        _l_paren: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let expression = pop_item!(self, expression, Expression, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let r#type = pop_item!(self, r#type, Type, context);
        let type_expression_built = TypeExpression {
            r#type: Box::new(r#type),
            l_paren: Box::new(l_paren),
            expression: Box::new(expression),
            r_paren: Box::new(r_paren),
        };
        self.user_grammar.type_expression(&type_expression_built)?;
        self.push(ASTType::TypeExpression(type_expression_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inside_expression(
        &mut self,
        _inside: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _range_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let range_list = pop_item!(self, range_list, RangeList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let expression = pop_item!(self, expression, Expression, context);
        let inside = pop_item!(self, inside, Inside, context);
        let inside_expression_built = InsideExpression {
            inside: Box::new(inside),
            expression: Box::new(expression),
            l_brace: Box::new(l_brace),
            range_list: Box::new(range_list),
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .inside_expression(&inside_expression_built)?;
        self.push(ASTType::InsideExpression(inside_expression_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn outside_expression(
        &mut self,
        _outside: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _range_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let range_list = pop_item!(self, range_list, RangeList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let expression = pop_item!(self, expression, Expression, context);
        let outside = pop_item!(self, outside, Outside, context);
        let outside_expression_built = OutsideExpression {
            outside: Box::new(outside),
            expression: Box::new(expression),
            l_brace: Box::new(l_brace),
            range_list: Box::new(range_list),
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .outside_expression(&outside_expression_built)?;
        self.push(
            ASTType::OutsideExpression(outside_expression_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_list(
        &mut self,
        _range_item: &ParseTreeType<'t>,
        _range_list_list: &ParseTreeType<'t>,
        _range_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let range_list_opt = pop_item!(self, range_list_opt, RangeListOpt, context);
        let range_list_list = pop_and_reverse_item!(self, range_list_list, RangeListList, context);
        let range_item = pop_item!(self, range_item, RangeItem, context);
        let range_list_built = RangeList {
            range_item: Box::new(range_item),
            range_list_list,
            range_list_opt,
        };
        self.user_grammar.range_list(&range_list_built)?;
        self.push(ASTType::RangeList(range_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _range_item: &ParseTreeType<'t>,
        _range_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut range_list_list = pop_item!(self, range_list_list, RangeListList, context);
        let range_item = pop_item!(self, range_item, RangeItem, context);
        let comma = pop_item!(self, comma, Comma, context);
        let range_list_list_0_built = RangeListList {
            range_item: Box::new(range_item),
            comma: Box::new(comma),
        };
        range_list_list.push(range_list_list_0_built);
        self.push(ASTType::RangeListList(range_list_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let range_list_list_1_built = Vec::new();
        self.push(ASTType::RangeListList(range_list_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let range_list_opt_0_built = RangeListOpt {
            comma: Box::new(comma),
        };
        self.push(ASTType::RangeListOpt(Some(range_list_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::RangeListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_item(&mut self, _range: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let range = pop_item!(self, range, Range, context);
        let range_item_built = RangeItem {
            range: Box::new(range),
        };
        self.user_grammar.range_item(&range_item_built)?;
        self.push(ASTType::RangeItem(range_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select(
        &mut self,
        _l_bracket: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _select_opt: &ParseTreeType<'t>,
        _r_bracket: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_bracket = pop_item!(self, r_bracket, RBracket, context);
        let select_opt = pop_item!(self, select_opt, SelectOpt, context);
        let expression = pop_item!(self, expression, Expression, context);
        let l_bracket = pop_item!(self, l_bracket, LBracket, context);
        let select_built = Select {
            l_bracket: Box::new(l_bracket),
            expression: Box::new(expression),
            select_opt,
            r_bracket: Box::new(r_bracket),
        };
        self.user_grammar.select(&select_built)?;
        self.push(ASTType::Select(select_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select_opt_0(
        &mut self,
        _select_operator: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let select_operator = pop_item!(self, select_operator, SelectOperator, context);
        let select_opt_0_built = SelectOpt {
            select_operator: Box::new(select_operator),
            expression: Box::new(expression),
        };
        self.push(ASTType::SelectOpt(Some(select_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::SelectOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select_operator_0(&mut self, _colon: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let colon = pop_item!(self, colon, Colon, context);
        let select_operator_0_built = SelectOperatorColon {
            colon: Box::new(colon),
        };
        let select_operator_0_built = SelectOperator::Colon(select_operator_0_built);
        self.user_grammar
            .select_operator(&select_operator_0_built)?;
        self.push(ASTType::SelectOperator(select_operator_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select_operator_1(&mut self, _plus_colon: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let plus_colon = pop_item!(self, plus_colon, PlusColon, context);
        let select_operator_1_built = SelectOperatorPlusColon {
            plus_colon: Box::new(plus_colon),
        };
        let select_operator_1_built = SelectOperator::PlusColon(select_operator_1_built);
        self.user_grammar
            .select_operator(&select_operator_1_built)?;
        self.push(ASTType::SelectOperator(select_operator_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select_operator_2(&mut self, _minus_colon: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let minus_colon = pop_item!(self, minus_colon, MinusColon, context);
        let select_operator_2_built = SelectOperatorMinusColon {
            minus_colon: Box::new(minus_colon),
        };
        let select_operator_2_built = SelectOperator::MinusColon(select_operator_2_built);
        self.user_grammar
            .select_operator(&select_operator_2_built)?;
        self.push(ASTType::SelectOperator(select_operator_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn select_operator_3(&mut self, _step: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let step = pop_item!(self, step, Step, context);
        let select_operator_3_built = SelectOperatorStep {
            step: Box::new(step),
        };
        let select_operator_3_built = SelectOperator::Step(select_operator_3_built);
        self.user_grammar
            .select_operator(&select_operator_3_built)?;
        self.push(ASTType::SelectOperator(select_operator_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn width(
        &mut self,
        _l_angle: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _width_list: &ParseTreeType<'t>,
        _r_angle: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_angle = pop_item!(self, r_angle, RAngle, context);
        let width_list = pop_and_reverse_item!(self, width_list, WidthList, context);
        let expression = pop_item!(self, expression, Expression, context);
        let l_angle = pop_item!(self, l_angle, LAngle, context);
        let width_built = Width {
            l_angle: Box::new(l_angle),
            expression: Box::new(expression),
            width_list,
            r_angle: Box::new(r_angle),
        };
        self.user_grammar.width(&width_built)?;
        self.push(ASTType::Width(width_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn width_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _width_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut width_list = pop_item!(self, width_list, WidthList, context);
        let expression = pop_item!(self, expression, Expression, context);
        let comma = pop_item!(self, comma, Comma, context);
        let width_list_0_built = WidthList {
            expression: Box::new(expression),
            comma: Box::new(comma),
        };
        width_list.push(width_list_0_built);
        self.push(ASTType::WidthList(width_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn width_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let width_list_1_built = Vec::new();
        self.push(ASTType::WidthList(width_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array(
        &mut self,
        _l_bracket: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _array_list: &ParseTreeType<'t>,
        _r_bracket: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_bracket = pop_item!(self, r_bracket, RBracket, context);
        let array_list = pop_and_reverse_item!(self, array_list, ArrayList, context);
        let expression = pop_item!(self, expression, Expression, context);
        let l_bracket = pop_item!(self, l_bracket, LBracket, context);
        let array_built = Array {
            l_bracket: Box::new(l_bracket),
            expression: Box::new(expression),
            array_list,
            r_bracket: Box::new(r_bracket),
        };
        self.user_grammar.array(&array_built)?;
        self.push(ASTType::Array(array_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _array_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut array_list = pop_item!(self, array_list, ArrayList, context);
        let expression = pop_item!(self, expression, Expression, context);
        let comma = pop_item!(self, comma, Comma, context);
        let array_list_0_built = ArrayList {
            expression: Box::new(expression),
            comma: Box::new(comma),
        };
        array_list.push(array_list_0_built);
        self.push(ASTType::ArrayList(array_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_list_1_built = Vec::new();
        self.push(ASTType::ArrayList(array_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range(
        &mut self,
        _expression: &ParseTreeType<'t>,
        _range_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let range_opt = pop_item!(self, range_opt, RangeOpt, context);
        let expression = pop_item!(self, expression, Expression, context);
        let range_built = Range {
            expression: Box::new(expression),
            range_opt,
        };
        self.user_grammar.range(&range_built)?;
        self.push(ASTType::Range(range_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_opt_0(
        &mut self,
        _range_operator: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let range_operator = pop_item!(self, range_operator, RangeOperator, context);
        let range_opt_0_built = RangeOpt {
            range_operator: Box::new(range_operator),
            expression: Box::new(expression),
        };
        self.push(ASTType::RangeOpt(Some(range_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::RangeOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_operator_0(&mut self, _dot_dot: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_dot = pop_item!(self, dot_dot, DotDot, context);
        let range_operator_0_built = RangeOperatorDotDot {
            dot_dot: Box::new(dot_dot),
        };
        let range_operator_0_built = RangeOperator::DotDot(range_operator_0_built);
        self.user_grammar.range_operator(&range_operator_0_built)?;
        self.push(ASTType::RangeOperator(range_operator_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn range_operator_1(&mut self, _dot_dot_equ: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let dot_dot_equ = pop_item!(self, dot_dot_equ, DotDotEqu, context);
        let range_operator_1_built = RangeOperatorDotDotEqu {
            dot_dot_equ: Box::new(dot_dot_equ),
        };
        let range_operator_1_built = RangeOperator::DotDotEqu(range_operator_1_built);
        self.user_grammar.range_operator(&range_operator_1_built)?;
        self.push(ASTType::RangeOperator(range_operator_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_0(&mut self, _u32: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u32 = pop_item!(self, u32, U32, context);
        let fixed_type_0_built = FixedTypeU32 { u32: Box::new(u32) };
        let fixed_type_0_built = FixedType::U32(fixed_type_0_built);
        self.user_grammar.fixed_type(&fixed_type_0_built)?;
        self.push(ASTType::FixedType(fixed_type_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_1(&mut self, _u64: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u64 = pop_item!(self, u64, U64, context);
        let fixed_type_1_built = FixedTypeU64 { u64: Box::new(u64) };
        let fixed_type_1_built = FixedType::U64(fixed_type_1_built);
        self.user_grammar.fixed_type(&fixed_type_1_built)?;
        self.push(ASTType::FixedType(fixed_type_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_2(&mut self, _i32: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i32 = pop_item!(self, i32, I32, context);
        let fixed_type_2_built = FixedTypeI32 { i32: Box::new(i32) };
        let fixed_type_2_built = FixedType::I32(fixed_type_2_built);
        self.user_grammar.fixed_type(&fixed_type_2_built)?;
        self.push(ASTType::FixedType(fixed_type_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_3(&mut self, _i64: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i64 = pop_item!(self, i64, I64, context);
        let fixed_type_3_built = FixedTypeI64 { i64: Box::new(i64) };
        let fixed_type_3_built = FixedType::I64(fixed_type_3_built);
        self.user_grammar.fixed_type(&fixed_type_3_built)?;
        self.push(ASTType::FixedType(fixed_type_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_4(&mut self, _f32: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f32 = pop_item!(self, f32, F32, context);
        let fixed_type_4_built = FixedTypeF32 { f32: Box::new(f32) };
        let fixed_type_4_built = FixedType::F32(fixed_type_4_built);
        self.user_grammar.fixed_type(&fixed_type_4_built)?;
        self.push(ASTType::FixedType(fixed_type_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_5(&mut self, _f64: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f64 = pop_item!(self, f64, F64, context);
        let fixed_type_5_built = FixedTypeF64 { f64: Box::new(f64) };
        let fixed_type_5_built = FixedType::F64(fixed_type_5_built);
        self.user_grammar.fixed_type(&fixed_type_5_built)?;
        self.push(ASTType::FixedType(fixed_type_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn fixed_type_6(&mut self, _strin: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let strin = pop_item!(self, strin, Strin, context);
        let fixed_type_6_built = FixedTypeStrin {
            strin: Box::new(strin),
        };
        let fixed_type_6_built = FixedType::Strin(fixed_type_6_built);
        self.user_grammar.fixed_type(&fixed_type_6_built)?;
        self.push(ASTType::FixedType(fixed_type_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_0(&mut self, _clock: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock = pop_item!(self, clock, Clock, context);
        let variable_type_0_built = VariableTypeClock {
            clock: Box::new(clock),
        };
        let variable_type_0_built = VariableType::Clock(variable_type_0_built);
        self.user_grammar.variable_type(&variable_type_0_built)?;
        self.push(ASTType::VariableType(variable_type_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_1(&mut self, _clock_posedge: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_posedge = pop_item!(self, clock_posedge, ClockPosedge, context);
        let variable_type_1_built = VariableTypeClockPosedge {
            clock_posedge: Box::new(clock_posedge),
        };
        let variable_type_1_built = VariableType::ClockPosedge(variable_type_1_built);
        self.user_grammar.variable_type(&variable_type_1_built)?;
        self.push(ASTType::VariableType(variable_type_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_2(&mut self, _clock_negedge: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_negedge = pop_item!(self, clock_negedge, ClockNegedge, context);
        let variable_type_2_built = VariableTypeClockNegedge {
            clock_negedge: Box::new(clock_negedge),
        };
        let variable_type_2_built = VariableType::ClockNegedge(variable_type_2_built);
        self.user_grammar.variable_type(&variable_type_2_built)?;
        self.push(ASTType::VariableType(variable_type_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_3(&mut self, _reset: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset = pop_item!(self, reset, Reset, context);
        let variable_type_3_built = VariableTypeReset {
            reset: Box::new(reset),
        };
        let variable_type_3_built = VariableType::Reset(variable_type_3_built);
        self.user_grammar.variable_type(&variable_type_3_built)?;
        self.push(ASTType::VariableType(variable_type_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_4(&mut self, _reset_async_high: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_high = pop_item!(self, reset_async_high, ResetAsyncHigh, context);
        let variable_type_4_built = VariableTypeResetAsyncHigh {
            reset_async_high: Box::new(reset_async_high),
        };
        let variable_type_4_built = VariableType::ResetAsyncHigh(variable_type_4_built);
        self.user_grammar.variable_type(&variable_type_4_built)?;
        self.push(ASTType::VariableType(variable_type_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_5(&mut self, _reset_async_low: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_low = pop_item!(self, reset_async_low, ResetAsyncLow, context);
        let variable_type_5_built = VariableTypeResetAsyncLow {
            reset_async_low: Box::new(reset_async_low),
        };
        let variable_type_5_built = VariableType::ResetAsyncLow(variable_type_5_built);
        self.user_grammar.variable_type(&variable_type_5_built)?;
        self.push(ASTType::VariableType(variable_type_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_6(&mut self, _reset_sync_high: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_high = pop_item!(self, reset_sync_high, ResetSyncHigh, context);
        let variable_type_6_built = VariableTypeResetSyncHigh {
            reset_sync_high: Box::new(reset_sync_high),
        };
        let variable_type_6_built = VariableType::ResetSyncHigh(variable_type_6_built);
        self.user_grammar.variable_type(&variable_type_6_built)?;
        self.push(ASTType::VariableType(variable_type_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_7(&mut self, _reset_sync_low: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_low = pop_item!(self, reset_sync_low, ResetSyncLow, context);
        let variable_type_7_built = VariableTypeResetSyncLow {
            reset_sync_low: Box::new(reset_sync_low),
        };
        let variable_type_7_built = VariableType::ResetSyncLow(variable_type_7_built);
        self.user_grammar.variable_type(&variable_type_7_built)?;
        self.push(ASTType::VariableType(variable_type_7_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_8(&mut self, _logic: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let logic = pop_item!(self, logic, Logic, context);
        let variable_type_8_built = VariableTypeLogic {
            logic: Box::new(logic),
        };
        let variable_type_8_built = VariableType::Logic(variable_type_8_built);
        self.user_grammar.variable_type(&variable_type_8_built)?;
        self.push(ASTType::VariableType(variable_type_8_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn variable_type_9(&mut self, _bit: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let bit = pop_item!(self, bit, Bit, context);
        let variable_type_9_built = VariableTypeBit { bit: Box::new(bit) };
        let variable_type_9_built = VariableType::Bit(variable_type_9_built);
        self.user_grammar.variable_type(&variable_type_9_built)?;
        self.push(ASTType::VariableType(variable_type_9_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn user_defined_type(&mut self, _scoped_identifier: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let user_defined_type_built = UserDefinedType {
            scoped_identifier: Box::new(scoped_identifier),
        };
        self.user_grammar
            .user_defined_type(&user_defined_type_built)?;
        self.push(ASTType::UserDefinedType(user_defined_type_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn type_modifier_0(&mut self, _tri: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let tri = pop_item!(self, tri, Tri, context);
        let type_modifier_0_built = TypeModifierTri { tri: Box::new(tri) };
        let type_modifier_0_built = TypeModifier::Tri(type_modifier_0_built);
        self.user_grammar.type_modifier(&type_modifier_0_built)?;
        self.push(ASTType::TypeModifier(type_modifier_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn type_modifier_1(&mut self, _signed: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let signed = pop_item!(self, signed, Signed, context);
        let type_modifier_1_built = TypeModifierSigned {
            signed: Box::new(signed),
        };
        let type_modifier_1_built = TypeModifier::Signed(type_modifier_1_built);
        self.user_grammar.type_modifier(&type_modifier_1_built)?;
        self.push(ASTType::TypeModifier(type_modifier_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_type(&mut self, _factor_type_group: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor_type_group = pop_item!(self, factor_type_group, FactorTypeGroup, context);
        let factor_type_built = FactorType {
            factor_type_group: Box::new(factor_type_group),
        };
        self.user_grammar.factor_type(&factor_type_built)?;
        self.push(ASTType::FactorType(factor_type_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_type_group_0(
        &mut self,
        _variable_type: &ParseTreeType<'t>,
        _factor_type_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor_type_opt = pop_item!(self, factor_type_opt, FactorTypeOpt, context);
        let variable_type = pop_item!(self, variable_type, VariableType, context);
        let factor_type_group_0_built = FactorTypeGroupVariableTypeFactorTypeOpt {
            variable_type: Box::new(variable_type),
            factor_type_opt,
        };
        let factor_type_group_0_built =
            FactorTypeGroup::VariableTypeFactorTypeOpt(factor_type_group_0_built);
        self.push(ASTType::FactorTypeGroup(factor_type_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_type_group_1(&mut self, _fixed_type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let fixed_type = pop_item!(self, fixed_type, FixedType, context);
        let factor_type_group_1_built = FactorTypeGroupFixedType {
            fixed_type: Box::new(fixed_type),
        };
        let factor_type_group_1_built = FactorTypeGroup::FixedType(factor_type_group_1_built);
        self.push(ASTType::FactorTypeGroup(factor_type_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_type_opt_0(&mut self, _width: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let width = pop_item!(self, width, Width, context);
        let factor_type_opt_0_built = FactorTypeOpt {
            width: Box::new(width),
        };
        self.push(
            ASTType::FactorTypeOpt(Some(factor_type_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn factor_type_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::FactorTypeOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type(
        &mut self,
        _scalar_type_list: &ParseTreeType<'t>,
        _scalar_type_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scalar_type_group = pop_item!(self, scalar_type_group, ScalarTypeGroup, context);
        let scalar_type_list =
            pop_and_reverse_item!(self, scalar_type_list, ScalarTypeList, context);
        let scalar_type_built = ScalarType {
            scalar_type_list,
            scalar_type_group: Box::new(scalar_type_group),
        };
        self.user_grammar.scalar_type(&scalar_type_built)?;
        self.push(ASTType::ScalarType(scalar_type_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type_group_0(
        &mut self,
        _user_defined_type: &ParseTreeType<'t>,
        _scalar_type_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scalar_type_opt = pop_item!(self, scalar_type_opt, ScalarTypeOpt, context);
        let user_defined_type = pop_item!(self, user_defined_type, UserDefinedType, context);
        let scalar_type_group_0_built = ScalarTypeGroupUserDefinedTypeScalarTypeOpt {
            user_defined_type: Box::new(user_defined_type),
            scalar_type_opt,
        };
        let scalar_type_group_0_built =
            ScalarTypeGroup::UserDefinedTypeScalarTypeOpt(scalar_type_group_0_built);
        self.push(ASTType::ScalarTypeGroup(scalar_type_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type_group_1(&mut self, _factor_type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let factor_type = pop_item!(self, factor_type, FactorType, context);
        let scalar_type_group_1_built = ScalarTypeGroupFactorType {
            factor_type: Box::new(factor_type),
        };
        let scalar_type_group_1_built = ScalarTypeGroup::FactorType(scalar_type_group_1_built);
        self.push(ASTType::ScalarTypeGroup(scalar_type_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type_list_0(
        &mut self,
        _type_modifier: &ParseTreeType<'t>,
        _scalar_type_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut scalar_type_list = pop_item!(self, scalar_type_list, ScalarTypeList, context);
        let type_modifier = pop_item!(self, type_modifier, TypeModifier, context);
        let scalar_type_list_0_built = ScalarTypeList {
            type_modifier: Box::new(type_modifier),
        };
        scalar_type_list.push(scalar_type_list_0_built);
        self.push(ASTType::ScalarTypeList(scalar_type_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scalar_type_list_1_built = Vec::new();
        self.push(ASTType::ScalarTypeList(scalar_type_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type_opt_0(&mut self, _width: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let width = pop_item!(self, width, Width, context);
        let scalar_type_opt_0_built = ScalarTypeOpt {
            width: Box::new(width),
        };
        self.push(
            ASTType::ScalarTypeOpt(Some(scalar_type_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn scalar_type_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ScalarTypeOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_type(
        &mut self,
        _scalar_type: &ParseTreeType<'t>,
        _array_type_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_type_opt = pop_item!(self, array_type_opt, ArrayTypeOpt, context);
        let scalar_type = pop_item!(self, scalar_type, ScalarType, context);
        let array_type_built = ArrayType {
            scalar_type: Box::new(scalar_type),
            array_type_opt,
        };
        self.user_grammar.array_type(&array_type_built)?;
        self.push(ASTType::ArrayType(array_type_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_type_opt_0(&mut self, _array: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array = pop_item!(self, array, Array, context);
        let array_type_opt_0_built = ArrayTypeOpt {
            array: Box::new(array),
        };
        self.push(ASTType::ArrayTypeOpt(Some(array_type_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn array_type_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ArrayTypeOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_0(&mut self, _u32: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u32 = pop_item!(self, u32, U32, context);
        let casting_type_0_built = CastingTypeU32 { u32: Box::new(u32) };
        let casting_type_0_built = CastingType::U32(casting_type_0_built);
        self.user_grammar.casting_type(&casting_type_0_built)?;
        self.push(ASTType::CastingType(casting_type_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_1(&mut self, _u64: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let u64 = pop_item!(self, u64, U64, context);
        let casting_type_1_built = CastingTypeU64 { u64: Box::new(u64) };
        let casting_type_1_built = CastingType::U64(casting_type_1_built);
        self.user_grammar.casting_type(&casting_type_1_built)?;
        self.push(ASTType::CastingType(casting_type_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_2(&mut self, _i32: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i32 = pop_item!(self, i32, I32, context);
        let casting_type_2_built = CastingTypeI32 { i32: Box::new(i32) };
        let casting_type_2_built = CastingType::I32(casting_type_2_built);
        self.user_grammar.casting_type(&casting_type_2_built)?;
        self.push(ASTType::CastingType(casting_type_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_3(&mut self, _i64: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let i64 = pop_item!(self, i64, I64, context);
        let casting_type_3_built = CastingTypeI64 { i64: Box::new(i64) };
        let casting_type_3_built = CastingType::I64(casting_type_3_built);
        self.user_grammar.casting_type(&casting_type_3_built)?;
        self.push(ASTType::CastingType(casting_type_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_4(&mut self, _f32: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f32 = pop_item!(self, f32, F32, context);
        let casting_type_4_built = CastingTypeF32 { f32: Box::new(f32) };
        let casting_type_4_built = CastingType::F32(casting_type_4_built);
        self.user_grammar.casting_type(&casting_type_4_built)?;
        self.push(ASTType::CastingType(casting_type_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_5(&mut self, _f64: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let f64 = pop_item!(self, f64, F64, context);
        let casting_type_5_built = CastingTypeF64 { f64: Box::new(f64) };
        let casting_type_5_built = CastingType::F64(casting_type_5_built);
        self.user_grammar.casting_type(&casting_type_5_built)?;
        self.push(ASTType::CastingType(casting_type_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_6(&mut self, _clock: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock = pop_item!(self, clock, Clock, context);
        let casting_type_6_built = CastingTypeClock {
            clock: Box::new(clock),
        };
        let casting_type_6_built = CastingType::Clock(casting_type_6_built);
        self.user_grammar.casting_type(&casting_type_6_built)?;
        self.push(ASTType::CastingType(casting_type_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_7(&mut self, _clock_posedge: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_posedge = pop_item!(self, clock_posedge, ClockPosedge, context);
        let casting_type_7_built = CastingTypeClockPosedge {
            clock_posedge: Box::new(clock_posedge),
        };
        let casting_type_7_built = CastingType::ClockPosedge(casting_type_7_built);
        self.user_grammar.casting_type(&casting_type_7_built)?;
        self.push(ASTType::CastingType(casting_type_7_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_8(&mut self, _clock_negedge: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_negedge = pop_item!(self, clock_negedge, ClockNegedge, context);
        let casting_type_8_built = CastingTypeClockNegedge {
            clock_negedge: Box::new(clock_negedge),
        };
        let casting_type_8_built = CastingType::ClockNegedge(casting_type_8_built);
        self.user_grammar.casting_type(&casting_type_8_built)?;
        self.push(ASTType::CastingType(casting_type_8_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_9(&mut self, _reset: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset = pop_item!(self, reset, Reset, context);
        let casting_type_9_built = CastingTypeReset {
            reset: Box::new(reset),
        };
        let casting_type_9_built = CastingType::Reset(casting_type_9_built);
        self.user_grammar.casting_type(&casting_type_9_built)?;
        self.push(ASTType::CastingType(casting_type_9_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_10(&mut self, _reset_async_high: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_high = pop_item!(self, reset_async_high, ResetAsyncHigh, context);
        let casting_type_10_built = CastingTypeResetAsyncHigh {
            reset_async_high: Box::new(reset_async_high),
        };
        let casting_type_10_built = CastingType::ResetAsyncHigh(casting_type_10_built);
        self.user_grammar.casting_type(&casting_type_10_built)?;
        self.push(ASTType::CastingType(casting_type_10_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_11(&mut self, _reset_async_low: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_async_low = pop_item!(self, reset_async_low, ResetAsyncLow, context);
        let casting_type_11_built = CastingTypeResetAsyncLow {
            reset_async_low: Box::new(reset_async_low),
        };
        let casting_type_11_built = CastingType::ResetAsyncLow(casting_type_11_built);
        self.user_grammar.casting_type(&casting_type_11_built)?;
        self.push(ASTType::CastingType(casting_type_11_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_12(&mut self, _reset_sync_high: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_high = pop_item!(self, reset_sync_high, ResetSyncHigh, context);
        let casting_type_12_built = CastingTypeResetSyncHigh {
            reset_sync_high: Box::new(reset_sync_high),
        };
        let casting_type_12_built = CastingType::ResetSyncHigh(casting_type_12_built);
        self.user_grammar.casting_type(&casting_type_12_built)?;
        self.push(ASTType::CastingType(casting_type_12_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_13(&mut self, _reset_sync_low: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let reset_sync_low = pop_item!(self, reset_sync_low, ResetSyncLow, context);
        let casting_type_13_built = CastingTypeResetSyncLow {
            reset_sync_low: Box::new(reset_sync_low),
        };
        let casting_type_13_built = CastingType::ResetSyncLow(casting_type_13_built);
        self.user_grammar.casting_type(&casting_type_13_built)?;
        self.push(ASTType::CastingType(casting_type_13_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn casting_type_14(&mut self, _user_defined_type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let user_defined_type = pop_item!(self, user_defined_type, UserDefinedType, context);
        let casting_type_14_built = CastingTypeUserDefinedType {
            user_defined_type: Box::new(user_defined_type),
        };
        let casting_type_14_built = CastingType::UserDefinedType(casting_type_14_built);
        self.user_grammar.casting_type(&casting_type_14_built)?;
        self.push(ASTType::CastingType(casting_type_14_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn clock_domain(
        &mut self,
        _back_quote: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let identifier = pop_item!(self, identifier, Identifier, context);
        let back_quote = pop_item!(self, back_quote, BackQuote, context);
        let clock_domain_built = ClockDomain {
            back_quote: Box::new(back_quote),
            identifier: Box::new(identifier),
        };
        self.user_grammar.clock_domain(&clock_domain_built)?;
        self.push(ASTType::ClockDomain(clock_domain_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_block(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _statement_block_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let statement_block_list =
            pop_and_reverse_item!(self, statement_block_list, StatementBlockList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let statement_block_built = StatementBlock {
            l_brace: Box::new(l_brace),
            statement_block_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar.statement_block(&statement_block_built)?;
        self.push(ASTType::StatementBlock(statement_block_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_block_list_0(
        &mut self,
        _statement_block_item: &ParseTreeType<'t>,
        _statement_block_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut statement_block_list =
            pop_item!(self, statement_block_list, StatementBlockList, context);
        let statement_block_item =
            pop_item!(self, statement_block_item, StatementBlockItem, context);
        let statement_block_list_0_built = StatementBlockList {
            statement_block_item: Box::new(statement_block_item),
        };
        statement_block_list.push(statement_block_list_0_built);
        self.push(ASTType::StatementBlockList(statement_block_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_block_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block_list_1_built = Vec::new();
        self.push(
            ASTType::StatementBlockList(statement_block_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_block_item_0(&mut self, _var_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let var_declaration = pop_item!(self, var_declaration, VarDeclaration, context);
        let statement_block_item_0_built = StatementBlockItemVarDeclaration {
            var_declaration: Box::new(var_declaration),
        };
        let statement_block_item_0_built =
            StatementBlockItem::VarDeclaration(statement_block_item_0_built);
        self.user_grammar
            .statement_block_item(&statement_block_item_0_built)?;
        self.push(
            ASTType::StatementBlockItem(statement_block_item_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_block_item_1(&mut self, _let_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let let_statement = pop_item!(self, let_statement, LetStatement, context);
        let statement_block_item_1_built = StatementBlockItemLetStatement {
            let_statement: Box::new(let_statement),
        };
        let statement_block_item_1_built =
            StatementBlockItem::LetStatement(statement_block_item_1_built);
        self.user_grammar
            .statement_block_item(&statement_block_item_1_built)?;
        self.push(
            ASTType::StatementBlockItem(statement_block_item_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_block_item_2(&mut self, _statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement = pop_item!(self, statement, Statement, context);
        let statement_block_item_2_built = StatementBlockItemStatement {
            statement: Box::new(statement),
        };
        let statement_block_item_2_built =
            StatementBlockItem::Statement(statement_block_item_2_built);
        self.user_grammar
            .statement_block_item(&statement_block_item_2_built)?;
        self.push(
            ASTType::StatementBlockItem(statement_block_item_2_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_0(&mut self, _identifier_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let identifier_statement =
            pop_item!(self, identifier_statement, IdentifierStatement, context);
        let statement_0_built = StatementIdentifierStatement {
            identifier_statement: Box::new(identifier_statement),
        };
        let statement_0_built = Statement::IdentifierStatement(statement_0_built);
        self.user_grammar.statement(&statement_0_built)?;
        self.push(ASTType::Statement(statement_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_1(&mut self, _if_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_statement = pop_item!(self, if_statement, IfStatement, context);
        let statement_1_built = StatementIfStatement {
            if_statement: Box::new(if_statement),
        };
        let statement_1_built = Statement::IfStatement(statement_1_built);
        self.user_grammar.statement(&statement_1_built)?;
        self.push(ASTType::Statement(statement_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_2(&mut self, _if_reset_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_reset_statement = pop_item!(self, if_reset_statement, IfResetStatement, context);
        let statement_2_built = StatementIfResetStatement {
            if_reset_statement: Box::new(if_reset_statement),
        };
        let statement_2_built = Statement::IfResetStatement(statement_2_built);
        self.user_grammar.statement(&statement_2_built)?;
        self.push(ASTType::Statement(statement_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_3(&mut self, _return_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let return_statement = pop_item!(self, return_statement, ReturnStatement, context);
        let statement_3_built = StatementReturnStatement {
            return_statement: Box::new(return_statement),
        };
        let statement_3_built = Statement::ReturnStatement(statement_3_built);
        self.user_grammar.statement(&statement_3_built)?;
        self.push(ASTType::Statement(statement_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_4(&mut self, _break_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let break_statement = pop_item!(self, break_statement, BreakStatement, context);
        let statement_4_built = StatementBreakStatement {
            break_statement: Box::new(break_statement),
        };
        let statement_4_built = Statement::BreakStatement(statement_4_built);
        self.user_grammar.statement(&statement_4_built)?;
        self.push(ASTType::Statement(statement_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_5(&mut self, _for_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let for_statement = pop_item!(self, for_statement, ForStatement, context);
        let statement_5_built = StatementForStatement {
            for_statement: Box::new(for_statement),
        };
        let statement_5_built = Statement::ForStatement(statement_5_built);
        self.user_grammar.statement(&statement_5_built)?;
        self.push(ASTType::Statement(statement_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_6(&mut self, _case_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_statement = pop_item!(self, case_statement, CaseStatement, context);
        let statement_6_built = StatementCaseStatement {
            case_statement: Box::new(case_statement),
        };
        let statement_6_built = Statement::CaseStatement(statement_6_built);
        self.user_grammar.statement(&statement_6_built)?;
        self.push(ASTType::Statement(statement_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn statement_7(&mut self, _switch_statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_statement = pop_item!(self, switch_statement, SwitchStatement, context);
        let statement_7_built = StatementSwitchStatement {
            switch_statement: Box::new(switch_statement),
        };
        let statement_7_built = Statement::SwitchStatement(statement_7_built);
        self.user_grammar.statement(&statement_7_built)?;
        self.push(ASTType::Statement(statement_7_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_statement(
        &mut self,
        _let: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _let_statement_opt: &ParseTreeType<'t>,
        _array_type: &ParseTreeType<'t>,
        _equ: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let expression = pop_item!(self, expression, Expression, context);
        let equ = pop_item!(self, equ, Equ, context);
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let let_statement_opt = pop_item!(self, let_statement_opt, LetStatementOpt, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#let = pop_item!(self, r#let, Let, context);
        let let_statement_built = LetStatement {
            r#let: Box::new(r#let),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            let_statement_opt,
            array_type: Box::new(array_type),
            equ: Box::new(equ),
            expression: Box::new(expression),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar.let_statement(&let_statement_built)?;
        self.push(ASTType::LetStatement(let_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_statement_opt_0(&mut self, _clock_domain: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_domain = pop_item!(self, clock_domain, ClockDomain, context);
        let let_statement_opt_0_built = LetStatementOpt {
            clock_domain: Box::new(clock_domain),
        };
        self.push(
            ASTType::LetStatementOpt(Some(let_statement_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_statement_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::LetStatementOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn identifier_statement(
        &mut self,
        _expression_identifier: &ParseTreeType<'t>,
        _identifier_statement_group: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let identifier_statement_group = pop_item!(
            self,
            identifier_statement_group,
            IdentifierStatementGroup,
            context
        );
        let expression_identifier =
            pop_item!(self, expression_identifier, ExpressionIdentifier, context);
        let identifier_statement_built = IdentifierStatement {
            expression_identifier: Box::new(expression_identifier),
            identifier_statement_group: Box::new(identifier_statement_group),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .identifier_statement(&identifier_statement_built)?;
        self.push(
            ASTType::IdentifierStatement(identifier_statement_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn identifier_statement_group_0(&mut self, _function_call: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let function_call = pop_item!(self, function_call, FunctionCall, context);
        let identifier_statement_group_0_built = IdentifierStatementGroupFunctionCall {
            function_call: Box::new(function_call),
        };
        let identifier_statement_group_0_built =
            IdentifierStatementGroup::FunctionCall(identifier_statement_group_0_built);
        self.push(
            ASTType::IdentifierStatementGroup(identifier_statement_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn identifier_statement_group_1(&mut self, _assignment: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assignment = pop_item!(self, assignment, Assignment, context);
        let identifier_statement_group_1_built = IdentifierStatementGroupAssignment {
            assignment: Box::new(assignment),
        };
        let identifier_statement_group_1_built =
            IdentifierStatementGroup::Assignment(identifier_statement_group_1_built);
        self.push(
            ASTType::IdentifierStatementGroup(identifier_statement_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assignment(
        &mut self,
        _assignment_group: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let assignment_group = pop_item!(self, assignment_group, AssignmentGroup, context);
        let assignment_built = Assignment {
            assignment_group: Box::new(assignment_group),
            expression: Box::new(expression),
        };
        self.user_grammar.assignment(&assignment_built)?;
        self.push(ASTType::Assignment(assignment_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assignment_group_0(&mut self, _equ: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let equ = pop_item!(self, equ, Equ, context);
        let assignment_group_0_built = AssignmentGroupEqu { equ: Box::new(equ) };
        let assignment_group_0_built = AssignmentGroup::Equ(assignment_group_0_built);
        self.push(ASTType::AssignmentGroup(assignment_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assignment_group_1(&mut self, _assignment_operator: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assignment_operator = pop_item!(self, assignment_operator, AssignmentOperator, context);
        let assignment_group_1_built = AssignmentGroupAssignmentOperator {
            assignment_operator: Box::new(assignment_operator),
        };
        let assignment_group_1_built =
            AssignmentGroup::AssignmentOperator(assignment_group_1_built);
        self.push(ASTType::AssignmentGroup(assignment_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_statement(
        &mut self,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
        _if_statement_list: &ParseTreeType<'t>,
        _if_statement_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_statement_opt = pop_item!(self, if_statement_opt, IfStatementOpt, context);
        let if_statement_list =
            pop_and_reverse_item!(self, if_statement_list, IfStatementList, context);
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let if_statement_built = IfStatement {
            r#if: Box::new(r#if),
            expression: Box::new(expression),
            statement_block: Box::new(statement_block),
            if_statement_list,
            if_statement_opt,
        };
        self.user_grammar.if_statement(&if_statement_built)?;
        self.push(ASTType::IfStatement(if_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_statement_list_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
        _if_statement_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut if_statement_list = pop_item!(self, if_statement_list, IfStatementList, context);
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let if_statement_list_0_built = IfStatementList {
            statement_block: Box::new(statement_block),
            expression: Box::new(expression),
            r#if: Box::new(r#if),
            r#else: Box::new(r#else),
        };
        if_statement_list.push(if_statement_list_0_built);
        self.push(ASTType::IfStatementList(if_statement_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_statement_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_statement_list_1_built = Vec::new();
        self.push(ASTType::IfStatementList(if_statement_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_statement_opt_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let if_statement_opt_0_built = IfStatementOpt {
            r#else: Box::new(r#else),
            statement_block: Box::new(statement_block),
        };
        self.push(
            ASTType::IfStatementOpt(Some(if_statement_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_statement_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::IfStatementOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_statement(
        &mut self,
        _if_reset: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
        _if_reset_statement_list: &ParseTreeType<'t>,
        _if_reset_statement_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_reset_statement_opt =
            pop_item!(self, if_reset_statement_opt, IfResetStatementOpt, context);
        let if_reset_statement_list =
            pop_and_reverse_item!(self, if_reset_statement_list, IfResetStatementList, context);
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let if_reset = pop_item!(self, if_reset, IfReset, context);
        let if_reset_statement_built = IfResetStatement {
            if_reset: Box::new(if_reset),
            statement_block: Box::new(statement_block),
            if_reset_statement_list,
            if_reset_statement_opt,
        };
        self.user_grammar
            .if_reset_statement(&if_reset_statement_built)?;
        self.push(ASTType::IfResetStatement(if_reset_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_statement_list_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
        _if_reset_statement_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut if_reset_statement_list =
            pop_item!(self, if_reset_statement_list, IfResetStatementList, context);
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let if_reset_statement_list_0_built = IfResetStatementList {
            statement_block: Box::new(statement_block),
            expression: Box::new(expression),
            r#if: Box::new(r#if),
            r#else: Box::new(r#else),
        };
        if_reset_statement_list.push(if_reset_statement_list_0_built);
        self.push(
            ASTType::IfResetStatementList(if_reset_statement_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_statement_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let if_reset_statement_list_1_built = Vec::new();
        self.push(
            ASTType::IfResetStatementList(if_reset_statement_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_statement_opt_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let if_reset_statement_opt_0_built = IfResetStatementOpt {
            r#else: Box::new(r#else),
            statement_block: Box::new(statement_block),
        };
        self.push(
            ASTType::IfResetStatementOpt(Some(if_reset_statement_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn if_reset_statement_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::IfResetStatementOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn return_statement(
        &mut self,
        _return: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#return = pop_item!(self, r#return, Return, context);
        let return_statement_built = ReturnStatement {
            r#return: Box::new(r#return),
            expression: Box::new(expression),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .return_statement(&return_statement_built)?;
        self.push(ASTType::ReturnStatement(return_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn break_statement(
        &mut self,
        _break: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let r#break = pop_item!(self, r#break, Break, context);
        let break_statement_built = BreakStatement {
            r#break: Box::new(r#break),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar.break_statement(&break_statement_built)?;
        self.push(ASTType::BreakStatement(break_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn for_statement(
        &mut self,
        _for: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _scalar_type: &ParseTreeType<'t>,
        _in: &ParseTreeType<'t>,
        _range: &ParseTreeType<'t>,
        _for_statement_opt: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let for_statement_opt = pop_item!(self, for_statement_opt, ForStatementOpt, context);
        let range = pop_item!(self, range, Range, context);
        let r#in = pop_item!(self, r#in, In, context);
        let scalar_type = pop_item!(self, scalar_type, ScalarType, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#for = pop_item!(self, r#for, For, context);
        let for_statement_built = ForStatement {
            r#for: Box::new(r#for),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            scalar_type: Box::new(scalar_type),
            r#in: Box::new(r#in),
            range: Box::new(range),
            for_statement_opt,
            statement_block: Box::new(statement_block),
        };
        self.user_grammar.for_statement(&for_statement_built)?;
        self.push(ASTType::ForStatement(for_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn for_statement_opt_0(
        &mut self,
        _step: &ParseTreeType<'t>,
        _assignment_operator: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let assignment_operator = pop_item!(self, assignment_operator, AssignmentOperator, context);
        let step = pop_item!(self, step, Step, context);
        let for_statement_opt_0_built = ForStatementOpt {
            step: Box::new(step),
            assignment_operator: Box::new(assignment_operator),
            expression: Box::new(expression),
        };
        self.push(
            ASTType::ForStatementOpt(Some(for_statement_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn for_statement_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ForStatementOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_statement(
        &mut self,
        _case: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _case_statement_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let case_statement_list =
            pop_and_reverse_item!(self, case_statement_list, CaseStatementList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let expression = pop_item!(self, expression, Expression, context);
        let case = pop_item!(self, case, Case, context);
        let case_statement_built = CaseStatement {
            case: Box::new(case),
            expression: Box::new(expression),
            l_brace: Box::new(l_brace),
            case_statement_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar.case_statement(&case_statement_built)?;
        self.push(ASTType::CaseStatement(case_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_statement_list_0(
        &mut self,
        _case_item: &ParseTreeType<'t>,
        _case_statement_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut case_statement_list =
            pop_item!(self, case_statement_list, CaseStatementList, context);
        let case_item = pop_item!(self, case_item, CaseItem, context);
        let case_statement_list_0_built = CaseStatementList {
            case_item: Box::new(case_item),
        };
        case_statement_list.push(case_statement_list_0_built);
        self.push(ASTType::CaseStatementList(case_statement_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_statement_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_statement_list_1_built = Vec::new();
        self.push(
            ASTType::CaseStatementList(case_statement_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_item(
        &mut self,
        _case_item_group: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _case_item_group0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_item_group0 = pop_item!(self, case_item_group0, CaseItemGroup0, context);
        let colon = pop_item!(self, colon, Colon, context);
        let case_item_group = pop_item!(self, case_item_group, CaseItemGroup, context);
        let case_item_built = CaseItem {
            case_item_group: Box::new(case_item_group),
            colon: Box::new(colon),
            case_item_group0: Box::new(case_item_group0),
        };
        self.user_grammar.case_item(&case_item_built)?;
        self.push(ASTType::CaseItem(case_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_item_group0_0(&mut self, _statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement = pop_item!(self, statement, Statement, context);
        let case_item_group0_0_built = CaseItemGroup0Statement {
            statement: Box::new(statement),
        };
        let case_item_group0_0_built = CaseItemGroup0::Statement(case_item_group0_0_built);
        self.push(ASTType::CaseItemGroup0(case_item_group0_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_item_group0_1(&mut self, _statement_block: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let case_item_group0_1_built = CaseItemGroup0StatementBlock {
            statement_block: Box::new(statement_block),
        };
        let case_item_group0_1_built = CaseItemGroup0::StatementBlock(case_item_group0_1_built);
        self.push(ASTType::CaseItemGroup0(case_item_group0_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_item_group_0(&mut self, _case_condition: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_condition = pop_item!(self, case_condition, CaseCondition, context);
        let case_item_group_0_built = CaseItemGroupCaseCondition {
            case_condition: Box::new(case_condition),
        };
        let case_item_group_0_built = CaseItemGroup::CaseCondition(case_item_group_0_built);
        self.push(ASTType::CaseItemGroup(case_item_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_item_group_1(&mut self, _defaul: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let defaul = pop_item!(self, defaul, Defaul, context);
        let case_item_group_1_built = CaseItemGroupDefaul {
            defaul: Box::new(defaul),
        };
        let case_item_group_1_built = CaseItemGroup::Defaul(case_item_group_1_built);
        self.push(ASTType::CaseItemGroup(case_item_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_condition(
        &mut self,
        _range_item: &ParseTreeType<'t>,
        _case_condition_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_condition_list =
            pop_and_reverse_item!(self, case_condition_list, CaseConditionList, context);
        let range_item = pop_item!(self, range_item, RangeItem, context);
        let case_condition_built = CaseCondition {
            range_item: Box::new(range_item),
            case_condition_list,
        };
        self.user_grammar.case_condition(&case_condition_built)?;
        self.push(ASTType::CaseCondition(case_condition_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_condition_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _range_item: &ParseTreeType<'t>,
        _case_condition_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut case_condition_list =
            pop_item!(self, case_condition_list, CaseConditionList, context);
        let range_item = pop_item!(self, range_item, RangeItem, context);
        let comma = pop_item!(self, comma, Comma, context);
        let case_condition_list_0_built = CaseConditionList {
            range_item: Box::new(range_item),
            comma: Box::new(comma),
        };
        case_condition_list.push(case_condition_list_0_built);
        self.push(ASTType::CaseConditionList(case_condition_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn case_condition_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let case_condition_list_1_built = Vec::new();
        self.push(
            ASTType::CaseConditionList(case_condition_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_statement(
        &mut self,
        _switch: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _switch_statement_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let switch_statement_list =
            pop_and_reverse_item!(self, switch_statement_list, SwitchStatementList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let switch = pop_item!(self, switch, Switch, context);
        let switch_statement_built = SwitchStatement {
            switch: Box::new(switch),
            l_brace: Box::new(l_brace),
            switch_statement_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .switch_statement(&switch_statement_built)?;
        self.push(ASTType::SwitchStatement(switch_statement_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_statement_list_0(
        &mut self,
        _switch_item: &ParseTreeType<'t>,
        _switch_statement_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut switch_statement_list =
            pop_item!(self, switch_statement_list, SwitchStatementList, context);
        let switch_item = pop_item!(self, switch_item, SwitchItem, context);
        let switch_statement_list_0_built = SwitchStatementList {
            switch_item: Box::new(switch_item),
        };
        switch_statement_list.push(switch_statement_list_0_built);
        self.push(ASTType::SwitchStatementList(switch_statement_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_statement_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_statement_list_1_built = Vec::new();
        self.push(
            ASTType::SwitchStatementList(switch_statement_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_item(
        &mut self,
        _switch_item_group: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _switch_item_group0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_item_group0 = pop_item!(self, switch_item_group0, SwitchItemGroup0, context);
        let colon = pop_item!(self, colon, Colon, context);
        let switch_item_group = pop_item!(self, switch_item_group, SwitchItemGroup, context);
        let switch_item_built = SwitchItem {
            switch_item_group: Box::new(switch_item_group),
            colon: Box::new(colon),
            switch_item_group0: Box::new(switch_item_group0),
        };
        self.user_grammar.switch_item(&switch_item_built)?;
        self.push(ASTType::SwitchItem(switch_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_item_group0_0(&mut self, _statement: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement = pop_item!(self, statement, Statement, context);
        let switch_item_group0_0_built = SwitchItemGroup0Statement {
            statement: Box::new(statement),
        };
        let switch_item_group0_0_built = SwitchItemGroup0::Statement(switch_item_group0_0_built);
        self.push(
            ASTType::SwitchItemGroup0(switch_item_group0_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_item_group0_1(&mut self, _statement_block: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let switch_item_group0_1_built = SwitchItemGroup0StatementBlock {
            statement_block: Box::new(statement_block),
        };
        let switch_item_group0_1_built =
            SwitchItemGroup0::StatementBlock(switch_item_group0_1_built);
        self.push(
            ASTType::SwitchItemGroup0(switch_item_group0_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_item_group_0(&mut self, _switch_condition: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_condition = pop_item!(self, switch_condition, SwitchCondition, context);
        let switch_item_group_0_built = SwitchItemGroupSwitchCondition {
            switch_condition: Box::new(switch_condition),
        };
        let switch_item_group_0_built = SwitchItemGroup::SwitchCondition(switch_item_group_0_built);
        self.push(ASTType::SwitchItemGroup(switch_item_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_item_group_1(&mut self, _defaul: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let defaul = pop_item!(self, defaul, Defaul, context);
        let switch_item_group_1_built = SwitchItemGroupDefaul {
            defaul: Box::new(defaul),
        };
        let switch_item_group_1_built = SwitchItemGroup::Defaul(switch_item_group_1_built);
        self.push(ASTType::SwitchItemGroup(switch_item_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_condition(
        &mut self,
        _expression: &ParseTreeType<'t>,
        _switch_condition_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_condition_list =
            pop_and_reverse_item!(self, switch_condition_list, SwitchConditionList, context);
        let expression = pop_item!(self, expression, Expression, context);
        let switch_condition_built = SwitchCondition {
            expression: Box::new(expression),
            switch_condition_list,
        };
        self.user_grammar
            .switch_condition(&switch_condition_built)?;
        self.push(ASTType::SwitchCondition(switch_condition_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_condition_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _switch_condition_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut switch_condition_list =
            pop_item!(self, switch_condition_list, SwitchConditionList, context);
        let expression = pop_item!(self, expression, Expression, context);
        let comma = pop_item!(self, comma, Comma, context);
        let switch_condition_list_0_built = SwitchConditionList {
            expression: Box::new(expression),
            comma: Box::new(comma),
        };
        switch_condition_list.push(switch_condition_list_0_built);
        self.push(ASTType::SwitchConditionList(switch_condition_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn switch_condition_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let switch_condition_list_1_built = Vec::new();
        self.push(
            ASTType::SwitchConditionList(switch_condition_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute(
        &mut self,
        _hash: &ParseTreeType<'t>,
        _l_bracket: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _attribute_opt: &ParseTreeType<'t>,
        _r_bracket: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_bracket = pop_item!(self, r_bracket, RBracket, context);
        let attribute_opt = pop_item!(self, attribute_opt, AttributeOpt, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let l_bracket = pop_item!(self, l_bracket, LBracket, context);
        let hash = pop_item!(self, hash, Hash, context);
        let attribute_built = Attribute {
            hash: Box::new(hash),
            l_bracket: Box::new(l_bracket),
            identifier: Box::new(identifier),
            attribute_opt,
            r_bracket: Box::new(r_bracket),
        };
        self.user_grammar.attribute(&attribute_built)?;
        self.push(ASTType::Attribute(attribute_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_opt_0(
        &mut self,
        _l_paren: &ParseTreeType<'t>,
        _attribute_list: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let attribute_list = pop_item!(self, attribute_list, AttributeList, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let attribute_opt_0_built = AttributeOpt {
            l_paren: Box::new(l_paren),
            attribute_list: Box::new(attribute_list),
            r_paren: Box::new(r_paren),
        };
        self.push(ASTType::AttributeOpt(Some(attribute_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::AttributeOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_list(
        &mut self,
        _attribute_item: &ParseTreeType<'t>,
        _attribute_list_list: &ParseTreeType<'t>,
        _attribute_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let attribute_list_opt = pop_item!(self, attribute_list_opt, AttributeListOpt, context);
        let attribute_list_list =
            pop_and_reverse_item!(self, attribute_list_list, AttributeListList, context);
        let attribute_item = pop_item!(self, attribute_item, AttributeItem, context);
        let attribute_list_built = AttributeList {
            attribute_item: Box::new(attribute_item),
            attribute_list_list,
            attribute_list_opt,
        };
        self.user_grammar.attribute_list(&attribute_list_built)?;
        self.push(ASTType::AttributeList(attribute_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _attribute_item: &ParseTreeType<'t>,
        _attribute_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut attribute_list_list =
            pop_item!(self, attribute_list_list, AttributeListList, context);
        let attribute_item = pop_item!(self, attribute_item, AttributeItem, context);
        let comma = pop_item!(self, comma, Comma, context);
        let attribute_list_list_0_built = AttributeListList {
            attribute_item: Box::new(attribute_item),
            comma: Box::new(comma),
        };
        attribute_list_list.push(attribute_list_list_0_built);
        self.push(ASTType::AttributeListList(attribute_list_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let attribute_list_list_1_built = Vec::new();
        self.push(
            ASTType::AttributeListList(attribute_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let attribute_list_opt_0_built = AttributeListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::AttributeListOpt(Some(attribute_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::AttributeListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_item_0(&mut self, _identifier: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let identifier = pop_item!(self, identifier, Identifier, context);
        let attribute_item_0_built = AttributeItemIdentifier {
            identifier: Box::new(identifier),
        };
        let attribute_item_0_built = AttributeItem::Identifier(attribute_item_0_built);
        self.user_grammar.attribute_item(&attribute_item_0_built)?;
        self.push(ASTType::AttributeItem(attribute_item_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn attribute_item_1(&mut self, _string_literal: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let string_literal = pop_item!(self, string_literal, StringLiteral, context);
        let attribute_item_1_built = AttributeItemStringLiteral {
            string_literal: Box::new(string_literal),
        };
        let attribute_item_1_built = AttributeItem::StringLiteral(attribute_item_1_built);
        self.user_grammar.attribute_item(&attribute_item_1_built)?;
        self.push(ASTType::AttributeItem(attribute_item_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_declaration(
        &mut self,
        _let: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _let_declaration_opt: &ParseTreeType<'t>,
        _array_type: &ParseTreeType<'t>,
        _equ: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let expression = pop_item!(self, expression, Expression, context);
        let equ = pop_item!(self, equ, Equ, context);
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let let_declaration_opt = pop_item!(self, let_declaration_opt, LetDeclarationOpt, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#let = pop_item!(self, r#let, Let, context);
        let let_declaration_built = LetDeclaration {
            r#let: Box::new(r#let),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            let_declaration_opt,
            array_type: Box::new(array_type),
            equ: Box::new(equ),
            expression: Box::new(expression),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar.let_declaration(&let_declaration_built)?;
        self.push(ASTType::LetDeclaration(let_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_declaration_opt_0(&mut self, _clock_domain: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_domain = pop_item!(self, clock_domain, ClockDomain, context);
        let let_declaration_opt_0_built = LetDeclarationOpt {
            clock_domain: Box::new(clock_domain),
        };
        self.push(
            ASTType::LetDeclarationOpt(Some(let_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn let_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::LetDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn var_declaration(
        &mut self,
        _var: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _var_declaration_opt: &ParseTreeType<'t>,
        _array_type: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let var_declaration_opt = pop_item!(self, var_declaration_opt, VarDeclarationOpt, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let var = pop_item!(self, var, Var, context);
        let var_declaration_built = VarDeclaration {
            var: Box::new(var),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            var_declaration_opt,
            array_type: Box::new(array_type),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar.var_declaration(&var_declaration_built)?;
        self.push(ASTType::VarDeclaration(var_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn var_declaration_opt_0(&mut self, _clock_domain: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_domain = pop_item!(self, clock_domain, ClockDomain, context);
        let var_declaration_opt_0_built = VarDeclarationOpt {
            clock_domain: Box::new(clock_domain),
        };
        self.push(
            ASTType::VarDeclarationOpt(Some(var_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn var_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::VarDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn const_declaration(
        &mut self,
        _const: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _const_declaration_group: &ParseTreeType<'t>,
        _equ: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let expression = pop_item!(self, expression, Expression, context);
        let equ = pop_item!(self, equ, Equ, context);
        let const_declaration_group = pop_item!(
            self,
            const_declaration_group,
            ConstDeclarationGroup,
            context
        );
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#const = pop_item!(self, r#const, Const, context);
        let const_declaration_built = ConstDeclaration {
            r#const: Box::new(r#const),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            const_declaration_group: Box::new(const_declaration_group),
            equ: Box::new(equ),
            expression: Box::new(expression),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .const_declaration(&const_declaration_built)?;
        self.push(ASTType::ConstDeclaration(const_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn const_declaration_group_0(&mut self, _array_type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let const_declaration_group_0_built = ConstDeclarationGroupArrayType {
            array_type: Box::new(array_type),
        };
        let const_declaration_group_0_built =
            ConstDeclarationGroup::ArrayType(const_declaration_group_0_built);
        self.push(
            ASTType::ConstDeclarationGroup(const_declaration_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn const_declaration_group_1(&mut self, _type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#type = pop_item!(self, r#type, Type, context);
        let const_declaration_group_1_built = ConstDeclarationGroupType {
            r#type: Box::new(r#type),
        };
        let const_declaration_group_1_built =
            ConstDeclarationGroup::Type(const_declaration_group_1_built);
        self.push(
            ASTType::ConstDeclarationGroup(const_declaration_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn type_def_declaration(
        &mut self,
        _type: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _equ: &ParseTreeType<'t>,
        _array_type: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let equ = pop_item!(self, equ, Equ, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#type = pop_item!(self, r#type, Type, context);
        let type_def_declaration_built = TypeDefDeclaration {
            r#type: Box::new(r#type),
            identifier: Box::new(identifier),
            equ: Box::new(equ),
            array_type: Box::new(array_type),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .type_def_declaration(&type_def_declaration_built)?;
        self.push(
            ASTType::TypeDefDeclaration(type_def_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_declaration(
        &mut self,
        _always_ff: &ParseTreeType<'t>,
        _always_ff_declaration_opt: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let always_ff_declaration_opt = pop_item!(
            self,
            always_ff_declaration_opt,
            AlwaysFfDeclarationOpt,
            context
        );
        let always_ff = pop_item!(self, always_ff, AlwaysFf, context);
        let always_ff_declaration_built = AlwaysFfDeclaration {
            always_ff: Box::new(always_ff),
            always_ff_declaration_opt,
            statement_block: Box::new(statement_block),
        };
        self.user_grammar
            .always_ff_declaration(&always_ff_declaration_built)?;
        self.push(
            ASTType::AlwaysFfDeclaration(always_ff_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_declaration_opt_0(
        &mut self,
        _alwayf_ff_event_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let alwayf_ff_event_list =
            pop_item!(self, alwayf_ff_event_list, AlwayfFfEventList, context);
        let always_ff_declaration_opt_0_built = AlwaysFfDeclarationOpt {
            alwayf_ff_event_list: Box::new(alwayf_ff_event_list),
        };
        self.push(
            ASTType::AlwaysFfDeclarationOpt(Some(always_ff_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::AlwaysFfDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn alwayf_ff_event_list(
        &mut self,
        _l_paren: &ParseTreeType<'t>,
        _always_ff_clock: &ParseTreeType<'t>,
        _alwayf_ff_event_list_opt: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let alwayf_ff_event_list_opt = pop_item!(
            self,
            alwayf_ff_event_list_opt,
            AlwayfFfEventListOpt,
            context
        );
        let always_ff_clock = pop_item!(self, always_ff_clock, AlwaysFfClock, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let alwayf_ff_event_list_built = AlwayfFfEventList {
            l_paren: Box::new(l_paren),
            always_ff_clock: Box::new(always_ff_clock),
            alwayf_ff_event_list_opt,
            r_paren: Box::new(r_paren),
        };
        self.user_grammar
            .alwayf_ff_event_list(&alwayf_ff_event_list_built)?;
        self.push(
            ASTType::AlwayfFfEventList(alwayf_ff_event_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn alwayf_ff_event_list_opt_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _always_ff_reset: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_ff_reset = pop_item!(self, always_ff_reset, AlwaysFfReset, context);
        let comma = pop_item!(self, comma, Comma, context);
        let alwayf_ff_event_list_opt_0_built = AlwayfFfEventListOpt {
            comma: Box::new(comma),
            always_ff_reset: Box::new(always_ff_reset),
        };
        self.push(
            ASTType::AlwayfFfEventListOpt(Some(alwayf_ff_event_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn alwayf_ff_event_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::AlwayfFfEventListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_clock(&mut self, _hierarchical_identifier: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hierarchical_identifier = pop_item!(
            self,
            hierarchical_identifier,
            HierarchicalIdentifier,
            context
        );
        let always_ff_clock_built = AlwaysFfClock {
            hierarchical_identifier: Box::new(hierarchical_identifier),
        };
        self.user_grammar.always_ff_clock(&always_ff_clock_built)?;
        self.push(ASTType::AlwaysFfClock(always_ff_clock_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_ff_reset(&mut self, _hierarchical_identifier: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let hierarchical_identifier = pop_item!(
            self,
            hierarchical_identifier,
            HierarchicalIdentifier,
            context
        );
        let always_ff_reset_built = AlwaysFfReset {
            hierarchical_identifier: Box::new(hierarchical_identifier),
        };
        self.user_grammar.always_ff_reset(&always_ff_reset_built)?;
        self.push(ASTType::AlwaysFfReset(always_ff_reset_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn always_comb_declaration(
        &mut self,
        _always_comb: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let always_comb = pop_item!(self, always_comb, AlwaysComb, context);
        let always_comb_declaration_built = AlwaysCombDeclaration {
            always_comb: Box::new(always_comb),
            statement_block: Box::new(statement_block),
        };
        self.user_grammar
            .always_comb_declaration(&always_comb_declaration_built)?;
        self.push(
            ASTType::AlwaysCombDeclaration(always_comb_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn assign_declaration(
        &mut self,
        _assign: &ParseTreeType<'t>,
        _hierarchical_identifier: &ParseTreeType<'t>,
        _equ: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let expression = pop_item!(self, expression, Expression, context);
        let equ = pop_item!(self, equ, Equ, context);
        let hierarchical_identifier = pop_item!(
            self,
            hierarchical_identifier,
            HierarchicalIdentifier,
            context
        );
        let assign = pop_item!(self, assign, Assign, context);
        let assign_declaration_built = AssignDeclaration {
            assign: Box::new(assign),
            hierarchical_identifier: Box::new(hierarchical_identifier),
            equ: Box::new(equ),
            expression: Box::new(expression),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .assign_declaration(&assign_declaration_built)?;
        self.push(
            ASTType::AssignDeclaration(assign_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_declaration(
        &mut self,
        _modport: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _modport_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let modport_list = pop_item!(self, modport_list, ModportList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let modport = pop_item!(self, modport, Modport, context);
        let modport_declaration_built = ModportDeclaration {
            modport: Box::new(modport),
            identifier: Box::new(identifier),
            l_brace: Box::new(l_brace),
            modport_list: Box::new(modport_list),
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .modport_declaration(&modport_declaration_built)?;
        self.push(
            ASTType::ModportDeclaration(modport_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_list(
        &mut self,
        _modport_group: &ParseTreeType<'t>,
        _modport_list_list: &ParseTreeType<'t>,
        _modport_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_list_opt = pop_item!(self, modport_list_opt, ModportListOpt, context);
        let modport_list_list =
            pop_and_reverse_item!(self, modport_list_list, ModportListList, context);
        let modport_group = pop_item!(self, modport_group, ModportGroup, context);
        let modport_list_built = ModportList {
            modport_group: Box::new(modport_group),
            modport_list_list,
            modport_list_opt,
        };
        self.user_grammar.modport_list(&modport_list_built)?;
        self.push(ASTType::ModportList(modport_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _modport_group: &ParseTreeType<'t>,
        _modport_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut modport_list_list = pop_item!(self, modport_list_list, ModportListList, context);
        let modport_group = pop_item!(self, modport_group, ModportGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let modport_list_list_0_built = ModportListList {
            modport_group: Box::new(modport_group),
            comma: Box::new(comma),
        };
        modport_list_list.push(modport_list_list_0_built);
        self.push(ASTType::ModportListList(modport_list_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_list_list_1_built = Vec::new();
        self.push(ASTType::ModportListList(modport_list_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let modport_list_opt_0_built = ModportListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::ModportListOpt(Some(modport_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ModportListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_group(
        &mut self,
        _modport_group_list: &ParseTreeType<'t>,
        _modport_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_group_group = pop_item!(self, modport_group_group, ModportGroupGroup, context);
        let modport_group_list =
            pop_and_reverse_item!(self, modport_group_list, ModportGroupList, context);
        let modport_group_built = ModportGroup {
            modport_group_list,
            modport_group_group: Box::new(modport_group_group),
        };
        self.user_grammar.modport_group(&modport_group_built)?;
        self.push(ASTType::ModportGroup(modport_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _modport_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let modport_list = pop_item!(self, modport_list, ModportList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let modport_group_group_0_built = ModportGroupGroupLBraceModportListRBrace {
            l_brace: Box::new(l_brace),
            modport_list: Box::new(modport_list),
            r_brace: Box::new(r_brace),
        };
        let modport_group_group_0_built =
            ModportGroupGroup::LBraceModportListRBrace(modport_group_group_0_built);
        self.push(
            ASTType::ModportGroupGroup(modport_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_group_group_1(&mut self, _modport_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_item = pop_item!(self, modport_item, ModportItem, context);
        let modport_group_group_1_built = ModportGroupGroupModportItem {
            modport_item: Box::new(modport_item),
        };
        let modport_group_group_1_built =
            ModportGroupGroup::ModportItem(modport_group_group_1_built);
        self.push(
            ASTType::ModportGroupGroup(modport_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _modport_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut modport_group_list = pop_item!(self, modport_group_list, ModportGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let modport_group_list_0_built = ModportGroupList {
            attribute: Box::new(attribute),
        };
        modport_group_list.push(modport_group_list_0_built);
        self.push(ASTType::ModportGroupList(modport_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_group_list_1_built = Vec::new();
        self.push(
            ASTType::ModportGroupList(modport_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn modport_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _direction: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let direction = pop_item!(self, direction, Direction, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let modport_item_built = ModportItem {
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            direction: Box::new(direction),
        };
        self.user_grammar.modport_item(&modport_item_built)?;
        self.push(ASTType::ModportItem(modport_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_declaration(
        &mut self,
        _enum: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _enum_declaration_opt: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _enum_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let enum_list = pop_item!(self, enum_list, EnumList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let enum_declaration_opt =
            pop_item!(self, enum_declaration_opt, EnumDeclarationOpt, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#enum = pop_item!(self, r#enum, Enum, context);
        let enum_declaration_built = EnumDeclaration {
            r#enum: Box::new(r#enum),
            identifier: Box::new(identifier),
            enum_declaration_opt,
            l_brace: Box::new(l_brace),
            enum_list: Box::new(enum_list),
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .enum_declaration(&enum_declaration_built)?;
        self.push(ASTType::EnumDeclaration(enum_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_declaration_opt_0(
        &mut self,
        _colon: &ParseTreeType<'t>,
        _scalar_type: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scalar_type = pop_item!(self, scalar_type, ScalarType, context);
        let colon = pop_item!(self, colon, Colon, context);
        let enum_declaration_opt_0_built = EnumDeclarationOpt {
            colon: Box::new(colon),
            scalar_type: Box::new(scalar_type),
        };
        self.push(
            ASTType::EnumDeclarationOpt(Some(enum_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::EnumDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_list(
        &mut self,
        _enum_group: &ParseTreeType<'t>,
        _enum_list_list: &ParseTreeType<'t>,
        _enum_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_list_opt = pop_item!(self, enum_list_opt, EnumListOpt, context);
        let enum_list_list = pop_and_reverse_item!(self, enum_list_list, EnumListList, context);
        let enum_group = pop_item!(self, enum_group, EnumGroup, context);
        let enum_list_built = EnumList {
            enum_group: Box::new(enum_group),
            enum_list_list,
            enum_list_opt,
        };
        self.user_grammar.enum_list(&enum_list_built)?;
        self.push(ASTType::EnumList(enum_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _enum_group: &ParseTreeType<'t>,
        _enum_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut enum_list_list = pop_item!(self, enum_list_list, EnumListList, context);
        let enum_group = pop_item!(self, enum_group, EnumGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let enum_list_list_0_built = EnumListList {
            enum_group: Box::new(enum_group),
            comma: Box::new(comma),
        };
        enum_list_list.push(enum_list_list_0_built);
        self.push(ASTType::EnumListList(enum_list_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_list_list_1_built = Vec::new();
        self.push(ASTType::EnumListList(enum_list_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let enum_list_opt_0_built = EnumListOpt {
            comma: Box::new(comma),
        };
        self.push(ASTType::EnumListOpt(Some(enum_list_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::EnumListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_group(
        &mut self,
        _enum_group_list: &ParseTreeType<'t>,
        _enum_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_group_group = pop_item!(self, enum_group_group, EnumGroupGroup, context);
        let enum_group_list = pop_and_reverse_item!(self, enum_group_list, EnumGroupList, context);
        let enum_group_built = EnumGroup {
            enum_group_list,
            enum_group_group: Box::new(enum_group_group),
        };
        self.user_grammar.enum_group(&enum_group_built)?;
        self.push(ASTType::EnumGroup(enum_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _enum_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let enum_list = pop_item!(self, enum_list, EnumList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let enum_group_group_0_built = EnumGroupGroupLBraceEnumListRBrace {
            l_brace: Box::new(l_brace),
            enum_list: Box::new(enum_list),
            r_brace: Box::new(r_brace),
        };
        let enum_group_group_0_built =
            EnumGroupGroup::LBraceEnumListRBrace(enum_group_group_0_built);
        self.push(ASTType::EnumGroupGroup(enum_group_group_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_group_group_1(&mut self, _enum_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_item = pop_item!(self, enum_item, EnumItem, context);
        let enum_group_group_1_built = EnumGroupGroupEnumItem {
            enum_item: Box::new(enum_item),
        };
        let enum_group_group_1_built = EnumGroupGroup::EnumItem(enum_group_group_1_built);
        self.push(ASTType::EnumGroupGroup(enum_group_group_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _enum_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut enum_group_list = pop_item!(self, enum_group_list, EnumGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let enum_group_list_0_built = EnumGroupList {
            attribute: Box::new(attribute),
        };
        enum_group_list.push(enum_group_list_0_built);
        self.push(ASTType::EnumGroupList(enum_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_group_list_1_built = Vec::new();
        self.push(ASTType::EnumGroupList(enum_group_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _enum_item_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_item_opt = pop_item!(self, enum_item_opt, EnumItemOpt, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let enum_item_built = EnumItem {
            identifier: Box::new(identifier),
            enum_item_opt,
        };
        self.user_grammar.enum_item(&enum_item_built)?;
        self.push(ASTType::EnumItem(enum_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_item_opt_0(
        &mut self,
        _equ: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let equ = pop_item!(self, equ, Equ, context);
        let enum_item_opt_0_built = EnumItemOpt {
            equ: Box::new(equ),
            expression: Box::new(expression),
        };
        self.push(ASTType::EnumItemOpt(Some(enum_item_opt_0_built)), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn enum_item_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::EnumItemOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_0(&mut self, _struct: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#struct = pop_item!(self, r#struct, Struct, context);
        let struct_union_0_built = StructUnionStruct {
            r#struct: Box::new(r#struct),
        };
        let struct_union_0_built = StructUnion::Struct(struct_union_0_built);
        self.user_grammar.struct_union(&struct_union_0_built)?;
        self.push(ASTType::StructUnion(struct_union_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_1(&mut self, _union: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#union = pop_item!(self, r#union, Union, context);
        let struct_union_1_built = StructUnionUnion {
            r#union: Box::new(r#union),
        };
        let struct_union_1_built = StructUnion::Union(struct_union_1_built);
        self.user_grammar.struct_union(&struct_union_1_built)?;
        self.push(ASTType::StructUnion(struct_union_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_declaration(
        &mut self,
        _struct_union: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _struct_union_declaration_opt: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _struct_union_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let struct_union_list = pop_item!(self, struct_union_list, StructUnionList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let struct_union_declaration_opt = pop_item!(
            self,
            struct_union_declaration_opt,
            StructUnionDeclarationOpt,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let struct_union = pop_item!(self, struct_union, StructUnion, context);
        let struct_union_declaration_built = StructUnionDeclaration {
            struct_union: Box::new(struct_union),
            identifier: Box::new(identifier),
            struct_union_declaration_opt,
            l_brace: Box::new(l_brace),
            struct_union_list: Box::new(struct_union_list),
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .struct_union_declaration(&struct_union_declaration_built)?;
        self.push(
            ASTType::StructUnionDeclaration(struct_union_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_declaration_opt_0(
        &mut self,
        _with_generic_parameter: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter =
            pop_item!(self, with_generic_parameter, WithGenericParameter, context);
        let struct_union_declaration_opt_0_built = StructUnionDeclarationOpt {
            with_generic_parameter: Box::new(with_generic_parameter),
        };
        self.push(
            ASTType::StructUnionDeclarationOpt(Some(struct_union_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::StructUnionDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_list(
        &mut self,
        _struct_union_group: &ParseTreeType<'t>,
        _struct_union_list_list: &ParseTreeType<'t>,
        _struct_union_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_list_opt =
            pop_item!(self, struct_union_list_opt, StructUnionListOpt, context);
        let struct_union_list_list =
            pop_and_reverse_item!(self, struct_union_list_list, StructUnionListList, context);
        let struct_union_group = pop_item!(self, struct_union_group, StructUnionGroup, context);
        let struct_union_list_built = StructUnionList {
            struct_union_group: Box::new(struct_union_group),
            struct_union_list_list,
            struct_union_list_opt,
        };
        self.user_grammar
            .struct_union_list(&struct_union_list_built)?;
        self.push(ASTType::StructUnionList(struct_union_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _struct_union_group: &ParseTreeType<'t>,
        _struct_union_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut struct_union_list_list =
            pop_item!(self, struct_union_list_list, StructUnionListList, context);
        let struct_union_group = pop_item!(self, struct_union_group, StructUnionGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let struct_union_list_list_0_built = StructUnionListList {
            struct_union_group: Box::new(struct_union_group),
            comma: Box::new(comma),
        };
        struct_union_list_list.push(struct_union_list_list_0_built);
        self.push(
            ASTType::StructUnionListList(struct_union_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_list_list_1_built = Vec::new();
        self.push(
            ASTType::StructUnionListList(struct_union_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let struct_union_list_opt_0_built = StructUnionListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::StructUnionListOpt(Some(struct_union_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::StructUnionListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_group(
        &mut self,
        _struct_union_group_list: &ParseTreeType<'t>,
        _struct_union_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_group_group = pop_item!(
            self,
            struct_union_group_group,
            StructUnionGroupGroup,
            context
        );
        let struct_union_group_list =
            pop_and_reverse_item!(self, struct_union_group_list, StructUnionGroupList, context);
        let struct_union_group_built = StructUnionGroup {
            struct_union_group_list,
            struct_union_group_group: Box::new(struct_union_group_group),
        };
        self.user_grammar
            .struct_union_group(&struct_union_group_built)?;
        self.push(ASTType::StructUnionGroup(struct_union_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _struct_union_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let struct_union_list = pop_item!(self, struct_union_list, StructUnionList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let struct_union_group_group_0_built = StructUnionGroupGroupLBraceStructUnionListRBrace {
            l_brace: Box::new(l_brace),
            struct_union_list: Box::new(struct_union_list),
            r_brace: Box::new(r_brace),
        };
        let struct_union_group_group_0_built =
            StructUnionGroupGroup::LBraceStructUnionListRBrace(struct_union_group_group_0_built);
        self.push(
            ASTType::StructUnionGroupGroup(struct_union_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_group_group_1(&mut self, _struct_union_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_item = pop_item!(self, struct_union_item, StructUnionItem, context);
        let struct_union_group_group_1_built = StructUnionGroupGroupStructUnionItem {
            struct_union_item: Box::new(struct_union_item),
        };
        let struct_union_group_group_1_built =
            StructUnionGroupGroup::StructUnionItem(struct_union_group_group_1_built);
        self.push(
            ASTType::StructUnionGroupGroup(struct_union_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _struct_union_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut struct_union_group_list =
            pop_item!(self, struct_union_group_list, StructUnionGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let struct_union_group_list_0_built = StructUnionGroupList {
            attribute: Box::new(attribute),
        };
        struct_union_group_list.push(struct_union_group_list_0_built);
        self.push(
            ASTType::StructUnionGroupList(struct_union_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_group_list_1_built = Vec::new();
        self.push(
            ASTType::StructUnionGroupList(struct_union_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn struct_union_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _scalar_type: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scalar_type = pop_item!(self, scalar_type, ScalarType, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let struct_union_item_built = StructUnionItem {
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            scalar_type: Box::new(scalar_type),
        };
        self.user_grammar
            .struct_union_item(&struct_union_item_built)?;
        self.push(ASTType::StructUnionItem(struct_union_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn initial_declaration(
        &mut self,
        _initial: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let initial = pop_item!(self, initial, Initial, context);
        let initial_declaration_built = InitialDeclaration {
            initial: Box::new(initial),
            statement_block: Box::new(statement_block),
        };
        self.user_grammar
            .initial_declaration(&initial_declaration_built)?;
        self.push(
            ASTType::InitialDeclaration(initial_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn final_declaration(
        &mut self,
        _final: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let r#final = pop_item!(self, r#final, Final, context);
        let final_declaration_built = FinalDeclaration {
            r#final: Box::new(r#final),
            statement_block: Box::new(statement_block),
        };
        self.user_grammar
            .final_declaration(&final_declaration_built)?;
        self.push(ASTType::FinalDeclaration(final_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration(
        &mut self,
        _inst: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _scoped_identifier: &ParseTreeType<'t>,
        _inst_declaration_opt: &ParseTreeType<'t>,
        _inst_declaration_opt0: &ParseTreeType<'t>,
        _inst_declaration_opt1: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let inst_declaration_opt1 =
            pop_item!(self, inst_declaration_opt1, InstDeclarationOpt1, context);
        let inst_declaration_opt0 =
            pop_item!(self, inst_declaration_opt0, InstDeclarationOpt0, context);
        let inst_declaration_opt =
            pop_item!(self, inst_declaration_opt, InstDeclarationOpt, context);
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let inst = pop_item!(self, inst, Inst, context);
        let inst_declaration_built = InstDeclaration {
            inst: Box::new(inst),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            scoped_identifier: Box::new(scoped_identifier),
            inst_declaration_opt,
            inst_declaration_opt0,
            inst_declaration_opt1,
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .inst_declaration(&inst_declaration_built)?;
        self.push(ASTType::InstDeclaration(inst_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt1_0(
        &mut self,
        _l_paren: &ParseTreeType<'t>,
        _inst_declaration_opt2: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let inst_declaration_opt2 =
            pop_item!(self, inst_declaration_opt2, InstDeclarationOpt2, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let inst_declaration_opt1_0_built = InstDeclarationOpt1 {
            l_paren: Box::new(l_paren),
            inst_declaration_opt2,
            r_paren: Box::new(r_paren),
        };
        self.push(
            ASTType::InstDeclarationOpt1(Some(inst_declaration_opt1_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt2_0(&mut self, _inst_port_list: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_list = pop_item!(self, inst_port_list, InstPortList, context);
        let inst_declaration_opt2_0_built = InstDeclarationOpt2 {
            inst_port_list: Box::new(inst_port_list),
        };
        self.push(
            ASTType::InstDeclarationOpt2(Some(inst_declaration_opt2_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt2_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstDeclarationOpt2(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt1_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstDeclarationOpt1(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt0_0(&mut self, _inst_parameter: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter = pop_item!(self, inst_parameter, InstParameter, context);
        let inst_declaration_opt0_0_built = InstDeclarationOpt0 {
            inst_parameter: Box::new(inst_parameter),
        };
        self.push(
            ASTType::InstDeclarationOpt0(Some(inst_declaration_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstDeclarationOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt_0(&mut self, _array: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array = pop_item!(self, array, Array, context);
        let inst_declaration_opt_0_built = InstDeclarationOpt {
            array: Box::new(array),
        };
        self.push(
            ASTType::InstDeclarationOpt(Some(inst_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter(
        &mut self,
        _hash: &ParseTreeType<'t>,
        _l_paren: &ParseTreeType<'t>,
        _inst_parameter_opt: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let inst_parameter_opt = pop_item!(self, inst_parameter_opt, InstParameterOpt, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let hash = pop_item!(self, hash, Hash, context);
        let inst_parameter_built = InstParameter {
            hash: Box::new(hash),
            l_paren: Box::new(l_paren),
            inst_parameter_opt,
            r_paren: Box::new(r_paren),
        };
        self.user_grammar.inst_parameter(&inst_parameter_built)?;
        self.push(ASTType::InstParameter(inst_parameter_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_opt_0(&mut self, _inst_parameter_list: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_list = pop_item!(self, inst_parameter_list, InstParameterList, context);
        let inst_parameter_opt_0_built = InstParameterOpt {
            inst_parameter_list: Box::new(inst_parameter_list),
        };
        self.push(
            ASTType::InstParameterOpt(Some(inst_parameter_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstParameterOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_list(
        &mut self,
        _inst_parameter_group: &ParseTreeType<'t>,
        _inst_parameter_list_list: &ParseTreeType<'t>,
        _inst_parameter_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_list_opt =
            pop_item!(self, inst_parameter_list_opt, InstParameterListOpt, context);
        let inst_parameter_list_list = pop_and_reverse_item!(
            self,
            inst_parameter_list_list,
            InstParameterListList,
            context
        );
        let inst_parameter_group =
            pop_item!(self, inst_parameter_group, InstParameterGroup, context);
        let inst_parameter_list_built = InstParameterList {
            inst_parameter_group: Box::new(inst_parameter_group),
            inst_parameter_list_list,
            inst_parameter_list_opt,
        };
        self.user_grammar
            .inst_parameter_list(&inst_parameter_list_built)?;
        self.push(
            ASTType::InstParameterList(inst_parameter_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _inst_parameter_group: &ParseTreeType<'t>,
        _inst_parameter_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut inst_parameter_list_list = pop_item!(
            self,
            inst_parameter_list_list,
            InstParameterListList,
            context
        );
        let inst_parameter_group =
            pop_item!(self, inst_parameter_group, InstParameterGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let inst_parameter_list_list_0_built = InstParameterListList {
            inst_parameter_group: Box::new(inst_parameter_group),
            comma: Box::new(comma),
        };
        inst_parameter_list_list.push(inst_parameter_list_list_0_built);
        self.push(
            ASTType::InstParameterListList(inst_parameter_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_list_list_1_built = Vec::new();
        self.push(
            ASTType::InstParameterListList(inst_parameter_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let inst_parameter_list_opt_0_built = InstParameterListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::InstParameterListOpt(Some(inst_parameter_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstParameterListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_group(
        &mut self,
        _inst_parameter_group_list: &ParseTreeType<'t>,
        _inst_parameter_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_group_group = pop_item!(
            self,
            inst_parameter_group_group,
            InstParameterGroupGroup,
            context
        );
        let inst_parameter_group_list = pop_and_reverse_item!(
            self,
            inst_parameter_group_list,
            InstParameterGroupList,
            context
        );
        let inst_parameter_group_built = InstParameterGroup {
            inst_parameter_group_list,
            inst_parameter_group_group: Box::new(inst_parameter_group_group),
        };
        self.user_grammar
            .inst_parameter_group(&inst_parameter_group_built)?;
        self.push(
            ASTType::InstParameterGroup(inst_parameter_group_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _inst_parameter_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let inst_parameter_list = pop_item!(self, inst_parameter_list, InstParameterList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let inst_parameter_group_group_0_built =
            InstParameterGroupGroupLBraceInstParameterListRBrace {
                l_brace: Box::new(l_brace),
                inst_parameter_list: Box::new(inst_parameter_list),
                r_brace: Box::new(r_brace),
            };
        let inst_parameter_group_group_0_built =
            InstParameterGroupGroup::LBraceInstParameterListRBrace(
                inst_parameter_group_group_0_built,
            );
        self.push(
            ASTType::InstParameterGroupGroup(inst_parameter_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_group_group_1(
        &mut self,
        _inst_parameter_item: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_item = pop_item!(self, inst_parameter_item, InstParameterItem, context);
        let inst_parameter_group_group_1_built = InstParameterGroupGroupInstParameterItem {
            inst_parameter_item: Box::new(inst_parameter_item),
        };
        let inst_parameter_group_group_1_built =
            InstParameterGroupGroup::InstParameterItem(inst_parameter_group_group_1_built);
        self.push(
            ASTType::InstParameterGroupGroup(inst_parameter_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _inst_parameter_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut inst_parameter_group_list = pop_item!(
            self,
            inst_parameter_group_list,
            InstParameterGroupList,
            context
        );
        let attribute = pop_item!(self, attribute, Attribute, context);
        let inst_parameter_group_list_0_built = InstParameterGroupList {
            attribute: Box::new(attribute),
        };
        inst_parameter_group_list.push(inst_parameter_group_list_0_built);
        self.push(
            ASTType::InstParameterGroupList(inst_parameter_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_group_list_1_built = Vec::new();
        self.push(
            ASTType::InstParameterGroupList(inst_parameter_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _inst_parameter_item_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_parameter_item_opt =
            pop_item!(self, inst_parameter_item_opt, InstParameterItemOpt, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let inst_parameter_item_built = InstParameterItem {
            identifier: Box::new(identifier),
            inst_parameter_item_opt,
        };
        self.user_grammar
            .inst_parameter_item(&inst_parameter_item_built)?;
        self.push(
            ASTType::InstParameterItem(inst_parameter_item_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_item_opt_0(
        &mut self,
        _colon: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let inst_parameter_item_opt_0_built = InstParameterItemOpt {
            colon: Box::new(colon),
            expression: Box::new(expression),
        };
        self.push(
            ASTType::InstParameterItemOpt(Some(inst_parameter_item_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_parameter_item_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstParameterItemOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_list(
        &mut self,
        _inst_port_group: &ParseTreeType<'t>,
        _inst_port_list_list: &ParseTreeType<'t>,
        _inst_port_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_list_opt = pop_item!(self, inst_port_list_opt, InstPortListOpt, context);
        let inst_port_list_list =
            pop_and_reverse_item!(self, inst_port_list_list, InstPortListList, context);
        let inst_port_group = pop_item!(self, inst_port_group, InstPortGroup, context);
        let inst_port_list_built = InstPortList {
            inst_port_group: Box::new(inst_port_group),
            inst_port_list_list,
            inst_port_list_opt,
        };
        self.user_grammar.inst_port_list(&inst_port_list_built)?;
        self.push(ASTType::InstPortList(inst_port_list_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _inst_port_group: &ParseTreeType<'t>,
        _inst_port_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut inst_port_list_list =
            pop_item!(self, inst_port_list_list, InstPortListList, context);
        let inst_port_group = pop_item!(self, inst_port_group, InstPortGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let inst_port_list_list_0_built = InstPortListList {
            inst_port_group: Box::new(inst_port_group),
            comma: Box::new(comma),
        };
        inst_port_list_list.push(inst_port_list_list_0_built);
        self.push(ASTType::InstPortListList(inst_port_list_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_list_list_1_built = Vec::new();
        self.push(
            ASTType::InstPortListList(inst_port_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let inst_port_list_opt_0_built = InstPortListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::InstPortListOpt(Some(inst_port_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstPortListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_group(
        &mut self,
        _inst_port_group_list: &ParseTreeType<'t>,
        _inst_port_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_group_group =
            pop_item!(self, inst_port_group_group, InstPortGroupGroup, context);
        let inst_port_group_list =
            pop_and_reverse_item!(self, inst_port_group_list, InstPortGroupList, context);
        let inst_port_group_built = InstPortGroup {
            inst_port_group_list,
            inst_port_group_group: Box::new(inst_port_group_group),
        };
        self.user_grammar.inst_port_group(&inst_port_group_built)?;
        self.push(ASTType::InstPortGroup(inst_port_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _inst_port_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let inst_port_list = pop_item!(self, inst_port_list, InstPortList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let inst_port_group_group_0_built = InstPortGroupGroupLBraceInstPortListRBrace {
            l_brace: Box::new(l_brace),
            inst_port_list: Box::new(inst_port_list),
            r_brace: Box::new(r_brace),
        };
        let inst_port_group_group_0_built =
            InstPortGroupGroup::LBraceInstPortListRBrace(inst_port_group_group_0_built);
        self.push(
            ASTType::InstPortGroupGroup(inst_port_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_group_group_1(&mut self, _inst_port_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_item = pop_item!(self, inst_port_item, InstPortItem, context);
        let inst_port_group_group_1_built = InstPortGroupGroupInstPortItem {
            inst_port_item: Box::new(inst_port_item),
        };
        let inst_port_group_group_1_built =
            InstPortGroupGroup::InstPortItem(inst_port_group_group_1_built);
        self.push(
            ASTType::InstPortGroupGroup(inst_port_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _inst_port_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut inst_port_group_list =
            pop_item!(self, inst_port_group_list, InstPortGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let inst_port_group_list_0_built = InstPortGroupList {
            attribute: Box::new(attribute),
        };
        inst_port_group_list.push(inst_port_group_list_0_built);
        self.push(ASTType::InstPortGroupList(inst_port_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_group_list_1_built = Vec::new();
        self.push(
            ASTType::InstPortGroupList(inst_port_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _inst_port_item_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_port_item_opt = pop_item!(self, inst_port_item_opt, InstPortItemOpt, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let inst_port_item_built = InstPortItem {
            identifier: Box::new(identifier),
            inst_port_item_opt,
        };
        self.user_grammar.inst_port_item(&inst_port_item_built)?;
        self.push(ASTType::InstPortItem(inst_port_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_item_opt_0(
        &mut self,
        _colon: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let colon = pop_item!(self, colon, Colon, context);
        let inst_port_item_opt_0_built = InstPortItemOpt {
            colon: Box::new(colon),
            expression: Box::new(expression),
        };
        self.push(
            ASTType::InstPortItemOpt(Some(inst_port_item_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn inst_port_item_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InstPortItemOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter(
        &mut self,
        _hash: &ParseTreeType<'t>,
        _l_paren: &ParseTreeType<'t>,
        _with_parameter_opt: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let with_parameter_opt = pop_item!(self, with_parameter_opt, WithParameterOpt, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let hash = pop_item!(self, hash, Hash, context);
        let with_parameter_built = WithParameter {
            hash: Box::new(hash),
            l_paren: Box::new(l_paren),
            with_parameter_opt,
            r_paren: Box::new(r_paren),
        };
        self.user_grammar.with_parameter(&with_parameter_built)?;
        self.push(ASTType::WithParameter(with_parameter_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_opt_0(&mut self, _with_parameter_list: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter_list = pop_item!(self, with_parameter_list, WithParameterList, context);
        let with_parameter_opt_0_built = WithParameterOpt {
            with_parameter_list: Box::new(with_parameter_list),
        };
        self.push(
            ASTType::WithParameterOpt(Some(with_parameter_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::WithParameterOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_list(
        &mut self,
        _with_parameter_group: &ParseTreeType<'t>,
        _with_parameter_list_list: &ParseTreeType<'t>,
        _with_parameter_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter_list_opt =
            pop_item!(self, with_parameter_list_opt, WithParameterListOpt, context);
        let with_parameter_list_list = pop_and_reverse_item!(
            self,
            with_parameter_list_list,
            WithParameterListList,
            context
        );
        let with_parameter_group =
            pop_item!(self, with_parameter_group, WithParameterGroup, context);
        let with_parameter_list_built = WithParameterList {
            with_parameter_group: Box::new(with_parameter_group),
            with_parameter_list_list,
            with_parameter_list_opt,
        };
        self.user_grammar
            .with_parameter_list(&with_parameter_list_built)?;
        self.push(
            ASTType::WithParameterList(with_parameter_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _with_parameter_group: &ParseTreeType<'t>,
        _with_parameter_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut with_parameter_list_list = pop_item!(
            self,
            with_parameter_list_list,
            WithParameterListList,
            context
        );
        let with_parameter_group =
            pop_item!(self, with_parameter_group, WithParameterGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let with_parameter_list_list_0_built = WithParameterListList {
            with_parameter_group: Box::new(with_parameter_group),
            comma: Box::new(comma),
        };
        with_parameter_list_list.push(with_parameter_list_list_0_built);
        self.push(
            ASTType::WithParameterListList(with_parameter_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter_list_list_1_built = Vec::new();
        self.push(
            ASTType::WithParameterListList(with_parameter_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let with_parameter_list_opt_0_built = WithParameterListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::WithParameterListOpt(Some(with_parameter_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::WithParameterListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_group(
        &mut self,
        _with_parameter_group_list: &ParseTreeType<'t>,
        _with_parameter_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter_group_group = pop_item!(
            self,
            with_parameter_group_group,
            WithParameterGroupGroup,
            context
        );
        let with_parameter_group_list = pop_and_reverse_item!(
            self,
            with_parameter_group_list,
            WithParameterGroupList,
            context
        );
        let with_parameter_group_built = WithParameterGroup {
            with_parameter_group_list,
            with_parameter_group_group: Box::new(with_parameter_group_group),
        };
        self.user_grammar
            .with_parameter_group(&with_parameter_group_built)?;
        self.push(
            ASTType::WithParameterGroup(with_parameter_group_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _with_parameter_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let with_parameter_list = pop_item!(self, with_parameter_list, WithParameterList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let with_parameter_group_group_0_built =
            WithParameterGroupGroupLBraceWithParameterListRBrace {
                l_brace: Box::new(l_brace),
                with_parameter_list: Box::new(with_parameter_list),
                r_brace: Box::new(r_brace),
            };
        let with_parameter_group_group_0_built =
            WithParameterGroupGroup::LBraceWithParameterListRBrace(
                with_parameter_group_group_0_built,
            );
        self.push(
            ASTType::WithParameterGroupGroup(with_parameter_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_group_group_1(
        &mut self,
        _with_parameter_item: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter_item = pop_item!(self, with_parameter_item, WithParameterItem, context);
        let with_parameter_group_group_1_built = WithParameterGroupGroupWithParameterItem {
            with_parameter_item: Box::new(with_parameter_item),
        };
        let with_parameter_group_group_1_built =
            WithParameterGroupGroup::WithParameterItem(with_parameter_group_group_1_built);
        self.push(
            ASTType::WithParameterGroupGroup(with_parameter_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _with_parameter_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut with_parameter_group_list = pop_item!(
            self,
            with_parameter_group_list,
            WithParameterGroupList,
            context
        );
        let attribute = pop_item!(self, attribute, Attribute, context);
        let with_parameter_group_list_0_built = WithParameterGroupList {
            attribute: Box::new(attribute),
        };
        with_parameter_group_list.push(with_parameter_group_list_0_built);
        self.push(
            ASTType::WithParameterGroupList(with_parameter_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter_group_list_1_built = Vec::new();
        self.push(
            ASTType::WithParameterGroupList(with_parameter_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_item(
        &mut self,
        _with_parameter_item_group: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _with_parameter_item_group0: &ParseTreeType<'t>,
        _equ: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let equ = pop_item!(self, equ, Equ, context);
        let with_parameter_item_group0 = pop_item!(
            self,
            with_parameter_item_group0,
            WithParameterItemGroup0,
            context
        );
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let with_parameter_item_group = pop_item!(
            self,
            with_parameter_item_group,
            WithParameterItemGroup,
            context
        );
        let with_parameter_item_built = WithParameterItem {
            with_parameter_item_group: Box::new(with_parameter_item_group),
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            with_parameter_item_group0: Box::new(with_parameter_item_group0),
            equ: Box::new(equ),
            expression: Box::new(expression),
        };
        self.user_grammar
            .with_parameter_item(&with_parameter_item_built)?;
        self.push(
            ASTType::WithParameterItem(with_parameter_item_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_item_group0_0(&mut self, _array_type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let with_parameter_item_group0_0_built = WithParameterItemGroup0ArrayType {
            array_type: Box::new(array_type),
        };
        let with_parameter_item_group0_0_built =
            WithParameterItemGroup0::ArrayType(with_parameter_item_group0_0_built);
        self.push(
            ASTType::WithParameterItemGroup0(with_parameter_item_group0_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_item_group0_1(&mut self, _type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#type = pop_item!(self, r#type, Type, context);
        let with_parameter_item_group0_1_built = WithParameterItemGroup0Type {
            r#type: Box::new(r#type),
        };
        let with_parameter_item_group0_1_built =
            WithParameterItemGroup0::Type(with_parameter_item_group0_1_built);
        self.push(
            ASTType::WithParameterItemGroup0(with_parameter_item_group0_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_item_group_0(&mut self, _param: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let param = pop_item!(self, param, Param, context);
        let with_parameter_item_group_0_built = WithParameterItemGroupParam {
            param: Box::new(param),
        };
        let with_parameter_item_group_0_built =
            WithParameterItemGroup::Param(with_parameter_item_group_0_built);
        self.push(
            ASTType::WithParameterItemGroup(with_parameter_item_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_parameter_item_group_1(&mut self, _const: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#const = pop_item!(self, r#const, Const, context);
        let with_parameter_item_group_1_built = WithParameterItemGroupConst {
            r#const: Box::new(r#const),
        };
        let with_parameter_item_group_1_built =
            WithParameterItemGroup::Const(with_parameter_item_group_1_built);
        self.push(
            ASTType::WithParameterItemGroup(with_parameter_item_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generic_bound_0(&mut self, _const: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#const = pop_item!(self, r#const, Const, context);
        let generic_bound_0_built = GenericBoundConst {
            r#const: Box::new(r#const),
        };
        let generic_bound_0_built = GenericBound::Const(generic_bound_0_built);
        self.user_grammar.generic_bound(&generic_bound_0_built)?;
        self.push(ASTType::GenericBound(generic_bound_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generic_bound_1(&mut self, _type: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#type = pop_item!(self, r#type, Type, context);
        let generic_bound_1_built = GenericBoundType {
            r#type: Box::new(r#type),
        };
        let generic_bound_1_built = GenericBound::Type(generic_bound_1_built);
        self.user_grammar.generic_bound(&generic_bound_1_built)?;
        self.push(ASTType::GenericBound(generic_bound_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generic_bound_2(&mut self, _scoped_identifier: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let generic_bound_2_built = GenericBoundScopedIdentifier {
            scoped_identifier: Box::new(scoped_identifier),
        };
        let generic_bound_2_built = GenericBound::ScopedIdentifier(generic_bound_2_built);
        self.user_grammar.generic_bound(&generic_bound_2_built)?;
        self.push(ASTType::GenericBound(generic_bound_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter(
        &mut self,
        _colon_colon_l_angle: &ParseTreeType<'t>,
        _with_generic_parameter_list: &ParseTreeType<'t>,
        _r_angle: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_angle = pop_item!(self, r_angle, RAngle, context);
        let with_generic_parameter_list = pop_item!(
            self,
            with_generic_parameter_list,
            WithGenericParameterList,
            context
        );
        let colon_colon_l_angle = pop_item!(self, colon_colon_l_angle, ColonColonLAngle, context);
        let with_generic_parameter_built = WithGenericParameter {
            colon_colon_l_angle: Box::new(colon_colon_l_angle),
            with_generic_parameter_list: Box::new(with_generic_parameter_list),
            r_angle: Box::new(r_angle),
        };
        self.user_grammar
            .with_generic_parameter(&with_generic_parameter_built)?;
        self.push(
            ASTType::WithGenericParameter(with_generic_parameter_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_list(
        &mut self,
        _with_generic_parameter_item: &ParseTreeType<'t>,
        _with_generic_parameter_list_list: &ParseTreeType<'t>,
        _with_generic_parameter_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter_list_opt = pop_item!(
            self,
            with_generic_parameter_list_opt,
            WithGenericParameterListOpt,
            context
        );
        let with_generic_parameter_list_list = pop_and_reverse_item!(
            self,
            with_generic_parameter_list_list,
            WithGenericParameterListList,
            context
        );
        let with_generic_parameter_item = pop_item!(
            self,
            with_generic_parameter_item,
            WithGenericParameterItem,
            context
        );
        let with_generic_parameter_list_built = WithGenericParameterList {
            with_generic_parameter_item: Box::new(with_generic_parameter_item),
            with_generic_parameter_list_list,
            with_generic_parameter_list_opt,
        };
        self.user_grammar
            .with_generic_parameter_list(&with_generic_parameter_list_built)?;
        self.push(
            ASTType::WithGenericParameterList(with_generic_parameter_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _with_generic_parameter_item: &ParseTreeType<'t>,
        _with_generic_parameter_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut with_generic_parameter_list_list = pop_item!(
            self,
            with_generic_parameter_list_list,
            WithGenericParameterListList,
            context
        );
        let with_generic_parameter_item = pop_item!(
            self,
            with_generic_parameter_item,
            WithGenericParameterItem,
            context
        );
        let comma = pop_item!(self, comma, Comma, context);
        let with_generic_parameter_list_list_0_built = WithGenericParameterListList {
            with_generic_parameter_item: Box::new(with_generic_parameter_item),
            comma: Box::new(comma),
        };
        with_generic_parameter_list_list.push(with_generic_parameter_list_list_0_built);
        self.push(
            ASTType::WithGenericParameterListList(with_generic_parameter_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter_list_list_1_built = Vec::new();
        self.push(
            ASTType::WithGenericParameterListList(with_generic_parameter_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let with_generic_parameter_list_opt_0_built = WithGenericParameterListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::WithGenericParameterListOpt(Some(with_generic_parameter_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::WithGenericParameterListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _generic_bound: &ParseTreeType<'t>,
        _with_generic_parameter_item_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter_item_opt = pop_item!(
            self,
            with_generic_parameter_item_opt,
            WithGenericParameterItemOpt,
            context
        );
        let generic_bound = pop_item!(self, generic_bound, GenericBound, context);
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let with_generic_parameter_item_built = WithGenericParameterItem {
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            generic_bound: Box::new(generic_bound),
            with_generic_parameter_item_opt,
        };
        self.user_grammar
            .with_generic_parameter_item(&with_generic_parameter_item_built)?;
        self.push(
            ASTType::WithGenericParameterItem(with_generic_parameter_item_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_item_opt_0(
        &mut self,
        _equ: &ParseTreeType<'t>,
        _with_generic_argument_item: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_argument_item = pop_item!(
            self,
            with_generic_argument_item,
            WithGenericArgumentItem,
            context
        );
        let equ = pop_item!(self, equ, Equ, context);
        let with_generic_parameter_item_opt_0_built = WithGenericParameterItemOpt {
            equ: Box::new(equ),
            with_generic_argument_item: Box::new(with_generic_argument_item),
        };
        self.push(
            ASTType::WithGenericParameterItemOpt(Some(with_generic_parameter_item_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_parameter_item_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::WithGenericParameterItemOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument(
        &mut self,
        _colon_colon_l_angle: &ParseTreeType<'t>,
        _with_generic_argument_opt: &ParseTreeType<'t>,
        _r_angle: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_angle = pop_item!(self, r_angle, RAngle, context);
        let with_generic_argument_opt = pop_item!(
            self,
            with_generic_argument_opt,
            WithGenericArgumentOpt,
            context
        );
        let colon_colon_l_angle = pop_item!(self, colon_colon_l_angle, ColonColonLAngle, context);
        let with_generic_argument_built = WithGenericArgument {
            colon_colon_l_angle: Box::new(colon_colon_l_angle),
            with_generic_argument_opt,
            r_angle: Box::new(r_angle),
        };
        self.user_grammar
            .with_generic_argument(&with_generic_argument_built)?;
        self.push(
            ASTType::WithGenericArgument(with_generic_argument_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_opt_0(
        &mut self,
        _with_generic_argument_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_argument_list = pop_item!(
            self,
            with_generic_argument_list,
            WithGenericArgumentList,
            context
        );
        let with_generic_argument_opt_0_built = WithGenericArgumentOpt {
            with_generic_argument_list: Box::new(with_generic_argument_list),
        };
        self.push(
            ASTType::WithGenericArgumentOpt(Some(with_generic_argument_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::WithGenericArgumentOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_list(
        &mut self,
        _with_generic_argument_item: &ParseTreeType<'t>,
        _with_generic_argument_list_list: &ParseTreeType<'t>,
        _with_generic_argument_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_argument_list_opt = pop_item!(
            self,
            with_generic_argument_list_opt,
            WithGenericArgumentListOpt,
            context
        );
        let with_generic_argument_list_list = pop_and_reverse_item!(
            self,
            with_generic_argument_list_list,
            WithGenericArgumentListList,
            context
        );
        let with_generic_argument_item = pop_item!(
            self,
            with_generic_argument_item,
            WithGenericArgumentItem,
            context
        );
        let with_generic_argument_list_built = WithGenericArgumentList {
            with_generic_argument_item: Box::new(with_generic_argument_item),
            with_generic_argument_list_list,
            with_generic_argument_list_opt,
        };
        self.user_grammar
            .with_generic_argument_list(&with_generic_argument_list_built)?;
        self.push(
            ASTType::WithGenericArgumentList(with_generic_argument_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _with_generic_argument_item: &ParseTreeType<'t>,
        _with_generic_argument_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut with_generic_argument_list_list = pop_item!(
            self,
            with_generic_argument_list_list,
            WithGenericArgumentListList,
            context
        );
        let with_generic_argument_item = pop_item!(
            self,
            with_generic_argument_item,
            WithGenericArgumentItem,
            context
        );
        let comma = pop_item!(self, comma, Comma, context);
        let with_generic_argument_list_list_0_built = WithGenericArgumentListList {
            with_generic_argument_item: Box::new(with_generic_argument_item),
            comma: Box::new(comma),
        };
        with_generic_argument_list_list.push(with_generic_argument_list_list_0_built);
        self.push(
            ASTType::WithGenericArgumentListList(with_generic_argument_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_argument_list_list_1_built = Vec::new();
        self.push(
            ASTType::WithGenericArgumentListList(with_generic_argument_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let with_generic_argument_list_opt_0_built = WithGenericArgumentListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::WithGenericArgumentListOpt(Some(with_generic_argument_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::WithGenericArgumentListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_item_0(
        &mut self,
        _scoped_identifier: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let with_generic_argument_item_0_built = WithGenericArgumentItemScopedIdentifier {
            scoped_identifier: Box::new(scoped_identifier),
        };
        let with_generic_argument_item_0_built =
            WithGenericArgumentItem::ScopedIdentifier(with_generic_argument_item_0_built);
        self.user_grammar
            .with_generic_argument_item(&with_generic_argument_item_0_built)?;
        self.push(
            ASTType::WithGenericArgumentItem(with_generic_argument_item_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn with_generic_argument_item_1(&mut self, _number: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let number = pop_item!(self, number, Number, context);
        let with_generic_argument_item_1_built = WithGenericArgumentItemNumber {
            number: Box::new(number),
        };
        let with_generic_argument_item_1_built =
            WithGenericArgumentItem::Number(with_generic_argument_item_1_built);
        self.user_grammar
            .with_generic_argument_item(&with_generic_argument_item_1_built)?;
        self.push(
            ASTType::WithGenericArgumentItem(with_generic_argument_item_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration(
        &mut self,
        _l_paren: &ParseTreeType<'t>,
        _port_declaration_opt: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let port_declaration_opt =
            pop_item!(self, port_declaration_opt, PortDeclarationOpt, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let port_declaration_built = PortDeclaration {
            l_paren: Box::new(l_paren),
            port_declaration_opt,
            r_paren: Box::new(r_paren),
        };
        self.user_grammar
            .port_declaration(&port_declaration_built)?;
        self.push(ASTType::PortDeclaration(port_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_opt_0(&mut self, _port_declaration_list: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_list =
            pop_item!(self, port_declaration_list, PortDeclarationList, context);
        let port_declaration_opt_0_built = PortDeclarationOpt {
            port_declaration_list: Box::new(port_declaration_list),
        };
        self.push(
            ASTType::PortDeclarationOpt(Some(port_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PortDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_list(
        &mut self,
        _port_declaration_group: &ParseTreeType<'t>,
        _port_declaration_list_list: &ParseTreeType<'t>,
        _port_declaration_list_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_list_opt = pop_item!(
            self,
            port_declaration_list_opt,
            PortDeclarationListOpt,
            context
        );
        let port_declaration_list_list = pop_and_reverse_item!(
            self,
            port_declaration_list_list,
            PortDeclarationListList,
            context
        );
        let port_declaration_group =
            pop_item!(self, port_declaration_group, PortDeclarationGroup, context);
        let port_declaration_list_built = PortDeclarationList {
            port_declaration_group: Box::new(port_declaration_group),
            port_declaration_list_list,
            port_declaration_list_opt,
        };
        self.user_grammar
            .port_declaration_list(&port_declaration_list_built)?;
        self.push(
            ASTType::PortDeclarationList(port_declaration_list_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_list_list_0(
        &mut self,
        _comma: &ParseTreeType<'t>,
        _port_declaration_group: &ParseTreeType<'t>,
        _port_declaration_list_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut port_declaration_list_list = pop_item!(
            self,
            port_declaration_list_list,
            PortDeclarationListList,
            context
        );
        let port_declaration_group =
            pop_item!(self, port_declaration_group, PortDeclarationGroup, context);
        let comma = pop_item!(self, comma, Comma, context);
        let port_declaration_list_list_0_built = PortDeclarationListList {
            port_declaration_group: Box::new(port_declaration_group),
            comma: Box::new(comma),
        };
        port_declaration_list_list.push(port_declaration_list_list_0_built);
        self.push(
            ASTType::PortDeclarationListList(port_declaration_list_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_list_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_list_list_1_built = Vec::new();
        self.push(
            ASTType::PortDeclarationListList(port_declaration_list_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_list_opt_0(&mut self, _comma: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comma = pop_item!(self, comma, Comma, context);
        let port_declaration_list_opt_0_built = PortDeclarationListOpt {
            comma: Box::new(comma),
        };
        self.push(
            ASTType::PortDeclarationListOpt(Some(port_declaration_list_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_list_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PortDeclarationListOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_group(
        &mut self,
        _port_declaration_group_list: &ParseTreeType<'t>,
        _port_declaration_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_group_group = pop_item!(
            self,
            port_declaration_group_group,
            PortDeclarationGroupGroup,
            context
        );
        let port_declaration_group_list = pop_and_reverse_item!(
            self,
            port_declaration_group_list,
            PortDeclarationGroupList,
            context
        );
        let port_declaration_group_built = PortDeclarationGroup {
            port_declaration_group_list,
            port_declaration_group_group: Box::new(port_declaration_group_group),
        };
        self.user_grammar
            .port_declaration_group(&port_declaration_group_built)?;
        self.push(
            ASTType::PortDeclarationGroup(port_declaration_group_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _port_declaration_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let port_declaration_list =
            pop_item!(self, port_declaration_list, PortDeclarationList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let port_declaration_group_group_0_built =
            PortDeclarationGroupGroupLBracePortDeclarationListRBrace {
                l_brace: Box::new(l_brace),
                port_declaration_list: Box::new(port_declaration_list),
                r_brace: Box::new(r_brace),
            };
        let port_declaration_group_group_0_built =
            PortDeclarationGroupGroup::LBracePortDeclarationListRBrace(
                port_declaration_group_group_0_built,
            );
        self.push(
            ASTType::PortDeclarationGroupGroup(port_declaration_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_group_group_1(
        &mut self,
        _port_declaration_item: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_item =
            pop_item!(self, port_declaration_item, PortDeclarationItem, context);
        let port_declaration_group_group_1_built = PortDeclarationGroupGroupPortDeclarationItem {
            port_declaration_item: Box::new(port_declaration_item),
        };
        let port_declaration_group_group_1_built =
            PortDeclarationGroupGroup::PortDeclarationItem(port_declaration_group_group_1_built);
        self.push(
            ASTType::PortDeclarationGroupGroup(port_declaration_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _port_declaration_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut port_declaration_group_list = pop_item!(
            self,
            port_declaration_group_list,
            PortDeclarationGroupList,
            context
        );
        let attribute = pop_item!(self, attribute, Attribute, context);
        let port_declaration_group_list_0_built = PortDeclarationGroupList {
            attribute: Box::new(attribute),
        };
        port_declaration_group_list.push(port_declaration_group_list_0_built);
        self.push(
            ASTType::PortDeclarationGroupList(port_declaration_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_group_list_1_built = Vec::new();
        self.push(
            ASTType::PortDeclarationGroupList(port_declaration_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_item(
        &mut self,
        _identifier: &ParseTreeType<'t>,
        _colon: &ParseTreeType<'t>,
        _port_declaration_item_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration_item_group = pop_item!(
            self,
            port_declaration_item_group,
            PortDeclarationItemGroup,
            context
        );
        let colon = pop_item!(self, colon, Colon, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let port_declaration_item_built = PortDeclarationItem {
            identifier: Box::new(identifier),
            colon: Box::new(colon),
            port_declaration_item_group: Box::new(port_declaration_item_group),
        };
        self.user_grammar
            .port_declaration_item(&port_declaration_item_built)?;
        self.push(
            ASTType::PortDeclarationItem(port_declaration_item_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_item_group_0(
        &mut self,
        _port_type_concrete: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_type_concrete = pop_item!(self, port_type_concrete, PortTypeConcrete, context);
        let port_declaration_item_group_0_built = PortDeclarationItemGroupPortTypeConcrete {
            port_type_concrete: Box::new(port_type_concrete),
        };
        let port_declaration_item_group_0_built =
            PortDeclarationItemGroup::PortTypeConcrete(port_declaration_item_group_0_built);
        self.push(
            ASTType::PortDeclarationItemGroup(port_declaration_item_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_declaration_item_group_1(
        &mut self,
        _port_type_abstract: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_type_abstract = pop_item!(self, port_type_abstract, PortTypeAbstract, context);
        let port_declaration_item_group_1_built = PortDeclarationItemGroupPortTypeAbstract {
            port_type_abstract: Box::new(port_type_abstract),
        };
        let port_declaration_item_group_1_built =
            PortDeclarationItemGroup::PortTypeAbstract(port_declaration_item_group_1_built);
        self.push(
            ASTType::PortDeclarationItemGroup(port_declaration_item_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_concrete(
        &mut self,
        _direction: &ParseTreeType<'t>,
        _port_type_concrete_opt: &ParseTreeType<'t>,
        _array_type: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array_type = pop_item!(self, array_type, ArrayType, context);
        let port_type_concrete_opt =
            pop_item!(self, port_type_concrete_opt, PortTypeConcreteOpt, context);
        let direction = pop_item!(self, direction, Direction, context);
        let port_type_concrete_built = PortTypeConcrete {
            direction: Box::new(direction),
            port_type_concrete_opt,
            array_type: Box::new(array_type),
        };
        self.user_grammar
            .port_type_concrete(&port_type_concrete_built)?;
        self.push(ASTType::PortTypeConcrete(port_type_concrete_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_concrete_opt_0(&mut self, _clock_domain: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_domain = pop_item!(self, clock_domain, ClockDomain, context);
        let port_type_concrete_opt_0_built = PortTypeConcreteOpt {
            clock_domain: Box::new(clock_domain),
        };
        self.push(
            ASTType::PortTypeConcreteOpt(Some(port_type_concrete_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_concrete_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PortTypeConcreteOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_abstract(
        &mut self,
        _port_type_abstract_opt: &ParseTreeType<'t>,
        _interface: &ParseTreeType<'t>,
        _port_type_abstract_opt0: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_type_abstract_opt0 =
            pop_item!(self, port_type_abstract_opt0, PortTypeAbstractOpt0, context);
        let interface = pop_item!(self, interface, Interface, context);
        let port_type_abstract_opt =
            pop_item!(self, port_type_abstract_opt, PortTypeAbstractOpt, context);
        let port_type_abstract_built = PortTypeAbstract {
            port_type_abstract_opt,
            interface: Box::new(interface),
            port_type_abstract_opt0,
        };
        self.user_grammar
            .port_type_abstract(&port_type_abstract_built)?;
        self.push(ASTType::PortTypeAbstract(port_type_abstract_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_abstract_opt0_0(&mut self, _array: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let array = pop_item!(self, array, Array, context);
        let port_type_abstract_opt0_0_built = PortTypeAbstractOpt0 {
            array: Box::new(array),
        };
        self.push(
            ASTType::PortTypeAbstractOpt0(Some(port_type_abstract_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_abstract_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PortTypeAbstractOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_abstract_opt_0(&mut self, _clock_domain: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let clock_domain = pop_item!(self, clock_domain, ClockDomain, context);
        let port_type_abstract_opt_0_built = PortTypeAbstractOpt {
            clock_domain: Box::new(clock_domain),
        };
        self.push(
            ASTType::PortTypeAbstractOpt(Some(port_type_abstract_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn port_type_abstract_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PortTypeAbstractOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn direction_0(&mut self, _input: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let input = pop_item!(self, input, Input, context);
        let direction_0_built = DirectionInput {
            input: Box::new(input),
        };
        let direction_0_built = Direction::Input(direction_0_built);
        self.user_grammar.direction(&direction_0_built)?;
        self.push(ASTType::Direction(direction_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn direction_1(&mut self, _output: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let output = pop_item!(self, output, Output, context);
        let direction_1_built = DirectionOutput {
            output: Box::new(output),
        };
        let direction_1_built = Direction::Output(direction_1_built);
        self.user_grammar.direction(&direction_1_built)?;
        self.push(ASTType::Direction(direction_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn direction_2(&mut self, _inout: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inout = pop_item!(self, inout, Inout, context);
        let direction_2_built = DirectionInout {
            inout: Box::new(inout),
        };
        let direction_2_built = Direction::Inout(direction_2_built);
        self.user_grammar.direction(&direction_2_built)?;
        self.push(ASTType::Direction(direction_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn direction_3(&mut self, _ref: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#ref = pop_item!(self, r#ref, Ref, context);
        let direction_3_built = DirectionRef {
            r#ref: Box::new(r#ref),
        };
        let direction_3_built = Direction::Ref(direction_3_built);
        self.user_grammar.direction(&direction_3_built)?;
        self.push(ASTType::Direction(direction_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn direction_4(&mut self, _modport: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport = pop_item!(self, modport, Modport, context);
        let direction_4_built = DirectionModport {
            modport: Box::new(modport),
        };
        let direction_4_built = Direction::Modport(direction_4_built);
        self.user_grammar.direction(&direction_4_built)?;
        self.push(ASTType::Direction(direction_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn direction_5(&mut self, _import: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let import = pop_item!(self, import, Import, context);
        let direction_5_built = DirectionImport {
            import: Box::new(import),
        };
        let direction_5_built = Direction::Import(direction_5_built);
        self.user_grammar.direction(&direction_5_built)?;
        self.push(ASTType::Direction(direction_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration(
        &mut self,
        _function: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _function_declaration_opt: &ParseTreeType<'t>,
        _function_declaration_opt0: &ParseTreeType<'t>,
        _function_declaration_opt1: &ParseTreeType<'t>,
        _statement_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let statement_block = pop_item!(self, statement_block, StatementBlock, context);
        let function_declaration_opt1 = pop_item!(
            self,
            function_declaration_opt1,
            FunctionDeclarationOpt1,
            context
        );
        let function_declaration_opt0 = pop_item!(
            self,
            function_declaration_opt0,
            FunctionDeclarationOpt0,
            context
        );
        let function_declaration_opt = pop_item!(
            self,
            function_declaration_opt,
            FunctionDeclarationOpt,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let function = pop_item!(self, function, Function, context);
        let function_declaration_built = FunctionDeclaration {
            function: Box::new(function),
            identifier: Box::new(identifier),
            function_declaration_opt,
            function_declaration_opt0,
            function_declaration_opt1,
            statement_block: Box::new(statement_block),
        };
        self.user_grammar
            .function_declaration(&function_declaration_built)?;
        self.push(
            ASTType::FunctionDeclaration(function_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration_opt1_0(
        &mut self,
        _minus_g_t: &ParseTreeType<'t>,
        _scalar_type: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scalar_type = pop_item!(self, scalar_type, ScalarType, context);
        let minus_g_t = pop_item!(self, minus_g_t, MinusGT, context);
        let function_declaration_opt1_0_built = FunctionDeclarationOpt1 {
            minus_g_t: Box::new(minus_g_t),
            scalar_type: Box::new(scalar_type),
        };
        self.push(
            ASTType::FunctionDeclarationOpt1(Some(function_declaration_opt1_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration_opt1_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::FunctionDeclarationOpt1(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration_opt0_0(&mut self, _port_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration = pop_item!(self, port_declaration, PortDeclaration, context);
        let function_declaration_opt0_0_built = FunctionDeclarationOpt0 {
            port_declaration: Box::new(port_declaration),
        };
        self.push(
            ASTType::FunctionDeclarationOpt0(Some(function_declaration_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::FunctionDeclarationOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration_opt_0(
        &mut self,
        _with_generic_parameter: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter =
            pop_item!(self, with_generic_parameter, WithGenericParameter, context);
        let function_declaration_opt_0_built = FunctionDeclarationOpt {
            with_generic_parameter: Box::new(with_generic_parameter),
        };
        self.push(
            ASTType::FunctionDeclarationOpt(Some(function_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn function_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::FunctionDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn import_declaration(
        &mut self,
        _import: &ParseTreeType<'t>,
        _scoped_identifier: &ParseTreeType<'t>,
        _import_declaration_opt: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let import_declaration_opt =
            pop_item!(self, import_declaration_opt, ImportDeclarationOpt, context);
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let import = pop_item!(self, import, Import, context);
        let import_declaration_built = ImportDeclaration {
            import: Box::new(import),
            scoped_identifier: Box::new(scoped_identifier),
            import_declaration_opt,
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .import_declaration(&import_declaration_built)?;
        self.push(
            ASTType::ImportDeclaration(import_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn import_declaration_opt_0(
        &mut self,
        _colon_colon: &ParseTreeType<'t>,
        _star: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let star = pop_item!(self, star, Star, context);
        let colon_colon = pop_item!(self, colon_colon, ColonColon, context);
        let import_declaration_opt_0_built = ImportDeclarationOpt {
            colon_colon: Box::new(colon_colon),
            star: Box::new(star),
        };
        self.push(
            ASTType::ImportDeclarationOpt(Some(import_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn import_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ImportDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_declaration(
        &mut self,
        _export: &ParseTreeType<'t>,
        _export_declaration_group: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let export_declaration_group = pop_item!(
            self,
            export_declaration_group,
            ExportDeclarationGroup,
            context
        );
        let export = pop_item!(self, export, Export, context);
        let export_declaration_built = ExportDeclaration {
            export: Box::new(export),
            export_declaration_group: Box::new(export_declaration_group),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .export_declaration(&export_declaration_built)?;
        self.push(
            ASTType::ExportDeclaration(export_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_declaration_group_0(&mut self, _star: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let star = pop_item!(self, star, Star, context);
        let export_declaration_group_0_built = ExportDeclarationGroupStar {
            star: Box::new(star),
        };
        let export_declaration_group_0_built =
            ExportDeclarationGroup::Star(export_declaration_group_0_built);
        self.push(
            ASTType::ExportDeclarationGroup(export_declaration_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_declaration_group_1(
        &mut self,
        _scoped_identifier: &ParseTreeType<'t>,
        _export_declaration_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let export_declaration_opt =
            pop_item!(self, export_declaration_opt, ExportDeclarationOpt, context);
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let export_declaration_group_1_built =
            ExportDeclarationGroupScopedIdentifierExportDeclarationOpt {
                scoped_identifier: Box::new(scoped_identifier),
                export_declaration_opt,
            };
        let export_declaration_group_1_built =
            ExportDeclarationGroup::ScopedIdentifierExportDeclarationOpt(
                export_declaration_group_1_built,
            );
        self.push(
            ASTType::ExportDeclarationGroup(export_declaration_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_declaration_opt_0(
        &mut self,
        _colon_colon: &ParseTreeType<'t>,
        _star: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let star = pop_item!(self, star, Star, context);
        let colon_colon = pop_item!(self, colon_colon, ColonColon, context);
        let export_declaration_opt_0_built = ExportDeclarationOpt {
            colon_colon: Box::new(colon_colon),
            star: Box::new(star),
        };
        self.push(
            ASTType::ExportDeclarationOpt(Some(export_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn export_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ExportDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unsafe_block(
        &mut self,
        _unsafe: &ParseTreeType<'t>,
        _l_paren: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _unsafe_block_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let unsafe_block_list =
            pop_and_reverse_item!(self, unsafe_block_list, UnsafeBlockList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let r#unsafe = pop_item!(self, r#unsafe, Unsafe, context);
        let unsafe_block_built = UnsafeBlock {
            r#unsafe: Box::new(r#unsafe),
            l_paren: Box::new(l_paren),
            identifier: Box::new(identifier),
            r_paren: Box::new(r_paren),
            l_brace: Box::new(l_brace),
            unsafe_block_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar.unsafe_block(&unsafe_block_built)?;
        self.push(ASTType::UnsafeBlock(unsafe_block_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unsafe_block_list_0(
        &mut self,
        _generate_group: &ParseTreeType<'t>,
        _unsafe_block_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut unsafe_block_list = pop_item!(self, unsafe_block_list, UnsafeBlockList, context);
        let generate_group = pop_item!(self, generate_group, GenerateGroup, context);
        let unsafe_block_list_0_built = UnsafeBlockList {
            generate_group: Box::new(generate_group),
        };
        unsafe_block_list.push(unsafe_block_list_0_built);
        self.push(ASTType::UnsafeBlockList(unsafe_block_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn unsafe_block_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unsafe_block_list_1_built = Vec::new();
        self.push(ASTType::UnsafeBlockList(unsafe_block_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration(
        &mut self,
        _module_declaration_opt: &ParseTreeType<'t>,
        _module: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _module_declaration_opt0: &ParseTreeType<'t>,
        _module_declaration_opt1: &ParseTreeType<'t>,
        _module_declaration_opt2: &ParseTreeType<'t>,
        _module_declaration_opt3: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _module_declaration_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let module_declaration_list = pop_and_reverse_item!(
            self,
            module_declaration_list,
            ModuleDeclarationList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let module_declaration_opt3 = pop_item!(
            self,
            module_declaration_opt3,
            ModuleDeclarationOpt3,
            context
        );
        let module_declaration_opt2 = pop_item!(
            self,
            module_declaration_opt2,
            ModuleDeclarationOpt2,
            context
        );
        let module_declaration_opt1 = pop_item!(
            self,
            module_declaration_opt1,
            ModuleDeclarationOpt1,
            context
        );
        let module_declaration_opt0 = pop_item!(
            self,
            module_declaration_opt0,
            ModuleDeclarationOpt0,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let module = pop_item!(self, module, Module, context);
        let module_declaration_opt =
            pop_item!(self, module_declaration_opt, ModuleDeclarationOpt, context);
        let module_declaration_built = ModuleDeclaration {
            module_declaration_opt,
            module: Box::new(module),
            identifier: Box::new(identifier),
            module_declaration_opt0,
            module_declaration_opt1,
            module_declaration_opt2,
            module_declaration_opt3,
            l_brace: Box::new(l_brace),
            module_declaration_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .module_declaration(&module_declaration_built)?;
        self.push(
            ASTType::ModuleDeclaration(module_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_list_0(
        &mut self,
        _module_group: &ParseTreeType<'t>,
        _module_declaration_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut module_declaration_list = pop_item!(
            self,
            module_declaration_list,
            ModuleDeclarationList,
            context
        );
        let module_group = pop_item!(self, module_group, ModuleGroup, context);
        let module_declaration_list_0_built = ModuleDeclarationList {
            module_group: Box::new(module_group),
        };
        module_declaration_list.push(module_declaration_list_0_built);
        self.push(
            ASTType::ModuleDeclarationList(module_declaration_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_declaration_list_1_built = Vec::new();
        self.push(
            ASTType::ModuleDeclarationList(module_declaration_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt3_0(&mut self, _port_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration = pop_item!(self, port_declaration, PortDeclaration, context);
        let module_declaration_opt3_0_built = ModuleDeclarationOpt3 {
            port_declaration: Box::new(port_declaration),
        };
        self.push(
            ASTType::ModuleDeclarationOpt3(Some(module_declaration_opt3_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt3_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ModuleDeclarationOpt3(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt2_0(&mut self, _with_parameter: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter = pop_item!(self, with_parameter, WithParameter, context);
        let module_declaration_opt2_0_built = ModuleDeclarationOpt2 {
            with_parameter: Box::new(with_parameter),
        };
        self.push(
            ASTType::ModuleDeclarationOpt2(Some(module_declaration_opt2_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt2_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ModuleDeclarationOpt2(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt1_0(
        &mut self,
        _for: &ParseTreeType<'t>,
        _scoped_identifier: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let scoped_identifier = pop_item!(self, scoped_identifier, ScopedIdentifier, context);
        let r#for = pop_item!(self, r#for, For, context);
        let module_declaration_opt1_0_built = ModuleDeclarationOpt1 {
            r#for: Box::new(r#for),
            scoped_identifier: Box::new(scoped_identifier),
        };
        self.push(
            ASTType::ModuleDeclarationOpt1(Some(module_declaration_opt1_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt1_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ModuleDeclarationOpt1(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt0_0(
        &mut self,
        _with_generic_parameter: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter =
            pop_item!(self, with_generic_parameter, WithGenericParameter, context);
        let module_declaration_opt0_0_built = ModuleDeclarationOpt0 {
            with_generic_parameter: Box::new(with_generic_parameter),
        };
        self.push(
            ASTType::ModuleDeclarationOpt0(Some(module_declaration_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ModuleDeclarationOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt_0(&mut self, _pub: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#pub = pop_item!(self, r#pub, Pub, context);
        let module_declaration_opt_0_built = ModuleDeclarationOpt {
            r#pub: Box::new(r#pub),
        };
        self.push(
            ASTType::ModuleDeclarationOpt(Some(module_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ModuleDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group(
        &mut self,
        _module_group_list: &ParseTreeType<'t>,
        _module_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_group_group = pop_item!(self, module_group_group, ModuleGroupGroup, context);
        let module_group_list =
            pop_and_reverse_item!(self, module_group_list, ModuleGroupList, context);
        let module_group_built = ModuleGroup {
            module_group_list,
            module_group_group: Box::new(module_group_group),
        };
        self.user_grammar.module_group(&module_group_built)?;
        self.push(ASTType::ModuleGroup(module_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _module_group_group_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let module_group_group_list =
            pop_and_reverse_item!(self, module_group_group_list, ModuleGroupGroupList, context);
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let module_group_group_0_built = ModuleGroupGroupLBraceModuleGroupGroupListRBrace {
            l_brace: Box::new(l_brace),
            module_group_group_list,
            r_brace: Box::new(r_brace),
        };
        let module_group_group_0_built =
            ModuleGroupGroup::LBraceModuleGroupGroupListRBrace(module_group_group_0_built);
        self.push(
            ASTType::ModuleGroupGroup(module_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group_group_list_0(
        &mut self,
        _module_group: &ParseTreeType<'t>,
        _module_group_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut module_group_group_list =
            pop_item!(self, module_group_group_list, ModuleGroupGroupList, context);
        let module_group = pop_item!(self, module_group, ModuleGroup, context);
        let module_group_group_list_0_built = ModuleGroupGroupList {
            module_group: Box::new(module_group),
        };
        module_group_group_list.push(module_group_group_list_0_built);
        self.push(
            ASTType::ModuleGroupGroupList(module_group_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_group_group_list_1_built = Vec::new();
        self.push(
            ASTType::ModuleGroupGroupList(module_group_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group_group_1(&mut self, _module_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_item = pop_item!(self, module_item, ModuleItem, context);
        let module_group_group_1_built = ModuleGroupGroupModuleItem {
            module_item: Box::new(module_item),
        };
        let module_group_group_1_built = ModuleGroupGroup::ModuleItem(module_group_group_1_built);
        self.push(
            ASTType::ModuleGroupGroup(module_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _module_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut module_group_list = pop_item!(self, module_group_list, ModuleGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let module_group_list_0_built = ModuleGroupList {
            attribute: Box::new(attribute),
        };
        module_group_list.push(module_group_list_0_built);
        self.push(ASTType::ModuleGroupList(module_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_group_list_1_built = Vec::new();
        self.push(ASTType::ModuleGroupList(module_group_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn module_item(&mut self, _generate_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_item = pop_item!(self, generate_item, GenerateItem, context);
        let module_item_built = ModuleItem {
            generate_item: Box::new(generate_item),
        };
        self.user_grammar.module_item(&module_item_built)?;
        self.push(ASTType::ModuleItem(module_item_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration(
        &mut self,
        _interface_declaration_opt: &ParseTreeType<'t>,
        _interface: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _interface_declaration_opt0: &ParseTreeType<'t>,
        _interface_declaration_opt1: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _interface_declaration_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let interface_declaration_list = pop_and_reverse_item!(
            self,
            interface_declaration_list,
            InterfaceDeclarationList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let interface_declaration_opt1 = pop_item!(
            self,
            interface_declaration_opt1,
            InterfaceDeclarationOpt1,
            context
        );
        let interface_declaration_opt0 = pop_item!(
            self,
            interface_declaration_opt0,
            InterfaceDeclarationOpt0,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let interface = pop_item!(self, interface, Interface, context);
        let interface_declaration_opt = pop_item!(
            self,
            interface_declaration_opt,
            InterfaceDeclarationOpt,
            context
        );
        let interface_declaration_built = InterfaceDeclaration {
            interface_declaration_opt,
            interface: Box::new(interface),
            identifier: Box::new(identifier),
            interface_declaration_opt0,
            interface_declaration_opt1,
            l_brace: Box::new(l_brace),
            interface_declaration_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .interface_declaration(&interface_declaration_built)?;
        self.push(
            ASTType::InterfaceDeclaration(interface_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_list_0(
        &mut self,
        _interface_group: &ParseTreeType<'t>,
        _interface_declaration_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut interface_declaration_list = pop_item!(
            self,
            interface_declaration_list,
            InterfaceDeclarationList,
            context
        );
        let interface_group = pop_item!(self, interface_group, InterfaceGroup, context);
        let interface_declaration_list_0_built = InterfaceDeclarationList {
            interface_group: Box::new(interface_group),
        };
        interface_declaration_list.push(interface_declaration_list_0_built);
        self.push(
            ASTType::InterfaceDeclarationList(interface_declaration_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_declaration_list_1_built = Vec::new();
        self.push(
            ASTType::InterfaceDeclarationList(interface_declaration_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_opt1_0(&mut self, _with_parameter: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter = pop_item!(self, with_parameter, WithParameter, context);
        let interface_declaration_opt1_0_built = InterfaceDeclarationOpt1 {
            with_parameter: Box::new(with_parameter),
        };
        self.push(
            ASTType::InterfaceDeclarationOpt1(Some(interface_declaration_opt1_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_opt1_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InterfaceDeclarationOpt1(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_opt0_0(
        &mut self,
        _with_generic_parameter: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter =
            pop_item!(self, with_generic_parameter, WithGenericParameter, context);
        let interface_declaration_opt0_0_built = InterfaceDeclarationOpt0 {
            with_generic_parameter: Box::new(with_generic_parameter),
        };
        self.push(
            ASTType::InterfaceDeclarationOpt0(Some(interface_declaration_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InterfaceDeclarationOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_opt_0(&mut self, _pub: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#pub = pop_item!(self, r#pub, Pub, context);
        let interface_declaration_opt_0_built = InterfaceDeclarationOpt {
            r#pub: Box::new(r#pub),
        };
        self.push(
            ASTType::InterfaceDeclarationOpt(Some(interface_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::InterfaceDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group(
        &mut self,
        _interface_group_list: &ParseTreeType<'t>,
        _interface_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_group_group =
            pop_item!(self, interface_group_group, InterfaceGroupGroup, context);
        let interface_group_list =
            pop_and_reverse_item!(self, interface_group_list, InterfaceGroupList, context);
        let interface_group_built = InterfaceGroup {
            interface_group_list,
            interface_group_group: Box::new(interface_group_group),
        };
        self.user_grammar.interface_group(&interface_group_built)?;
        self.push(ASTType::InterfaceGroup(interface_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _interface_group_group_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let interface_group_group_list = pop_and_reverse_item!(
            self,
            interface_group_group_list,
            InterfaceGroupGroupList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let interface_group_group_0_built =
            InterfaceGroupGroupLBraceInterfaceGroupGroupListRBrace {
                l_brace: Box::new(l_brace),
                interface_group_group_list,
                r_brace: Box::new(r_brace),
            };
        let interface_group_group_0_built =
            InterfaceGroupGroup::LBraceInterfaceGroupGroupListRBrace(interface_group_group_0_built);
        self.push(
            ASTType::InterfaceGroupGroup(interface_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group_group_list_0(
        &mut self,
        _interface_group: &ParseTreeType<'t>,
        _interface_group_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut interface_group_group_list = pop_item!(
            self,
            interface_group_group_list,
            InterfaceGroupGroupList,
            context
        );
        let interface_group = pop_item!(self, interface_group, InterfaceGroup, context);
        let interface_group_group_list_0_built = InterfaceGroupGroupList {
            interface_group: Box::new(interface_group),
        };
        interface_group_group_list.push(interface_group_group_list_0_built);
        self.push(
            ASTType::InterfaceGroupGroupList(interface_group_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_group_group_list_1_built = Vec::new();
        self.push(
            ASTType::InterfaceGroupGroupList(interface_group_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group_group_1(&mut self, _interface_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_item = pop_item!(self, interface_item, InterfaceItem, context);
        let interface_group_group_1_built = InterfaceGroupGroupInterfaceItem {
            interface_item: Box::new(interface_item),
        };
        let interface_group_group_1_built =
            InterfaceGroupGroup::InterfaceItem(interface_group_group_1_built);
        self.push(
            ASTType::InterfaceGroupGroup(interface_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _interface_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut interface_group_list =
            pop_item!(self, interface_group_list, InterfaceGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let interface_group_list_0_built = InterfaceGroupList {
            attribute: Box::new(attribute),
        };
        interface_group_list.push(interface_group_list_0_built);
        self.push(ASTType::InterfaceGroupList(interface_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_group_list_1_built = Vec::new();
        self.push(
            ASTType::InterfaceGroupList(interface_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_item_0(&mut self, _generate_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_item = pop_item!(self, generate_item, GenerateItem, context);
        let interface_item_0_built = InterfaceItemGenerateItem {
            generate_item: Box::new(generate_item),
        };
        let interface_item_0_built = InterfaceItem::GenerateItem(interface_item_0_built);
        self.user_grammar.interface_item(&interface_item_0_built)?;
        self.push(ASTType::InterfaceItem(interface_item_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn interface_item_1(&mut self, _modport_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let modport_declaration = pop_item!(self, modport_declaration, ModportDeclaration, context);
        let interface_item_1_built = InterfaceItemModportDeclaration {
            modport_declaration: Box::new(modport_declaration),
        };
        let interface_item_1_built = InterfaceItem::ModportDeclaration(interface_item_1_built);
        self.user_grammar.interface_item(&interface_item_1_built)?;
        self.push(ASTType::InterfaceItem(interface_item_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_if_declaration(
        &mut self,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _generate_named_block: &ParseTreeType<'t>,
        _generate_if_declaration_list: &ParseTreeType<'t>,
        _generate_if_declaration_opt: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_if_declaration_opt = pop_item!(
            self,
            generate_if_declaration_opt,
            GenerateIfDeclarationOpt,
            context
        );
        let generate_if_declaration_list = pop_and_reverse_item!(
            self,
            generate_if_declaration_list,
            GenerateIfDeclarationList,
            context
        );
        let generate_named_block =
            pop_item!(self, generate_named_block, GenerateNamedBlock, context);
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let generate_if_declaration_built = GenerateIfDeclaration {
            r#if: Box::new(r#if),
            expression: Box::new(expression),
            generate_named_block: Box::new(generate_named_block),
            generate_if_declaration_list,
            generate_if_declaration_opt,
        };
        self.user_grammar
            .generate_if_declaration(&generate_if_declaration_built)?;
        self.push(
            ASTType::GenerateIfDeclaration(generate_if_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_if_declaration_list_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _if: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
        _generate_optional_named_block: &ParseTreeType<'t>,
        _generate_if_declaration_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut generate_if_declaration_list = pop_item!(
            self,
            generate_if_declaration_list,
            GenerateIfDeclarationList,
            context
        );
        let generate_optional_named_block = pop_item!(
            self,
            generate_optional_named_block,
            GenerateOptionalNamedBlock,
            context
        );
        let expression = pop_item!(self, expression, Expression, context);
        let r#if = pop_item!(self, r#if, If, context);
        let r#else = pop_item!(self, r#else, Else, context);
        let generate_if_declaration_list_0_built = GenerateIfDeclarationList {
            generate_optional_named_block: Box::new(generate_optional_named_block),
            expression: Box::new(expression),
            r#if: Box::new(r#if),
            r#else: Box::new(r#else),
        };
        generate_if_declaration_list.push(generate_if_declaration_list_0_built);
        self.push(
            ASTType::GenerateIfDeclarationList(generate_if_declaration_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_if_declaration_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_if_declaration_list_1_built = Vec::new();
        self.push(
            ASTType::GenerateIfDeclarationList(generate_if_declaration_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_if_declaration_opt_0(
        &mut self,
        _else: &ParseTreeType<'t>,
        _generate_optional_named_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_optional_named_block = pop_item!(
            self,
            generate_optional_named_block,
            GenerateOptionalNamedBlock,
            context
        );
        let r#else = pop_item!(self, r#else, Else, context);
        let generate_if_declaration_opt_0_built = GenerateIfDeclarationOpt {
            r#else: Box::new(r#else),
            generate_optional_named_block: Box::new(generate_optional_named_block),
        };
        self.push(
            ASTType::GenerateIfDeclarationOpt(Some(generate_if_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_if_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::GenerateIfDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_for_declaration(
        &mut self,
        _for: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _in: &ParseTreeType<'t>,
        _range: &ParseTreeType<'t>,
        _generate_for_declaration_opt: &ParseTreeType<'t>,
        _generate_named_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_named_block =
            pop_item!(self, generate_named_block, GenerateNamedBlock, context);
        let generate_for_declaration_opt = pop_item!(
            self,
            generate_for_declaration_opt,
            GenerateForDeclarationOpt,
            context
        );
        let range = pop_item!(self, range, Range, context);
        let r#in = pop_item!(self, r#in, In, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let r#for = pop_item!(self, r#for, For, context);
        let generate_for_declaration_built = GenerateForDeclaration {
            r#for: Box::new(r#for),
            identifier: Box::new(identifier),
            r#in: Box::new(r#in),
            range: Box::new(range),
            generate_for_declaration_opt,
            generate_named_block: Box::new(generate_named_block),
        };
        self.user_grammar
            .generate_for_declaration(&generate_for_declaration_built)?;
        self.push(
            ASTType::GenerateForDeclaration(generate_for_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_for_declaration_opt_0(
        &mut self,
        _step: &ParseTreeType<'t>,
        _assignment_operator: &ParseTreeType<'t>,
        _expression: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let expression = pop_item!(self, expression, Expression, context);
        let assignment_operator = pop_item!(self, assignment_operator, AssignmentOperator, context);
        let step = pop_item!(self, step, Step, context);
        let generate_for_declaration_opt_0_built = GenerateForDeclarationOpt {
            step: Box::new(step),
            assignment_operator: Box::new(assignment_operator),
            expression: Box::new(expression),
        };
        self.push(
            ASTType::GenerateForDeclarationOpt(Some(generate_for_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_for_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::GenerateForDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_block_declaration(
        &mut self,
        _generate_named_block: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_named_block =
            pop_item!(self, generate_named_block, GenerateNamedBlock, context);
        let generate_block_declaration_built = GenerateBlockDeclaration {
            generate_named_block: Box::new(generate_named_block),
        };
        self.user_grammar
            .generate_block_declaration(&generate_block_declaration_built)?;
        self.push(
            ASTType::GenerateBlockDeclaration(generate_block_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_named_block(
        &mut self,
        _colon: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _generate_named_block_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let generate_named_block_list = pop_and_reverse_item!(
            self,
            generate_named_block_list,
            GenerateNamedBlockList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let colon = pop_item!(self, colon, Colon, context);
        let generate_named_block_built = GenerateNamedBlock {
            colon: Box::new(colon),
            identifier: Box::new(identifier),
            l_brace: Box::new(l_brace),
            generate_named_block_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .generate_named_block(&generate_named_block_built)?;
        self.push(
            ASTType::GenerateNamedBlock(generate_named_block_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_named_block_list_0(
        &mut self,
        _generate_group: &ParseTreeType<'t>,
        _generate_named_block_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut generate_named_block_list = pop_item!(
            self,
            generate_named_block_list,
            GenerateNamedBlockList,
            context
        );
        let generate_group = pop_item!(self, generate_group, GenerateGroup, context);
        let generate_named_block_list_0_built = GenerateNamedBlockList {
            generate_group: Box::new(generate_group),
        };
        generate_named_block_list.push(generate_named_block_list_0_built);
        self.push(
            ASTType::GenerateNamedBlockList(generate_named_block_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_named_block_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_named_block_list_1_built = Vec::new();
        self.push(
            ASTType::GenerateNamedBlockList(generate_named_block_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_optional_named_block(
        &mut self,
        _generate_optional_named_block_opt: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _generate_optional_named_block_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let generate_optional_named_block_list = pop_and_reverse_item!(
            self,
            generate_optional_named_block_list,
            GenerateOptionalNamedBlockList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let generate_optional_named_block_opt = pop_item!(
            self,
            generate_optional_named_block_opt,
            GenerateOptionalNamedBlockOpt,
            context
        );
        let generate_optional_named_block_built = GenerateOptionalNamedBlock {
            generate_optional_named_block_opt,
            l_brace: Box::new(l_brace),
            generate_optional_named_block_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .generate_optional_named_block(&generate_optional_named_block_built)?;
        self.push(
            ASTType::GenerateOptionalNamedBlock(generate_optional_named_block_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_optional_named_block_list_0(
        &mut self,
        _generate_group: &ParseTreeType<'t>,
        _generate_optional_named_block_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut generate_optional_named_block_list = pop_item!(
            self,
            generate_optional_named_block_list,
            GenerateOptionalNamedBlockList,
            context
        );
        let generate_group = pop_item!(self, generate_group, GenerateGroup, context);
        let generate_optional_named_block_list_0_built = GenerateOptionalNamedBlockList {
            generate_group: Box::new(generate_group),
        };
        generate_optional_named_block_list.push(generate_optional_named_block_list_0_built);
        self.push(
            ASTType::GenerateOptionalNamedBlockList(generate_optional_named_block_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_optional_named_block_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_optional_named_block_list_1_built = Vec::new();
        self.push(
            ASTType::GenerateOptionalNamedBlockList(generate_optional_named_block_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_optional_named_block_opt_0(
        &mut self,
        _colon: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let identifier = pop_item!(self, identifier, Identifier, context);
        let colon = pop_item!(self, colon, Colon, context);
        let generate_optional_named_block_opt_0_built = GenerateOptionalNamedBlockOpt {
            colon: Box::new(colon),
            identifier: Box::new(identifier),
        };
        self.push(
            ASTType::GenerateOptionalNamedBlockOpt(Some(generate_optional_named_block_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_optional_named_block_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::GenerateOptionalNamedBlockOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group(
        &mut self,
        _generate_group_list: &ParseTreeType<'t>,
        _generate_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_group_group =
            pop_item!(self, generate_group_group, GenerateGroupGroup, context);
        let generate_group_list =
            pop_and_reverse_item!(self, generate_group_list, GenerateGroupList, context);
        let generate_group_built = GenerateGroup {
            generate_group_list,
            generate_group_group: Box::new(generate_group_group),
        };
        self.user_grammar.generate_group(&generate_group_built)?;
        self.push(ASTType::GenerateGroup(generate_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _generate_group_group_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let generate_group_group_list = pop_and_reverse_item!(
            self,
            generate_group_group_list,
            GenerateGroupGroupList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let generate_group_group_0_built = GenerateGroupGroupLBraceGenerateGroupGroupListRBrace {
            l_brace: Box::new(l_brace),
            generate_group_group_list,
            r_brace: Box::new(r_brace),
        };
        let generate_group_group_0_built =
            GenerateGroupGroup::LBraceGenerateGroupGroupListRBrace(generate_group_group_0_built);
        self.push(
            ASTType::GenerateGroupGroup(generate_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group_group_list_0(
        &mut self,
        _generate_group: &ParseTreeType<'t>,
        _generate_group_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut generate_group_group_list = pop_item!(
            self,
            generate_group_group_list,
            GenerateGroupGroupList,
            context
        );
        let generate_group = pop_item!(self, generate_group, GenerateGroup, context);
        let generate_group_group_list_0_built = GenerateGroupGroupList {
            generate_group: Box::new(generate_group),
        };
        generate_group_group_list.push(generate_group_group_list_0_built);
        self.push(
            ASTType::GenerateGroupGroupList(generate_group_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_group_group_list_1_built = Vec::new();
        self.push(
            ASTType::GenerateGroupGroupList(generate_group_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group_group_1(&mut self, _generate_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_item = pop_item!(self, generate_item, GenerateItem, context);
        let generate_group_group_1_built = GenerateGroupGroupGenerateItem {
            generate_item: Box::new(generate_item),
        };
        let generate_group_group_1_built =
            GenerateGroupGroup::GenerateItem(generate_group_group_1_built);
        self.push(
            ASTType::GenerateGroupGroup(generate_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _generate_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut generate_group_list =
            pop_item!(self, generate_group_list, GenerateGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let generate_group_list_0_built = GenerateGroupList {
            attribute: Box::new(attribute),
        };
        generate_group_list.push(generate_group_list_0_built);
        self.push(ASTType::GenerateGroupList(generate_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_group_list_1_built = Vec::new();
        self.push(
            ASTType::GenerateGroupList(generate_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_0(&mut self, _let_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let let_declaration = pop_item!(self, let_declaration, LetDeclaration, context);
        let generate_item_0_built = GenerateItemLetDeclaration {
            let_declaration: Box::new(let_declaration),
        };
        let generate_item_0_built = GenerateItem::LetDeclaration(generate_item_0_built);
        self.user_grammar.generate_item(&generate_item_0_built)?;
        self.push(ASTType::GenerateItem(generate_item_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_1(&mut self, _var_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let var_declaration = pop_item!(self, var_declaration, VarDeclaration, context);
        let generate_item_1_built = GenerateItemVarDeclaration {
            var_declaration: Box::new(var_declaration),
        };
        let generate_item_1_built = GenerateItem::VarDeclaration(generate_item_1_built);
        self.user_grammar.generate_item(&generate_item_1_built)?;
        self.push(ASTType::GenerateItem(generate_item_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_2(&mut self, _inst_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let inst_declaration = pop_item!(self, inst_declaration, InstDeclaration, context);
        let generate_item_2_built = GenerateItemInstDeclaration {
            inst_declaration: Box::new(inst_declaration),
        };
        let generate_item_2_built = GenerateItem::InstDeclaration(generate_item_2_built);
        self.user_grammar.generate_item(&generate_item_2_built)?;
        self.push(ASTType::GenerateItem(generate_item_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_3(&mut self, _const_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let const_declaration = pop_item!(self, const_declaration, ConstDeclaration, context);
        let generate_item_3_built = GenerateItemConstDeclaration {
            const_declaration: Box::new(const_declaration),
        };
        let generate_item_3_built = GenerateItem::ConstDeclaration(generate_item_3_built);
        self.user_grammar.generate_item(&generate_item_3_built)?;
        self.push(ASTType::GenerateItem(generate_item_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_4(&mut self, _always_ff_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_ff_declaration =
            pop_item!(self, always_ff_declaration, AlwaysFfDeclaration, context);
        let generate_item_4_built = GenerateItemAlwaysFfDeclaration {
            always_ff_declaration: Box::new(always_ff_declaration),
        };
        let generate_item_4_built = GenerateItem::AlwaysFfDeclaration(generate_item_4_built);
        self.user_grammar.generate_item(&generate_item_4_built)?;
        self.push(ASTType::GenerateItem(generate_item_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_5(&mut self, _always_comb_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let always_comb_declaration = pop_item!(
            self,
            always_comb_declaration,
            AlwaysCombDeclaration,
            context
        );
        let generate_item_5_built = GenerateItemAlwaysCombDeclaration {
            always_comb_declaration: Box::new(always_comb_declaration),
        };
        let generate_item_5_built = GenerateItem::AlwaysCombDeclaration(generate_item_5_built);
        self.user_grammar.generate_item(&generate_item_5_built)?;
        self.push(ASTType::GenerateItem(generate_item_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_6(&mut self, _assign_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let assign_declaration = pop_item!(self, assign_declaration, AssignDeclaration, context);
        let generate_item_6_built = GenerateItemAssignDeclaration {
            assign_declaration: Box::new(assign_declaration),
        };
        let generate_item_6_built = GenerateItem::AssignDeclaration(generate_item_6_built);
        self.user_grammar.generate_item(&generate_item_6_built)?;
        self.push(ASTType::GenerateItem(generate_item_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_7(&mut self, _function_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let function_declaration =
            pop_item!(self, function_declaration, FunctionDeclaration, context);
        let generate_item_7_built = GenerateItemFunctionDeclaration {
            function_declaration: Box::new(function_declaration),
        };
        let generate_item_7_built = GenerateItem::FunctionDeclaration(generate_item_7_built);
        self.user_grammar.generate_item(&generate_item_7_built)?;
        self.push(ASTType::GenerateItem(generate_item_7_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_8(&mut self, _generate_if_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_if_declaration = pop_item!(
            self,
            generate_if_declaration,
            GenerateIfDeclaration,
            context
        );
        let generate_item_8_built = GenerateItemGenerateIfDeclaration {
            generate_if_declaration: Box::new(generate_if_declaration),
        };
        let generate_item_8_built = GenerateItem::GenerateIfDeclaration(generate_item_8_built);
        self.user_grammar.generate_item(&generate_item_8_built)?;
        self.push(ASTType::GenerateItem(generate_item_8_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_9(&mut self, _generate_for_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_for_declaration = pop_item!(
            self,
            generate_for_declaration,
            GenerateForDeclaration,
            context
        );
        let generate_item_9_built = GenerateItemGenerateForDeclaration {
            generate_for_declaration: Box::new(generate_for_declaration),
        };
        let generate_item_9_built = GenerateItem::GenerateForDeclaration(generate_item_9_built);
        self.user_grammar.generate_item(&generate_item_9_built)?;
        self.push(ASTType::GenerateItem(generate_item_9_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_10(&mut self, _generate_block_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let generate_block_declaration = pop_item!(
            self,
            generate_block_declaration,
            GenerateBlockDeclaration,
            context
        );
        let generate_item_10_built = GenerateItemGenerateBlockDeclaration {
            generate_block_declaration: Box::new(generate_block_declaration),
        };
        let generate_item_10_built = GenerateItem::GenerateBlockDeclaration(generate_item_10_built);
        self.user_grammar.generate_item(&generate_item_10_built)?;
        self.push(ASTType::GenerateItem(generate_item_10_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_11(&mut self, _type_def_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let type_def_declaration =
            pop_item!(self, type_def_declaration, TypeDefDeclaration, context);
        let generate_item_11_built = GenerateItemTypeDefDeclaration {
            type_def_declaration: Box::new(type_def_declaration),
        };
        let generate_item_11_built = GenerateItem::TypeDefDeclaration(generate_item_11_built);
        self.user_grammar.generate_item(&generate_item_11_built)?;
        self.push(ASTType::GenerateItem(generate_item_11_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_12(&mut self, _enum_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_declaration = pop_item!(self, enum_declaration, EnumDeclaration, context);
        let generate_item_12_built = GenerateItemEnumDeclaration {
            enum_declaration: Box::new(enum_declaration),
        };
        let generate_item_12_built = GenerateItem::EnumDeclaration(generate_item_12_built);
        self.user_grammar.generate_item(&generate_item_12_built)?;
        self.push(ASTType::GenerateItem(generate_item_12_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_13(&mut self, _struct_union_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_declaration = pop_item!(
            self,
            struct_union_declaration,
            StructUnionDeclaration,
            context
        );
        let generate_item_13_built = GenerateItemStructUnionDeclaration {
            struct_union_declaration: Box::new(struct_union_declaration),
        };
        let generate_item_13_built = GenerateItem::StructUnionDeclaration(generate_item_13_built);
        self.user_grammar.generate_item(&generate_item_13_built)?;
        self.push(ASTType::GenerateItem(generate_item_13_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_14(&mut self, _import_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let import_declaration = pop_item!(self, import_declaration, ImportDeclaration, context);
        let generate_item_14_built = GenerateItemImportDeclaration {
            import_declaration: Box::new(import_declaration),
        };
        let generate_item_14_built = GenerateItem::ImportDeclaration(generate_item_14_built);
        self.user_grammar.generate_item(&generate_item_14_built)?;
        self.push(ASTType::GenerateItem(generate_item_14_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_15(&mut self, _initial_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let initial_declaration = pop_item!(self, initial_declaration, InitialDeclaration, context);
        let generate_item_15_built = GenerateItemInitialDeclaration {
            initial_declaration: Box::new(initial_declaration),
        };
        let generate_item_15_built = GenerateItem::InitialDeclaration(generate_item_15_built);
        self.user_grammar.generate_item(&generate_item_15_built)?;
        self.push(ASTType::GenerateItem(generate_item_15_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_16(&mut self, _final_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let final_declaration = pop_item!(self, final_declaration, FinalDeclaration, context);
        let generate_item_16_built = GenerateItemFinalDeclaration {
            final_declaration: Box::new(final_declaration),
        };
        let generate_item_16_built = GenerateItem::FinalDeclaration(generate_item_16_built);
        self.user_grammar.generate_item(&generate_item_16_built)?;
        self.push(ASTType::GenerateItem(generate_item_16_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn generate_item_17(&mut self, _unsafe_block: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let unsafe_block = pop_item!(self, unsafe_block, UnsafeBlock, context);
        let generate_item_17_built = GenerateItemUnsafeBlock {
            unsafe_block: Box::new(unsafe_block),
        };
        let generate_item_17_built = GenerateItem::UnsafeBlock(generate_item_17_built);
        self.user_grammar.generate_item(&generate_item_17_built)?;
        self.push(ASTType::GenerateItem(generate_item_17_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration(
        &mut self,
        _package_declaration_opt: &ParseTreeType<'t>,
        _package: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _package_declaration_opt0: &ParseTreeType<'t>,
        _l_brace: &ParseTreeType<'t>,
        _package_declaration_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let package_declaration_list = pop_and_reverse_item!(
            self,
            package_declaration_list,
            PackageDeclarationList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let package_declaration_opt0 = pop_item!(
            self,
            package_declaration_opt0,
            PackageDeclarationOpt0,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let package = pop_item!(self, package, Package, context);
        let package_declaration_opt = pop_item!(
            self,
            package_declaration_opt,
            PackageDeclarationOpt,
            context
        );
        let package_declaration_built = PackageDeclaration {
            package_declaration_opt,
            package: Box::new(package),
            identifier: Box::new(identifier),
            package_declaration_opt0,
            l_brace: Box::new(l_brace),
            package_declaration_list,
            r_brace: Box::new(r_brace),
        };
        self.user_grammar
            .package_declaration(&package_declaration_built)?;
        self.push(
            ASTType::PackageDeclaration(package_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration_list_0(
        &mut self,
        _package_group: &ParseTreeType<'t>,
        _package_declaration_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut package_declaration_list = pop_item!(
            self,
            package_declaration_list,
            PackageDeclarationList,
            context
        );
        let package_group = pop_item!(self, package_group, PackageGroup, context);
        let package_declaration_list_0_built = PackageDeclarationList {
            package_group: Box::new(package_group),
        };
        package_declaration_list.push(package_declaration_list_0_built);
        self.push(
            ASTType::PackageDeclarationList(package_declaration_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_declaration_list_1_built = Vec::new();
        self.push(
            ASTType::PackageDeclarationList(package_declaration_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration_opt0_0(
        &mut self,
        _with_generic_parameter: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_generic_parameter =
            pop_item!(self, with_generic_parameter, WithGenericParameter, context);
        let package_declaration_opt0_0_built = PackageDeclarationOpt0 {
            with_generic_parameter: Box::new(with_generic_parameter),
        };
        self.push(
            ASTType::PackageDeclarationOpt0(Some(package_declaration_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PackageDeclarationOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration_opt_0(&mut self, _pub: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#pub = pop_item!(self, r#pub, Pub, context);
        let package_declaration_opt_0_built = PackageDeclarationOpt {
            r#pub: Box::new(r#pub),
        };
        self.push(
            ASTType::PackageDeclarationOpt(Some(package_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::PackageDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group(
        &mut self,
        _package_group_list: &ParseTreeType<'t>,
        _package_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_group_group = pop_item!(self, package_group_group, PackageGroupGroup, context);
        let package_group_list =
            pop_and_reverse_item!(self, package_group_list, PackageGroupList, context);
        let package_group_built = PackageGroup {
            package_group_list,
            package_group_group: Box::new(package_group_group),
        };
        self.user_grammar.package_group(&package_group_built)?;
        self.push(ASTType::PackageGroup(package_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _package_group_group_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let package_group_group_list = pop_and_reverse_item!(
            self,
            package_group_group_list,
            PackageGroupGroupList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let package_group_group_0_built = PackageGroupGroupLBracePackageGroupGroupListRBrace {
            l_brace: Box::new(l_brace),
            package_group_group_list,
            r_brace: Box::new(r_brace),
        };
        let package_group_group_0_built =
            PackageGroupGroup::LBracePackageGroupGroupListRBrace(package_group_group_0_built);
        self.push(
            ASTType::PackageGroupGroup(package_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group_group_list_0(
        &mut self,
        _package_group: &ParseTreeType<'t>,
        _package_group_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut package_group_group_list = pop_item!(
            self,
            package_group_group_list,
            PackageGroupGroupList,
            context
        );
        let package_group = pop_item!(self, package_group, PackageGroup, context);
        let package_group_group_list_0_built = PackageGroupGroupList {
            package_group: Box::new(package_group),
        };
        package_group_group_list.push(package_group_group_list_0_built);
        self.push(
            ASTType::PackageGroupGroupList(package_group_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_group_group_list_1_built = Vec::new();
        self.push(
            ASTType::PackageGroupGroupList(package_group_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group_group_1(&mut self, _package_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_item = pop_item!(self, package_item, PackageItem, context);
        let package_group_group_1_built = PackageGroupGroupPackageItem {
            package_item: Box::new(package_item),
        };
        let package_group_group_1_built =
            PackageGroupGroup::PackageItem(package_group_group_1_built);
        self.push(
            ASTType::PackageGroupGroup(package_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _package_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut package_group_list = pop_item!(self, package_group_list, PackageGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let package_group_list_0_built = PackageGroupList {
            attribute: Box::new(attribute),
        };
        package_group_list.push(package_group_list_0_built);
        self.push(ASTType::PackageGroupList(package_group_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_group_list_1_built = Vec::new();
        self.push(
            ASTType::PackageGroupList(package_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_0(&mut self, _var_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let var_declaration = pop_item!(self, var_declaration, VarDeclaration, context);
        let package_item_0_built = PackageItemVarDeclaration {
            var_declaration: Box::new(var_declaration),
        };
        let package_item_0_built = PackageItem::VarDeclaration(package_item_0_built);
        self.user_grammar.package_item(&package_item_0_built)?;
        self.push(ASTType::PackageItem(package_item_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_1(&mut self, _const_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let const_declaration = pop_item!(self, const_declaration, ConstDeclaration, context);
        let package_item_1_built = PackageItemConstDeclaration {
            const_declaration: Box::new(const_declaration),
        };
        let package_item_1_built = PackageItem::ConstDeclaration(package_item_1_built);
        self.user_grammar.package_item(&package_item_1_built)?;
        self.push(ASTType::PackageItem(package_item_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_2(&mut self, _type_def_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let type_def_declaration =
            pop_item!(self, type_def_declaration, TypeDefDeclaration, context);
        let package_item_2_built = PackageItemTypeDefDeclaration {
            type_def_declaration: Box::new(type_def_declaration),
        };
        let package_item_2_built = PackageItem::TypeDefDeclaration(package_item_2_built);
        self.user_grammar.package_item(&package_item_2_built)?;
        self.push(ASTType::PackageItem(package_item_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_3(&mut self, _enum_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let enum_declaration = pop_item!(self, enum_declaration, EnumDeclaration, context);
        let package_item_3_built = PackageItemEnumDeclaration {
            enum_declaration: Box::new(enum_declaration),
        };
        let package_item_3_built = PackageItem::EnumDeclaration(package_item_3_built);
        self.user_grammar.package_item(&package_item_3_built)?;
        self.push(ASTType::PackageItem(package_item_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_4(&mut self, _struct_union_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let struct_union_declaration = pop_item!(
            self,
            struct_union_declaration,
            StructUnionDeclaration,
            context
        );
        let package_item_4_built = PackageItemStructUnionDeclaration {
            struct_union_declaration: Box::new(struct_union_declaration),
        };
        let package_item_4_built = PackageItem::StructUnionDeclaration(package_item_4_built);
        self.user_grammar.package_item(&package_item_4_built)?;
        self.push(ASTType::PackageItem(package_item_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_5(&mut self, _function_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let function_declaration =
            pop_item!(self, function_declaration, FunctionDeclaration, context);
        let package_item_5_built = PackageItemFunctionDeclaration {
            function_declaration: Box::new(function_declaration),
        };
        let package_item_5_built = PackageItem::FunctionDeclaration(package_item_5_built);
        self.user_grammar.package_item(&package_item_5_built)?;
        self.push(ASTType::PackageItem(package_item_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_6(&mut self, _import_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let import_declaration = pop_item!(self, import_declaration, ImportDeclaration, context);
        let package_item_6_built = PackageItemImportDeclaration {
            import_declaration: Box::new(import_declaration),
        };
        let package_item_6_built = PackageItem::ImportDeclaration(package_item_6_built);
        self.user_grammar.package_item(&package_item_6_built)?;
        self.push(ASTType::PackageItem(package_item_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn package_item_7(&mut self, _export_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let export_declaration = pop_item!(self, export_declaration, ExportDeclaration, context);
        let package_item_7_built = PackageItemExportDeclaration {
            export_declaration: Box::new(export_declaration),
        };
        let package_item_7_built = PackageItem::ExportDeclaration(package_item_7_built);
        self.user_grammar.package_item(&package_item_7_built)?;
        self.push(ASTType::PackageItem(package_item_7_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration(
        &mut self,
        _proto_module_declaration_opt: &ParseTreeType<'t>,
        _proto: &ParseTreeType<'t>,
        _module: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _proto_module_declaration_opt0: &ParseTreeType<'t>,
        _proto_module_declaration_opt1: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let proto_module_declaration_opt1 = pop_item!(
            self,
            proto_module_declaration_opt1,
            ProtoModuleDeclarationOpt1,
            context
        );
        let proto_module_declaration_opt0 = pop_item!(
            self,
            proto_module_declaration_opt0,
            ProtoModuleDeclarationOpt0,
            context
        );
        let identifier = pop_item!(self, identifier, Identifier, context);
        let module = pop_item!(self, module, Module, context);
        let proto = pop_item!(self, proto, Proto, context);
        let proto_module_declaration_opt = pop_item!(
            self,
            proto_module_declaration_opt,
            ProtoModuleDeclarationOpt,
            context
        );
        let proto_module_declaration_built = ProtoModuleDeclaration {
            proto_module_declaration_opt,
            proto: Box::new(proto),
            module: Box::new(module),
            identifier: Box::new(identifier),
            proto_module_declaration_opt0,
            proto_module_declaration_opt1,
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .proto_module_declaration(&proto_module_declaration_built)?;
        self.push(
            ASTType::ProtoModuleDeclaration(proto_module_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration_opt1_0(
        &mut self,
        _port_declaration: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let port_declaration = pop_item!(self, port_declaration, PortDeclaration, context);
        let proto_module_declaration_opt1_0_built = ProtoModuleDeclarationOpt1 {
            port_declaration: Box::new(port_declaration),
        };
        self.push(
            ASTType::ProtoModuleDeclarationOpt1(Some(proto_module_declaration_opt1_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration_opt1_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ProtoModuleDeclarationOpt1(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration_opt0_0(
        &mut self,
        _with_parameter: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let with_parameter = pop_item!(self, with_parameter, WithParameter, context);
        let proto_module_declaration_opt0_0_built = ProtoModuleDeclarationOpt0 {
            with_parameter: Box::new(with_parameter),
        };
        self.push(
            ASTType::ProtoModuleDeclarationOpt0(Some(proto_module_declaration_opt0_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration_opt0_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ProtoModuleDeclarationOpt0(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration_opt_0(&mut self, _pub: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r#pub = pop_item!(self, r#pub, Pub, context);
        let proto_module_declaration_opt_0_built = ProtoModuleDeclarationOpt {
            r#pub: Box::new(r#pub),
        };
        self.push(
            ASTType::ProtoModuleDeclarationOpt(Some(proto_module_declaration_opt_0_built)),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn proto_module_declaration_opt_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        self.push(ASTType::ProtoModuleDeclarationOpt(None), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_declaration(
        &mut self,
        _embed: &ParseTreeType<'t>,
        _l_paren: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
        _identifier0: &ParseTreeType<'t>,
        _embed_content: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_content = pop_item!(self, embed_content, EmbedContent, context);
        let identifier0 = pop_item!(self, identifier0, Identifier, context);
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let embed = pop_item!(self, embed, Embed, context);
        let embed_declaration_built = EmbedDeclaration {
            embed: Box::new(embed),
            l_paren: Box::new(l_paren),
            identifier: Box::new(identifier),
            r_paren: Box::new(r_paren),
            identifier0: Box::new(identifier0),
            embed_content: Box::new(embed_content),
        };
        self.user_grammar
            .embed_declaration(&embed_declaration_built)?;
        self.push(ASTType::EmbedDeclaration(embed_declaration_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_content(&mut self, _embed_content_token: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_content_token = pop_item!(self, embed_content_token, EmbedContentToken, context);
        let embed_content_built = EmbedContent {
            embed_content_token: (&embed_content_token)
                .try_into()
                .map_err(parol_runtime::ParolError::UserError)?,
        };
        self.user_grammar.embed_content(&embed_content_built)?;
        self.push(ASTType::EmbedContent(embed_content_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_content_token(
        &mut self,
        _l_brace_term: &ParseTreeType<'t>,
        _l_brace_term0: &ParseTreeType<'t>,
        _l_brace_term1: &ParseTreeType<'t>,
        _embed_content_token_list: &ParseTreeType<'t>,
        _r_brace_term: &ParseTreeType<'t>,
        _r_brace_term0: &ParseTreeType<'t>,
        _r_brace_term1: &ParseTreeType<'t>,
        _comments: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let comments = pop_item!(self, comments, Comments, context);
        let r_brace_term1 = pop_item!(self, r_brace_term1, RBraceTerm, context);
        let r_brace_term0 = pop_item!(self, r_brace_term0, RBraceTerm, context);
        let r_brace_term = pop_item!(self, r_brace_term, RBraceTerm, context);
        let embed_content_token_list = pop_and_reverse_item!(
            self,
            embed_content_token_list,
            EmbedContentTokenList,
            context
        );
        let l_brace_term1 = pop_item!(self, l_brace_term1, LBraceTerm, context);
        let l_brace_term0 = pop_item!(self, l_brace_term0, LBraceTerm, context);
        let l_brace_term = pop_item!(self, l_brace_term, LBraceTerm, context);
        let embed_content_token_built = EmbedContentToken {
            l_brace_term: Box::new(l_brace_term),
            l_brace_term0: Box::new(l_brace_term0),
            l_brace_term1: Box::new(l_brace_term1),
            embed_content_token_list,
            r_brace_term: Box::new(r_brace_term),
            r_brace_term0: Box::new(r_brace_term0),
            r_brace_term1: Box::new(r_brace_term1),
            comments: Box::new(comments),
        };
        self.user_grammar
            .embed_content_token(&embed_content_token_built)?;
        self.push(
            ASTType::EmbedContentToken(embed_content_token_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_content_token_list_0(
        &mut self,
        _embed_item: &ParseTreeType<'t>,
        _embed_content_token_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut embed_content_token_list = pop_item!(
            self,
            embed_content_token_list,
            EmbedContentTokenList,
            context
        );
        let embed_item = pop_item!(self, embed_item, EmbedItem, context);
        let embed_content_token_list_0_built = EmbedContentTokenList {
            embed_item: Box::new(embed_item),
        };
        embed_content_token_list.push(embed_content_token_list_0_built);
        self.push(
            ASTType::EmbedContentTokenList(embed_content_token_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_content_token_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_content_token_list_1_built = Vec::new();
        self.push(
            ASTType::EmbedContentTokenList(embed_content_token_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_item_0(
        &mut self,
        _l_brace_term: &ParseTreeType<'t>,
        _embed_item_list: &ParseTreeType<'t>,
        _r_brace_term: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace_term = pop_item!(self, r_brace_term, RBraceTerm, context);
        let embed_item_list = pop_and_reverse_item!(self, embed_item_list, EmbedItemList, context);
        let l_brace_term = pop_item!(self, l_brace_term, LBraceTerm, context);
        let embed_item_0_built = EmbedItemLBraceTermEmbedItemListRBraceTerm {
            l_brace_term: Box::new(l_brace_term),
            embed_item_list,
            r_brace_term: Box::new(r_brace_term),
        };
        let embed_item_0_built = EmbedItem::LBraceTermEmbedItemListRBraceTerm(embed_item_0_built);
        self.user_grammar.embed_item(&embed_item_0_built)?;
        self.push(ASTType::EmbedItem(embed_item_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_item_list_0(
        &mut self,
        _embed_item: &ParseTreeType<'t>,
        _embed_item_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut embed_item_list = pop_item!(self, embed_item_list, EmbedItemList, context);
        let embed_item = pop_item!(self, embed_item, EmbedItem, context);
        let embed_item_list_0_built = EmbedItemList {
            embed_item: Box::new(embed_item),
        };
        embed_item_list.push(embed_item_list_0_built);
        self.push(ASTType::EmbedItemList(embed_item_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_item_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_item_list_1_built = Vec::new();
        self.push(ASTType::EmbedItemList(embed_item_list_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn embed_item_1(&mut self, _any_term: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let any_term = pop_item!(self, any_term, AnyTerm, context);
        let embed_item_1_built = EmbedItemAnyTerm {
            any_term: Box::new(any_term),
        };
        let embed_item_1_built = EmbedItem::AnyTerm(embed_item_1_built);
        self.user_grammar.embed_item(&embed_item_1_built)?;
        self.push(ASTType::EmbedItem(embed_item_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn include_declaration(
        &mut self,
        _include: &ParseTreeType<'t>,
        _l_paren: &ParseTreeType<'t>,
        _identifier: &ParseTreeType<'t>,
        _comma: &ParseTreeType<'t>,
        _string_literal: &ParseTreeType<'t>,
        _r_paren: &ParseTreeType<'t>,
        _semicolon: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let semicolon = pop_item!(self, semicolon, Semicolon, context);
        let r_paren = pop_item!(self, r_paren, RParen, context);
        let string_literal = pop_item!(self, string_literal, StringLiteral, context);
        let comma = pop_item!(self, comma, Comma, context);
        let identifier = pop_item!(self, identifier, Identifier, context);
        let l_paren = pop_item!(self, l_paren, LParen, context);
        let include = pop_item!(self, include, Include, context);
        let include_declaration_built = IncludeDeclaration {
            include: Box::new(include),
            l_paren: Box::new(l_paren),
            identifier: Box::new(identifier),
            comma: Box::new(comma),
            string_literal: Box::new(string_literal),
            r_paren: Box::new(r_paren),
            semicolon: Box::new(semicolon),
        };
        self.user_grammar
            .include_declaration(&include_declaration_built)?;
        self.push(
            ASTType::IncludeDeclaration(include_declaration_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group(
        &mut self,
        _description_group_list: &ParseTreeType<'t>,
        _description_group_group: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let description_group_group = pop_item!(
            self,
            description_group_group,
            DescriptionGroupGroup,
            context
        );
        let description_group_list =
            pop_and_reverse_item!(self, description_group_list, DescriptionGroupList, context);
        let description_group_built = DescriptionGroup {
            description_group_list,
            description_group_group: Box::new(description_group_group),
        };
        self.user_grammar
            .description_group(&description_group_built)?;
        self.push(ASTType::DescriptionGroup(description_group_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group_group_0(
        &mut self,
        _l_brace: &ParseTreeType<'t>,
        _description_group_group_list: &ParseTreeType<'t>,
        _r_brace: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let r_brace = pop_item!(self, r_brace, RBrace, context);
        let description_group_group_list = pop_and_reverse_item!(
            self,
            description_group_group_list,
            DescriptionGroupGroupList,
            context
        );
        let l_brace = pop_item!(self, l_brace, LBrace, context);
        let description_group_group_0_built =
            DescriptionGroupGroupLBraceDescriptionGroupGroupListRBrace {
                l_brace: Box::new(l_brace),
                description_group_group_list,
                r_brace: Box::new(r_brace),
            };
        let description_group_group_0_built =
            DescriptionGroupGroup::LBraceDescriptionGroupGroupListRBrace(
                description_group_group_0_built,
            );
        self.push(
            ASTType::DescriptionGroupGroup(description_group_group_0_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group_group_list_0(
        &mut self,
        _description_group: &ParseTreeType<'t>,
        _description_group_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut description_group_group_list = pop_item!(
            self,
            description_group_group_list,
            DescriptionGroupGroupList,
            context
        );
        let description_group = pop_item!(self, description_group, DescriptionGroup, context);
        let description_group_group_list_0_built = DescriptionGroupGroupList {
            description_group: Box::new(description_group),
        };
        description_group_group_list.push(description_group_group_list_0_built);
        self.push(
            ASTType::DescriptionGroupGroupList(description_group_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let description_group_group_list_1_built = Vec::new();
        self.push(
            ASTType::DescriptionGroupGroupList(description_group_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group_group_1(&mut self, _description_item: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let description_item = pop_item!(self, description_item, DescriptionItem, context);
        let description_group_group_1_built = DescriptionGroupGroupDescriptionItem {
            description_item: Box::new(description_item),
        };
        let description_group_group_1_built =
            DescriptionGroupGroup::DescriptionItem(description_group_group_1_built);
        self.push(
            ASTType::DescriptionGroupGroup(description_group_group_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group_list_0(
        &mut self,
        _attribute: &ParseTreeType<'t>,
        _description_group_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut description_group_list =
            pop_item!(self, description_group_list, DescriptionGroupList, context);
        let attribute = pop_item!(self, attribute, Attribute, context);
        let description_group_list_0_built = DescriptionGroupList {
            attribute: Box::new(attribute),
        };
        description_group_list.push(description_group_list_0_built);
        self.push(
            ASTType::DescriptionGroupList(description_group_list),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_group_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let description_group_list_1_built = Vec::new();
        self.push(
            ASTType::DescriptionGroupList(description_group_list_1_built),
            context,
        );
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_0(&mut self, _module_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let module_declaration = pop_item!(self, module_declaration, ModuleDeclaration, context);
        let description_item_0_built = DescriptionItemModuleDeclaration {
            module_declaration: Box::new(module_declaration),
        };
        let description_item_0_built = DescriptionItem::ModuleDeclaration(description_item_0_built);
        self.user_grammar
            .description_item(&description_item_0_built)?;
        self.push(ASTType::DescriptionItem(description_item_0_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_1(&mut self, _interface_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let interface_declaration =
            pop_item!(self, interface_declaration, InterfaceDeclaration, context);
        let description_item_1_built = DescriptionItemInterfaceDeclaration {
            interface_declaration: Box::new(interface_declaration),
        };
        let description_item_1_built =
            DescriptionItem::InterfaceDeclaration(description_item_1_built);
        self.user_grammar
            .description_item(&description_item_1_built)?;
        self.push(ASTType::DescriptionItem(description_item_1_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_2(&mut self, _package_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let package_declaration = pop_item!(self, package_declaration, PackageDeclaration, context);
        let description_item_2_built = DescriptionItemPackageDeclaration {
            package_declaration: Box::new(package_declaration),
        };
        let description_item_2_built =
            DescriptionItem::PackageDeclaration(description_item_2_built);
        self.user_grammar
            .description_item(&description_item_2_built)?;
        self.push(ASTType::DescriptionItem(description_item_2_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_3(&mut self, _proto_module_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let proto_module_declaration = pop_item!(
            self,
            proto_module_declaration,
            ProtoModuleDeclaration,
            context
        );
        let description_item_3_built = DescriptionItemProtoModuleDeclaration {
            proto_module_declaration: Box::new(proto_module_declaration),
        };
        let description_item_3_built =
            DescriptionItem::ProtoModuleDeclaration(description_item_3_built);
        self.user_grammar
            .description_item(&description_item_3_built)?;
        self.push(ASTType::DescriptionItem(description_item_3_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_4(&mut self, _import_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let import_declaration = pop_item!(self, import_declaration, ImportDeclaration, context);
        let description_item_4_built = DescriptionItemImportDeclaration {
            import_declaration: Box::new(import_declaration),
        };
        let description_item_4_built = DescriptionItem::ImportDeclaration(description_item_4_built);
        self.user_grammar
            .description_item(&description_item_4_built)?;
        self.push(ASTType::DescriptionItem(description_item_4_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_5(&mut self, _embed_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let embed_declaration = pop_item!(self, embed_declaration, EmbedDeclaration, context);
        let description_item_5_built = DescriptionItemEmbedDeclaration {
            embed_declaration: Box::new(embed_declaration),
        };
        let description_item_5_built = DescriptionItem::EmbedDeclaration(description_item_5_built);
        self.user_grammar
            .description_item(&description_item_5_built)?;
        self.push(ASTType::DescriptionItem(description_item_5_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn description_item_6(&mut self, _include_declaration: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let include_declaration = pop_item!(self, include_declaration, IncludeDeclaration, context);
        let description_item_6_built = DescriptionItemIncludeDeclaration {
            include_declaration: Box::new(include_declaration),
        };
        let description_item_6_built =
            DescriptionItem::IncludeDeclaration(description_item_6_built);
        self.user_grammar
            .description_item(&description_item_6_built)?;
        self.push(ASTType::DescriptionItem(description_item_6_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn veryl(&mut self, _start: &ParseTreeType<'t>, _veryl_list: &ParseTreeType<'t>) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let veryl_list = pop_and_reverse_item!(self, veryl_list, VerylList, context);
        let start = pop_item!(self, start, Start, context);
        let veryl_built = Veryl {
            start: Box::new(start),
            veryl_list,
        };
        self.user_grammar.veryl(&veryl_built)?;
        self.push(ASTType::Veryl(veryl_built), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn veryl_list_0(
        &mut self,
        _description_group: &ParseTreeType<'t>,
        _veryl_list: &ParseTreeType<'t>,
    ) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let mut veryl_list = pop_item!(self, veryl_list, VerylList, context);
        let description_group = pop_item!(self, description_group, DescriptionGroup, context);
        let veryl_list_0_built = VerylList {
            description_group: Box::new(description_group),
        };
        veryl_list.push(veryl_list_0_built);
        self.push(ASTType::VerylList(veryl_list), context);
        Ok(())
    }
    #[parol_runtime::function_name::named]
    fn veryl_list_1(&mut self) -> Result<()> {
        let context = function_name!();
        trace!("{}", self.trace_item_stack(context));
        let veryl_list_1_built = Vec::new();
        self.push(ASTType::VerylList(veryl_list_1_built), context);
        Ok(())
    }
}
impl<'t> UserActionsTrait<'t> for VerylGrammarAuto<'t, '_> {
    fn call_semantic_action_for_production_number(
        &mut self,
        prod_num: usize,
        children: &[ParseTreeType<'t>],
    ) -> Result<()> {
        match prod_num {
            0 => self.comments_term(&children[0]),
            1 => self.string_literal_term(&children[0]),
            2 => self.exponent_term(&children[0]),
            3 => self.fixed_point_term(&children[0]),
            4 => self.based_term(&children[0]),
            5 => self.all_bit_term(&children[0]),
            6 => self.base_less_term(&children[0]),
            7 => self.minus_colon_term(&children[0]),
            8 => self.minus_g_t_term(&children[0]),
            9 => self.plus_colon_term(&children[0]),
            10 => self.assignment_operator_term(&children[0]),
            11 => self.operator11_term(&children[0]),
            12 => self.operator10_term(&children[0]),
            13 => self.operator09_term(&children[0]),
            14 => self.operator08_term(&children[0]),
            15 => self.operator07_term(&children[0]),
            16 => self.operator06_term(&children[0]),
            17 => self.operator02_term(&children[0]),
            18 => self.operator01_term(&children[0]),
            19 => self.operator05_term(&children[0]),
            20 => self.operator04_term(&children[0]),
            21 => self.operator03_term(&children[0]),
            22 => self.unary_operator_term(&children[0]),
            23 => self.back_quote_term(&children[0]),
            24 => self.colon_colon_l_angle_term(&children[0]),
            25 => self.colon_colon_term(&children[0]),
            26 => self.colon_term(&children[0]),
            27 => self.comma_term(&children[0]),
            28 => self.dot_dot_equ_term(&children[0]),
            29 => self.dot_dot_term(&children[0]),
            30 => self.dot_term(&children[0]),
            31 => self.equ_term(&children[0]),
            32 => self.hash_term(&children[0]),
            33 => self.l_angle_term(&children[0]),
            34 => self.quote_l_brace_term(&children[0]),
            35 => self.l_brace_term(&children[0]),
            36 => self.l_bracket_term(&children[0]),
            37 => self.l_paren_term(&children[0]),
            38 => self.r_angle_term(&children[0]),
            39 => self.r_brace_term(&children[0]),
            40 => self.r_bracket_term(&children[0]),
            41 => self.r_paren_term(&children[0]),
            42 => self.semicolon_term(&children[0]),
            43 => self.star_term(&children[0]),
            44 => self.always_comb_term(&children[0]),
            45 => self.always_ff_term(&children[0]),
            46 => self.assign_term(&children[0]),
            47 => self.as_term(&children[0]),
            48 => self.bit_term(&children[0]),
            49 => self.case_term(&children[0]),
            50 => self.clock_term(&children[0]),
            51 => self.clock_posedge_term(&children[0]),
            52 => self.clock_negedge_term(&children[0]),
            53 => self.const_term(&children[0]),
            54 => self.default_term(&children[0]),
            55 => self.else_term(&children[0]),
            56 => self.embed_term(&children[0]),
            57 => self.enum_term(&children[0]),
            58 => self.export_term(&children[0]),
            59 => self.f32_term(&children[0]),
            60 => self.f64_term(&children[0]),
            61 => self.final_term(&children[0]),
            62 => self.for_term(&children[0]),
            63 => self.function_term(&children[0]),
            64 => self.i32_term(&children[0]),
            65 => self.i64_term(&children[0]),
            66 => self.if_reset_term(&children[0]),
            67 => self.if_term(&children[0]),
            68 => self.import_term(&children[0]),
            69 => self.include_term(&children[0]),
            70 => self.initial_term(&children[0]),
            71 => self.inout_term(&children[0]),
            72 => self.input_term(&children[0]),
            73 => self.inside_term(&children[0]),
            74 => self.inst_term(&children[0]),
            75 => self.interface_term(&children[0]),
            76 => self.in_term(&children[0]),
            77 => self.let_term(&children[0]),
            78 => self.logic_term(&children[0]),
            79 => self.lsb_term(&children[0]),
            80 => self.modport_term(&children[0]),
            81 => self.module_term(&children[0]),
            82 => self.msb_term(&children[0]),
            83 => self.output_term(&children[0]),
            84 => self.outside_term(&children[0]),
            85 => self.package_term(&children[0]),
            86 => self.param_term(&children[0]),
            87 => self.proto_term(&children[0]),
            88 => self.pub_term(&children[0]),
            89 => self.ref_term(&children[0]),
            90 => self.repeat_term(&children[0]),
            91 => self.reset_term(&children[0]),
            92 => self.reset_async_high_term(&children[0]),
            93 => self.reset_async_low_term(&children[0]),
            94 => self.reset_sync_high_term(&children[0]),
            95 => self.reset_sync_low_term(&children[0]),
            96 => self.return_term(&children[0]),
            97 => self.break_term(&children[0]),
            98 => self.signed_term(&children[0]),
            99 => self.step_term(&children[0]),
            100 => self.string_term(&children[0]),
            101 => self.struct_term(&children[0]),
            102 => self.switch_term(&children[0]),
            103 => self.tri_term(&children[0]),
            104 => self.type_term(&children[0]),
            105 => self.u32_term(&children[0]),
            106 => self.u64_term(&children[0]),
            107 => self.union_term(&children[0]),
            108 => self.unsafe_term(&children[0]),
            109 => self.var_term(&children[0]),
            110 => self.dollar_identifier_term(&children[0]),
            111 => self.identifier_term(&children[0]),
            112 => self.any_term(&children[0]),
            113 => self.comments(&children[0]),
            114 => self.comments_opt_0(&children[0]),
            115 => self.comments_opt_1(),
            116 => self.start_token(&children[0]),
            117 => self.string_literal_token(&children[0], &children[1]),
            118 => self.exponent_token(&children[0], &children[1]),
            119 => self.fixed_point_token(&children[0], &children[1]),
            120 => self.based_token(&children[0], &children[1]),
            121 => self.base_less_token(&children[0], &children[1]),
            122 => self.all_bit_token(&children[0], &children[1]),
            123 => self.assignment_operator_token(&children[0], &children[1]),
            124 => self.operator01_token(&children[0], &children[1]),
            125 => self.operator02_token(&children[0], &children[1]),
            126 => self.operator03_token(&children[0], &children[1]),
            127 => self.operator04_token(&children[0], &children[1]),
            128 => self.operator05_token(&children[0], &children[1]),
            129 => self.operator06_token(&children[0], &children[1]),
            130 => self.operator07_token(&children[0], &children[1]),
            131 => self.operator08_token(&children[0], &children[1]),
            132 => self.operator09_token(&children[0], &children[1]),
            133 => self.operator10_token(&children[0], &children[1]),
            134 => self.operator11_token(&children[0], &children[1]),
            135 => self.unary_operator_token(&children[0], &children[1]),
            136 => self.back_quote_token(&children[0], &children[1]),
            137 => self.colon_token(&children[0], &children[1]),
            138 => self.colon_colon_l_angle_token(&children[0], &children[1]),
            139 => self.colon_colon_token(&children[0], &children[1]),
            140 => self.comma_token(&children[0], &children[1]),
            141 => self.dot_dot_token(&children[0], &children[1]),
            142 => self.dot_dot_equ_token(&children[0], &children[1]),
            143 => self.dot_token(&children[0], &children[1]),
            144 => self.equ_token(&children[0], &children[1]),
            145 => self.hash_token(&children[0], &children[1]),
            146 => self.quote_l_brace_token(&children[0], &children[1]),
            147 => self.l_angle_token(&children[0], &children[1]),
            148 => self.l_brace_token(&children[0], &children[1]),
            149 => self.l_bracket_token(&children[0], &children[1]),
            150 => self.l_paren_token(&children[0], &children[1]),
            151 => self.minus_colon_token(&children[0], &children[1]),
            152 => self.minus_g_t_token(&children[0], &children[1]),
            153 => self.plus_colon_token(&children[0], &children[1]),
            154 => self.r_angle_token(&children[0], &children[1]),
            155 => self.r_brace_token(&children[0], &children[1]),
            156 => self.r_bracket_token(&children[0], &children[1]),
            157 => self.r_paren_token(&children[0], &children[1]),
            158 => self.semicolon_token(&children[0], &children[1]),
            159 => self.star_token(&children[0], &children[1]),
            160 => self.always_comb_token(&children[0], &children[1]),
            161 => self.always_ff_token(&children[0], &children[1]),
            162 => self.as_token(&children[0], &children[1]),
            163 => self.assign_token(&children[0], &children[1]),
            164 => self.bit_token(&children[0], &children[1]),
            165 => self.case_token(&children[0], &children[1]),
            166 => self.clock_token(&children[0], &children[1]),
            167 => self.clock_posedge_token(&children[0], &children[1]),
            168 => self.clock_negedge_token(&children[0], &children[1]),
            169 => self.const_token(&children[0], &children[1]),
            170 => self.default_token(&children[0], &children[1]),
            171 => self.else_token(&children[0], &children[1]),
            172 => self.embed_token(&children[0], &children[1]),
            173 => self.enum_token(&children[0], &children[1]),
            174 => self.export_token(&children[0], &children[1]),
            175 => self.f32_token(&children[0], &children[1]),
            176 => self.f64_token(&children[0], &children[1]),
            177 => self.final_token(&children[0], &children[1]),
            178 => self.for_token(&children[0], &children[1]),
            179 => self.function_token(&children[0], &children[1]),
            180 => self.i32_token(&children[0], &children[1]),
            181 => self.i64_token(&children[0], &children[1]),
            182 => self.if_reset_token(&children[0], &children[1]),
            183 => self.if_token(&children[0], &children[1]),
            184 => self.import_token(&children[0], &children[1]),
            185 => self.include_token(&children[0], &children[1]),
            186 => self.initial_token(&children[0], &children[1]),
            187 => self.inout_token(&children[0], &children[1]),
            188 => self.input_token(&children[0], &children[1]),
            189 => self.inside_token(&children[0], &children[1]),
            190 => self.inst_token(&children[0], &children[1]),
            191 => self.interface_token(&children[0], &children[1]),
            192 => self.in_token(&children[0], &children[1]),
            193 => self.let_token(&children[0], &children[1]),
            194 => self.logic_token(&children[0], &children[1]),
            195 => self.lsb_token(&children[0], &children[1]),
            196 => self.modport_token(&children[0], &children[1]),
            197 => self.module_token(&children[0], &children[1]),
            198 => self.msb_token(&children[0], &children[1]),
            199 => self.output_token(&children[0], &children[1]),
            200 => self.outside_token(&children[0], &children[1]),
            201 => self.package_token(&children[0], &children[1]),
            202 => self.param_token(&children[0], &children[1]),
            203 => self.proto_token(&children[0], &children[1]),
            204 => self.pub_token(&children[0], &children[1]),
            205 => self.ref_token(&children[0], &children[1]),
            206 => self.repeat_token(&children[0], &children[1]),
            207 => self.reset_token(&children[0], &children[1]),
            208 => self.reset_async_high_token(&children[0], &children[1]),
            209 => self.reset_async_low_token(&children[0], &children[1]),
            210 => self.reset_sync_high_token(&children[0], &children[1]),
            211 => self.reset_sync_low_token(&children[0], &children[1]),
            212 => self.return_token(&children[0], &children[1]),
            213 => self.break_token(&children[0], &children[1]),
            214 => self.signed_token(&children[0], &children[1]),
            215 => self.step_token(&children[0], &children[1]),
            216 => self.string_token(&children[0], &children[1]),
            217 => self.struct_token(&children[0], &children[1]),
            218 => self.switch_token(&children[0], &children[1]),
            219 => self.tri_token(&children[0], &children[1]),
            220 => self.type_token(&children[0], &children[1]),
            221 => self.u32_token(&children[0], &children[1]),
            222 => self.u64_token(&children[0], &children[1]),
            223 => self.union_token(&children[0], &children[1]),
            224 => self.unsafe_token(&children[0], &children[1]),
            225 => self.var_token(&children[0], &children[1]),
            226 => self.dollar_identifier_token(&children[0], &children[1]),
            227 => self.identifier_token(&children[0], &children[1]),
            228 => self.start(&children[0]),
            229 => self.string_literal(&children[0]),
            230 => self.exponent(&children[0]),
            231 => self.fixed_point(&children[0]),
            232 => self.based(&children[0]),
            233 => self.base_less(&children[0]),
            234 => self.all_bit(&children[0]),
            235 => self.assignment_operator(&children[0]),
            236 => self.operator01(&children[0]),
            237 => self.operator02(&children[0]),
            238 => self.operator03(&children[0]),
            239 => self.operator04(&children[0]),
            240 => self.operator05(&children[0]),
            241 => self.operator06(&children[0]),
            242 => self.operator07(&children[0]),
            243 => self.operator08(&children[0]),
            244 => self.operator09(&children[0]),
            245 => self.operator10(&children[0]),
            246 => self.operator11(&children[0]),
            247 => self.unary_operator(&children[0]),
            248 => self.back_quote(&children[0]),
            249 => self.colon(&children[0]),
            250 => self.colon_colon_l_angle(&children[0]),
            251 => self.colon_colon(&children[0]),
            252 => self.comma(&children[0]),
            253 => self.dot_dot(&children[0]),
            254 => self.dot_dot_equ(&children[0]),
            255 => self.dot(&children[0]),
            256 => self.equ(&children[0]),
            257 => self.hash(&children[0]),
            258 => self.quote_l_brace(&children[0]),
            259 => self.l_angle(&children[0]),
            260 => self.l_brace(&children[0]),
            261 => self.l_bracket(&children[0]),
            262 => self.l_paren(&children[0]),
            263 => self.minus_colon(&children[0]),
            264 => self.minus_g_t(&children[0]),
            265 => self.plus_colon(&children[0]),
            266 => self.r_angle(&children[0]),
            267 => self.r_brace(&children[0]),
            268 => self.r_bracket(&children[0]),
            269 => self.r_paren(&children[0]),
            270 => self.semicolon(&children[0]),
            271 => self.star(&children[0]),
            272 => self.always_comb(&children[0]),
            273 => self.always_ff(&children[0]),
            274 => self.r#as(&children[0]),
            275 => self.assign(&children[0]),
            276 => self.bit(&children[0]),
            277 => self.r#break(&children[0]),
            278 => self.case(&children[0]),
            279 => self.clock(&children[0]),
            280 => self.clock_posedge(&children[0]),
            281 => self.clock_negedge(&children[0]),
            282 => self.r#const(&children[0]),
            283 => self.defaul(&children[0]),
            284 => self.r#else(&children[0]),
            285 => self.embed(&children[0]),
            286 => self.r#enum(&children[0]),
            287 => self.export(&children[0]),
            288 => self.f32(&children[0]),
            289 => self.f64(&children[0]),
            290 => self.r#final(&children[0]),
            291 => self.r#for(&children[0]),
            292 => self.function(&children[0]),
            293 => self.i32(&children[0]),
            294 => self.i64(&children[0]),
            295 => self.r#if(&children[0]),
            296 => self.if_reset(&children[0]),
            297 => self.import(&children[0]),
            298 => self.r#in(&children[0]),
            299 => self.include(&children[0]),
            300 => self.initial(&children[0]),
            301 => self.inout(&children[0]),
            302 => self.input(&children[0]),
            303 => self.inside(&children[0]),
            304 => self.inst(&children[0]),
            305 => self.interface(&children[0]),
            306 => self.r#let(&children[0]),
            307 => self.logic(&children[0]),
            308 => self.lsb(&children[0]),
            309 => self.modport(&children[0]),
            310 => self.module(&children[0]),
            311 => self.msb(&children[0]),
            312 => self.output(&children[0]),
            313 => self.outside(&children[0]),
            314 => self.package(&children[0]),
            315 => self.param(&children[0]),
            316 => self.proto(&children[0]),
            317 => self.r#pub(&children[0]),
            318 => self.r#ref(&children[0]),
            319 => self.repeat(&children[0]),
            320 => self.reset(&children[0]),
            321 => self.reset_async_high(&children[0]),
            322 => self.reset_async_low(&children[0]),
            323 => self.reset_sync_high(&children[0]),
            324 => self.reset_sync_low(&children[0]),
            325 => self.r#return(&children[0]),
            326 => self.signed(&children[0]),
            327 => self.step(&children[0]),
            328 => self.strin(&children[0]),
            329 => self.r#struct(&children[0]),
            330 => self.switch(&children[0]),
            331 => self.tri(&children[0]),
            332 => self.r#type(&children[0]),
            333 => self.u32(&children[0]),
            334 => self.u64(&children[0]),
            335 => self.r#union(&children[0]),
            336 => self.r#unsafe(&children[0]),
            337 => self.var(&children[0]),
            338 => self.dollar_identifier(&children[0]),
            339 => self.identifier(&children[0]),
            340 => self.number_0(&children[0]),
            341 => self.number_1(&children[0]),
            342 => self.integral_number_0(&children[0]),
            343 => self.integral_number_1(&children[0]),
            344 => self.integral_number_2(&children[0]),
            345 => self.real_number_0(&children[0]),
            346 => self.real_number_1(&children[0]),
            347 => self.hierarchical_identifier(&children[0], &children[1], &children[2]),
            348 => self.hierarchical_identifier_list0_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
            ),
            349 => self.hierarchical_identifier_list0_list_0(&children[0], &children[1]),
            350 => self.hierarchical_identifier_list0_list_1(),
            351 => self.hierarchical_identifier_list0_1(),
            352 => self.hierarchical_identifier_list_0(&children[0], &children[1]),
            353 => self.hierarchical_identifier_list_1(),
            354 => self.scoped_identifier(&children[0], &children[1]),
            355 => self.scoped_identifier_group_0(&children[0]),
            356 => self.scoped_identifier_group_1(&children[0], &children[1]),
            357 => self.scoped_identifier_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
            ),
            358 => self.scoped_identifier_list_1(),
            359 => self.scoped_identifier_opt0_0(&children[0]),
            360 => self.scoped_identifier_opt0_1(),
            361 => self.scoped_identifier_opt_0(&children[0]),
            362 => self.scoped_identifier_opt_1(),
            363 => {
                self.expression_identifier(&children[0], &children[1], &children[2], &children[3])
            }
            364 => self.expression_identifier_list0_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
            ),
            365 => self.expression_identifier_list0_list_0(&children[0], &children[1]),
            366 => self.expression_identifier_list0_list_1(),
            367 => self.expression_identifier_list0_1(),
            368 => self.expression_identifier_list_0(&children[0], &children[1]),
            369 => self.expression_identifier_list_1(),
            370 => self.expression_identifier_opt_0(&children[0]),
            371 => self.expression_identifier_opt_1(),
            372 => self.expression(&children[0], &children[1]),
            373 => self.expression_list_0(&children[0], &children[1], &children[2]),
            374 => self.expression_list_1(),
            375 => self.expression01(&children[0], &children[1]),
            376 => self.expression01_list_0(&children[0], &children[1], &children[2]),
            377 => self.expression01_list_1(),
            378 => self.expression02(&children[0], &children[1]),
            379 => self.expression02_list_0(&children[0], &children[1], &children[2]),
            380 => self.expression02_list_1(),
            381 => self.expression03(&children[0], &children[1]),
            382 => self.expression03_list_0(&children[0], &children[1], &children[2]),
            383 => self.expression03_list_1(),
            384 => self.expression04(&children[0], &children[1]),
            385 => self.expression04_list_0(&children[0], &children[1], &children[2]),
            386 => self.expression04_list_1(),
            387 => self.expression05(&children[0], &children[1]),
            388 => self.expression05_list_0(&children[0], &children[1], &children[2]),
            389 => self.expression05_list_1(),
            390 => self.expression06(&children[0], &children[1]),
            391 => self.expression06_list_0(&children[0], &children[1], &children[2]),
            392 => self.expression06_list_1(),
            393 => self.expression07(&children[0], &children[1]),
            394 => self.expression07_list_0(&children[0], &children[1], &children[2]),
            395 => self.expression07_list_1(),
            396 => self.expression08(&children[0], &children[1]),
            397 => self.expression08_list_0(&children[0], &children[1], &children[2]),
            398 => self.expression08_list_1(),
            399 => self.expression09(&children[0], &children[1]),
            400 => self.expression09_list_0(&children[0], &children[1], &children[2]),
            401 => self.expression09_list_group_0(&children[0]),
            402 => self.expression09_list_group_1(&children[0]),
            403 => self.expression09_list_1(),
            404 => self.expression10(&children[0], &children[1]),
            405 => self.expression10_list_0(&children[0], &children[1], &children[2]),
            406 => self.expression10_list_1(),
            407 => self.expression11(&children[0], &children[1]),
            408 => self.expression11_opt_0(&children[0], &children[1]),
            409 => self.expression11_opt_1(),
            410 => self.expression12(&children[0], &children[1]),
            411 => self.expression12_list_0(&children[0], &children[1]),
            412 => self.expression12_list_group_0(&children[0]),
            413 => self.expression12_list_group_1(&children[0]),
            414 => self.expression12_list_group_2(&children[0]),
            415 => self.expression12_list_group_3(&children[0]),
            416 => self.expression12_list_group_4(&children[0]),
            417 => self.expression12_list_1(),
            418 => self.factor_0(&children[0]),
            419 => self.factor_1(&children[0], &children[1]),
            420 => self.factor_2(&children[0], &children[1], &children[2]),
            421 => self.factor_3(&children[0], &children[1], &children[2]),
            422 => self.factor_4(&children[0], &children[1], &children[2]),
            423 => self.factor_5(&children[0]),
            424 => self.factor_6(&children[0]),
            425 => self.factor_7(&children[0]),
            426 => self.factor_8(&children[0]),
            427 => self.factor_9(&children[0]),
            428 => self.factor_group_0(&children[0]),
            429 => self.factor_group_1(&children[0]),
            430 => self.factor_10(&children[0]),
            431 => self.factor_11(&children[0]),
            432 => self.factor_12(&children[0]),
            433 => self.factor_13(&children[0]),
            434 => self.factor_opt_0(&children[0]),
            435 => self.factor_opt_1(),
            436 => self.function_call(&children[0], &children[1], &children[2]),
            437 => self.function_call_opt_0(&children[0]),
            438 => self.function_call_opt_1(),
            439 => self.argument_list(&children[0], &children[1], &children[2]),
            440 => self.argument_list_list_0(&children[0], &children[1], &children[2]),
            441 => self.argument_list_list_1(),
            442 => self.argument_list_opt_0(&children[0]),
            443 => self.argument_list_opt_1(),
            444 => self.argument_item(&children[0]),
            445 => self.concatenation_list(&children[0], &children[1], &children[2]),
            446 => self.concatenation_list_list_0(&children[0], &children[1], &children[2]),
            447 => self.concatenation_list_list_1(),
            448 => self.concatenation_list_opt_0(&children[0]),
            449 => self.concatenation_list_opt_1(),
            450 => self.concatenation_item(&children[0], &children[1]),
            451 => self.concatenation_item_opt_0(&children[0], &children[1]),
            452 => self.concatenation_item_opt_1(),
            453 => self.array_literal_list(&children[0], &children[1], &children[2]),
            454 => self.array_literal_list_list_0(&children[0], &children[1], &children[2]),
            455 => self.array_literal_list_list_1(),
            456 => self.array_literal_list_opt_0(&children[0]),
            457 => self.array_literal_list_opt_1(),
            458 => self.array_literal_item(&children[0]),
            459 => self.array_literal_item_group_0(&children[0], &children[1]),
            460 => self.array_literal_item_group_1(&children[0], &children[1], &children[2]),
            461 => self.array_literal_item_opt_0(&children[0], &children[1]),
            462 => self.array_literal_item_opt_1(),
            463 => self.if_expression(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
                &children[8],
                &children[9],
            ),
            464 => self.if_expression_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
            ),
            465 => self.if_expression_list_1(),
            466 => self.case_expression(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
                &children[8],
                &children[9],
                &children[10],
                &children[11],
                &children[12],
            ),
            467 => self.case_expression_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            468 => self.case_expression_list_1(),
            469 => self.case_expression_opt_0(&children[0]),
            470 => self.case_expression_opt_1(),
            471 => self.switch_expression(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
                &children[8],
                &children[9],
                &children[10],
                &children[11],
            ),
            472 => self.switch_expression_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            473 => self.switch_expression_list_1(),
            474 => self.switch_expression_opt_0(&children[0]),
            475 => self.switch_expression_opt_1(),
            476 => self.type_expression(&children[0], &children[1], &children[2], &children[3]),
            477 => self.inside_expression(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            478 => self.outside_expression(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            479 => self.range_list(&children[0], &children[1], &children[2]),
            480 => self.range_list_list_0(&children[0], &children[1], &children[2]),
            481 => self.range_list_list_1(),
            482 => self.range_list_opt_0(&children[0]),
            483 => self.range_list_opt_1(),
            484 => self.range_item(&children[0]),
            485 => self.select(&children[0], &children[1], &children[2], &children[3]),
            486 => self.select_opt_0(&children[0], &children[1]),
            487 => self.select_opt_1(),
            488 => self.select_operator_0(&children[0]),
            489 => self.select_operator_1(&children[0]),
            490 => self.select_operator_2(&children[0]),
            491 => self.select_operator_3(&children[0]),
            492 => self.width(&children[0], &children[1], &children[2], &children[3]),
            493 => self.width_list_0(&children[0], &children[1], &children[2]),
            494 => self.width_list_1(),
            495 => self.array(&children[0], &children[1], &children[2], &children[3]),
            496 => self.array_list_0(&children[0], &children[1], &children[2]),
            497 => self.array_list_1(),
            498 => self.range(&children[0], &children[1]),
            499 => self.range_opt_0(&children[0], &children[1]),
            500 => self.range_opt_1(),
            501 => self.range_operator_0(&children[0]),
            502 => self.range_operator_1(&children[0]),
            503 => self.fixed_type_0(&children[0]),
            504 => self.fixed_type_1(&children[0]),
            505 => self.fixed_type_2(&children[0]),
            506 => self.fixed_type_3(&children[0]),
            507 => self.fixed_type_4(&children[0]),
            508 => self.fixed_type_5(&children[0]),
            509 => self.fixed_type_6(&children[0]),
            510 => self.variable_type_0(&children[0]),
            511 => self.variable_type_1(&children[0]),
            512 => self.variable_type_2(&children[0]),
            513 => self.variable_type_3(&children[0]),
            514 => self.variable_type_4(&children[0]),
            515 => self.variable_type_5(&children[0]),
            516 => self.variable_type_6(&children[0]),
            517 => self.variable_type_7(&children[0]),
            518 => self.variable_type_8(&children[0]),
            519 => self.variable_type_9(&children[0]),
            520 => self.user_defined_type(&children[0]),
            521 => self.type_modifier_0(&children[0]),
            522 => self.type_modifier_1(&children[0]),
            523 => self.factor_type(&children[0]),
            524 => self.factor_type_group_0(&children[0], &children[1]),
            525 => self.factor_type_group_1(&children[0]),
            526 => self.factor_type_opt_0(&children[0]),
            527 => self.factor_type_opt_1(),
            528 => self.scalar_type(&children[0], &children[1]),
            529 => self.scalar_type_group_0(&children[0], &children[1]),
            530 => self.scalar_type_group_1(&children[0]),
            531 => self.scalar_type_list_0(&children[0], &children[1]),
            532 => self.scalar_type_list_1(),
            533 => self.scalar_type_opt_0(&children[0]),
            534 => self.scalar_type_opt_1(),
            535 => self.array_type(&children[0], &children[1]),
            536 => self.array_type_opt_0(&children[0]),
            537 => self.array_type_opt_1(),
            538 => self.casting_type_0(&children[0]),
            539 => self.casting_type_1(&children[0]),
            540 => self.casting_type_2(&children[0]),
            541 => self.casting_type_3(&children[0]),
            542 => self.casting_type_4(&children[0]),
            543 => self.casting_type_5(&children[0]),
            544 => self.casting_type_6(&children[0]),
            545 => self.casting_type_7(&children[0]),
            546 => self.casting_type_8(&children[0]),
            547 => self.casting_type_9(&children[0]),
            548 => self.casting_type_10(&children[0]),
            549 => self.casting_type_11(&children[0]),
            550 => self.casting_type_12(&children[0]),
            551 => self.casting_type_13(&children[0]),
            552 => self.casting_type_14(&children[0]),
            553 => self.clock_domain(&children[0], &children[1]),
            554 => self.statement_block(&children[0], &children[1], &children[2]),
            555 => self.statement_block_list_0(&children[0], &children[1]),
            556 => self.statement_block_list_1(),
            557 => self.statement_block_item_0(&children[0]),
            558 => self.statement_block_item_1(&children[0]),
            559 => self.statement_block_item_2(&children[0]),
            560 => self.statement_0(&children[0]),
            561 => self.statement_1(&children[0]),
            562 => self.statement_2(&children[0]),
            563 => self.statement_3(&children[0]),
            564 => self.statement_4(&children[0]),
            565 => self.statement_5(&children[0]),
            566 => self.statement_6(&children[0]),
            567 => self.statement_7(&children[0]),
            568 => self.let_statement(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
            ),
            569 => self.let_statement_opt_0(&children[0]),
            570 => self.let_statement_opt_1(),
            571 => self.identifier_statement(&children[0], &children[1], &children[2]),
            572 => self.identifier_statement_group_0(&children[0]),
            573 => self.identifier_statement_group_1(&children[0]),
            574 => self.assignment(&children[0], &children[1]),
            575 => self.assignment_group_0(&children[0]),
            576 => self.assignment_group_1(&children[0]),
            577 => self.if_statement(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            578 => self.if_statement_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            579 => self.if_statement_list_1(),
            580 => self.if_statement_opt_0(&children[0], &children[1]),
            581 => self.if_statement_opt_1(),
            582 => self.if_reset_statement(&children[0], &children[1], &children[2], &children[3]),
            583 => self.if_reset_statement_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            584 => self.if_reset_statement_list_1(),
            585 => self.if_reset_statement_opt_0(&children[0], &children[1]),
            586 => self.if_reset_statement_opt_1(),
            587 => self.return_statement(&children[0], &children[1], &children[2]),
            588 => self.break_statement(&children[0], &children[1]),
            589 => self.for_statement(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
            ),
            590 => self.for_statement_opt_0(&children[0], &children[1], &children[2]),
            591 => self.for_statement_opt_1(),
            592 => self.case_statement(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            593 => self.case_statement_list_0(&children[0], &children[1]),
            594 => self.case_statement_list_1(),
            595 => self.case_item(&children[0], &children[1], &children[2]),
            596 => self.case_item_group0_0(&children[0]),
            597 => self.case_item_group0_1(&children[0]),
            598 => self.case_item_group_0(&children[0]),
            599 => self.case_item_group_1(&children[0]),
            600 => self.case_condition(&children[0], &children[1]),
            601 => self.case_condition_list_0(&children[0], &children[1], &children[2]),
            602 => self.case_condition_list_1(),
            603 => self.switch_statement(&children[0], &children[1], &children[2], &children[3]),
            604 => self.switch_statement_list_0(&children[0], &children[1]),
            605 => self.switch_statement_list_1(),
            606 => self.switch_item(&children[0], &children[1], &children[2]),
            607 => self.switch_item_group0_0(&children[0]),
            608 => self.switch_item_group0_1(&children[0]),
            609 => self.switch_item_group_0(&children[0]),
            610 => self.switch_item_group_1(&children[0]),
            611 => self.switch_condition(&children[0], &children[1]),
            612 => self.switch_condition_list_0(&children[0], &children[1], &children[2]),
            613 => self.switch_condition_list_1(),
            614 => self.attribute(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            615 => self.attribute_opt_0(&children[0], &children[1], &children[2]),
            616 => self.attribute_opt_1(),
            617 => self.attribute_list(&children[0], &children[1], &children[2]),
            618 => self.attribute_list_list_0(&children[0], &children[1], &children[2]),
            619 => self.attribute_list_list_1(),
            620 => self.attribute_list_opt_0(&children[0]),
            621 => self.attribute_list_opt_1(),
            622 => self.attribute_item_0(&children[0]),
            623 => self.attribute_item_1(&children[0]),
            624 => self.let_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
            ),
            625 => self.let_declaration_opt_0(&children[0]),
            626 => self.let_declaration_opt_1(),
            627 => self.var_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            628 => self.var_declaration_opt_0(&children[0]),
            629 => self.var_declaration_opt_1(),
            630 => self.const_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
            ),
            631 => self.const_declaration_group_0(&children[0]),
            632 => self.const_declaration_group_1(&children[0]),
            633 => self.type_def_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            634 => self.always_ff_declaration(&children[0], &children[1], &children[2]),
            635 => self.always_ff_declaration_opt_0(&children[0]),
            636 => self.always_ff_declaration_opt_1(),
            637 => {
                self.alwayf_ff_event_list(&children[0], &children[1], &children[2], &children[3])
            }
            638 => self.alwayf_ff_event_list_opt_0(&children[0], &children[1]),
            639 => self.alwayf_ff_event_list_opt_1(),
            640 => self.always_ff_clock(&children[0]),
            641 => self.always_ff_reset(&children[0]),
            642 => self.always_comb_declaration(&children[0], &children[1]),
            643 => self.assign_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            644 => self.modport_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            645 => self.modport_list(&children[0], &children[1], &children[2]),
            646 => self.modport_list_list_0(&children[0], &children[1], &children[2]),
            647 => self.modport_list_list_1(),
            648 => self.modport_list_opt_0(&children[0]),
            649 => self.modport_list_opt_1(),
            650 => self.modport_group(&children[0], &children[1]),
            651 => self.modport_group_group_0(&children[0], &children[1], &children[2]),
            652 => self.modport_group_group_1(&children[0]),
            653 => self.modport_group_list_0(&children[0], &children[1]),
            654 => self.modport_group_list_1(),
            655 => self.modport_item(&children[0], &children[1], &children[2]),
            656 => self.enum_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            657 => self.enum_declaration_opt_0(&children[0], &children[1]),
            658 => self.enum_declaration_opt_1(),
            659 => self.enum_list(&children[0], &children[1], &children[2]),
            660 => self.enum_list_list_0(&children[0], &children[1], &children[2]),
            661 => self.enum_list_list_1(),
            662 => self.enum_list_opt_0(&children[0]),
            663 => self.enum_list_opt_1(),
            664 => self.enum_group(&children[0], &children[1]),
            665 => self.enum_group_group_0(&children[0], &children[1], &children[2]),
            666 => self.enum_group_group_1(&children[0]),
            667 => self.enum_group_list_0(&children[0], &children[1]),
            668 => self.enum_group_list_1(),
            669 => self.enum_item(&children[0], &children[1]),
            670 => self.enum_item_opt_0(&children[0], &children[1]),
            671 => self.enum_item_opt_1(),
            672 => self.struct_union_0(&children[0]),
            673 => self.struct_union_1(&children[0]),
            674 => self.struct_union_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            675 => self.struct_union_declaration_opt_0(&children[0]),
            676 => self.struct_union_declaration_opt_1(),
            677 => self.struct_union_list(&children[0], &children[1], &children[2]),
            678 => self.struct_union_list_list_0(&children[0], &children[1], &children[2]),
            679 => self.struct_union_list_list_1(),
            680 => self.struct_union_list_opt_0(&children[0]),
            681 => self.struct_union_list_opt_1(),
            682 => self.struct_union_group(&children[0], &children[1]),
            683 => self.struct_union_group_group_0(&children[0], &children[1], &children[2]),
            684 => self.struct_union_group_group_1(&children[0]),
            685 => self.struct_union_group_list_0(&children[0], &children[1]),
            686 => self.struct_union_group_list_1(),
            687 => self.struct_union_item(&children[0], &children[1], &children[2]),
            688 => self.initial_declaration(&children[0], &children[1]),
            689 => self.final_declaration(&children[0], &children[1]),
            690 => self.inst_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
            ),
            691 => self.inst_declaration_opt1_0(&children[0], &children[1], &children[2]),
            692 => self.inst_declaration_opt2_0(&children[0]),
            693 => self.inst_declaration_opt2_1(),
            694 => self.inst_declaration_opt1_1(),
            695 => self.inst_declaration_opt0_0(&children[0]),
            696 => self.inst_declaration_opt0_1(),
            697 => self.inst_declaration_opt_0(&children[0]),
            698 => self.inst_declaration_opt_1(),
            699 => self.inst_parameter(&children[0], &children[1], &children[2], &children[3]),
            700 => self.inst_parameter_opt_0(&children[0]),
            701 => self.inst_parameter_opt_1(),
            702 => self.inst_parameter_list(&children[0], &children[1], &children[2]),
            703 => self.inst_parameter_list_list_0(&children[0], &children[1], &children[2]),
            704 => self.inst_parameter_list_list_1(),
            705 => self.inst_parameter_list_opt_0(&children[0]),
            706 => self.inst_parameter_list_opt_1(),
            707 => self.inst_parameter_group(&children[0], &children[1]),
            708 => self.inst_parameter_group_group_0(&children[0], &children[1], &children[2]),
            709 => self.inst_parameter_group_group_1(&children[0]),
            710 => self.inst_parameter_group_list_0(&children[0], &children[1]),
            711 => self.inst_parameter_group_list_1(),
            712 => self.inst_parameter_item(&children[0], &children[1]),
            713 => self.inst_parameter_item_opt_0(&children[0], &children[1]),
            714 => self.inst_parameter_item_opt_1(),
            715 => self.inst_port_list(&children[0], &children[1], &children[2]),
            716 => self.inst_port_list_list_0(&children[0], &children[1], &children[2]),
            717 => self.inst_port_list_list_1(),
            718 => self.inst_port_list_opt_0(&children[0]),
            719 => self.inst_port_list_opt_1(),
            720 => self.inst_port_group(&children[0], &children[1]),
            721 => self.inst_port_group_group_0(&children[0], &children[1], &children[2]),
            722 => self.inst_port_group_group_1(&children[0]),
            723 => self.inst_port_group_list_0(&children[0], &children[1]),
            724 => self.inst_port_group_list_1(),
            725 => self.inst_port_item(&children[0], &children[1]),
            726 => self.inst_port_item_opt_0(&children[0], &children[1]),
            727 => self.inst_port_item_opt_1(),
            728 => self.with_parameter(&children[0], &children[1], &children[2], &children[3]),
            729 => self.with_parameter_opt_0(&children[0]),
            730 => self.with_parameter_opt_1(),
            731 => self.with_parameter_list(&children[0], &children[1], &children[2]),
            732 => self.with_parameter_list_list_0(&children[0], &children[1], &children[2]),
            733 => self.with_parameter_list_list_1(),
            734 => self.with_parameter_list_opt_0(&children[0]),
            735 => self.with_parameter_list_opt_1(),
            736 => self.with_parameter_group(&children[0], &children[1]),
            737 => self.with_parameter_group_group_0(&children[0], &children[1], &children[2]),
            738 => self.with_parameter_group_group_1(&children[0]),
            739 => self.with_parameter_group_list_0(&children[0], &children[1]),
            740 => self.with_parameter_group_list_1(),
            741 => self.with_parameter_item(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            742 => self.with_parameter_item_group0_0(&children[0]),
            743 => self.with_parameter_item_group0_1(&children[0]),
            744 => self.with_parameter_item_group_0(&children[0]),
            745 => self.with_parameter_item_group_1(&children[0]),
            746 => self.generic_bound_0(&children[0]),
            747 => self.generic_bound_1(&children[0]),
            748 => self.generic_bound_2(&children[0]),
            749 => self.with_generic_parameter(&children[0], &children[1], &children[2]),
            750 => self.with_generic_parameter_list(&children[0], &children[1], &children[2]),
            751 => {
                self.with_generic_parameter_list_list_0(&children[0], &children[1], &children[2])
            }
            752 => self.with_generic_parameter_list_list_1(),
            753 => self.with_generic_parameter_list_opt_0(&children[0]),
            754 => self.with_generic_parameter_list_opt_1(),
            755 => self.with_generic_parameter_item(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
            ),
            756 => self.with_generic_parameter_item_opt_0(&children[0], &children[1]),
            757 => self.with_generic_parameter_item_opt_1(),
            758 => self.with_generic_argument(&children[0], &children[1], &children[2]),
            759 => self.with_generic_argument_opt_0(&children[0]),
            760 => self.with_generic_argument_opt_1(),
            761 => self.with_generic_argument_list(&children[0], &children[1], &children[2]),
            762 => self.with_generic_argument_list_list_0(&children[0], &children[1], &children[2]),
            763 => self.with_generic_argument_list_list_1(),
            764 => self.with_generic_argument_list_opt_0(&children[0]),
            765 => self.with_generic_argument_list_opt_1(),
            766 => self.with_generic_argument_item_0(&children[0]),
            767 => self.with_generic_argument_item_1(&children[0]),
            768 => self.port_declaration(&children[0], &children[1], &children[2]),
            769 => self.port_declaration_opt_0(&children[0]),
            770 => self.port_declaration_opt_1(),
            771 => self.port_declaration_list(&children[0], &children[1], &children[2]),
            772 => self.port_declaration_list_list_0(&children[0], &children[1], &children[2]),
            773 => self.port_declaration_list_list_1(),
            774 => self.port_declaration_list_opt_0(&children[0]),
            775 => self.port_declaration_list_opt_1(),
            776 => self.port_declaration_group(&children[0], &children[1]),
            777 => self.port_declaration_group_group_0(&children[0], &children[1], &children[2]),
            778 => self.port_declaration_group_group_1(&children[0]),
            779 => self.port_declaration_group_list_0(&children[0], &children[1]),
            780 => self.port_declaration_group_list_1(),
            781 => self.port_declaration_item(&children[0], &children[1], &children[2]),
            782 => self.port_declaration_item_group_0(&children[0]),
            783 => self.port_declaration_item_group_1(&children[0]),
            784 => self.port_type_concrete(&children[0], &children[1], &children[2]),
            785 => self.port_type_concrete_opt_0(&children[0]),
            786 => self.port_type_concrete_opt_1(),
            787 => self.port_type_abstract(&children[0], &children[1], &children[2]),
            788 => self.port_type_abstract_opt0_0(&children[0]),
            789 => self.port_type_abstract_opt0_1(),
            790 => self.port_type_abstract_opt_0(&children[0]),
            791 => self.port_type_abstract_opt_1(),
            792 => self.direction_0(&children[0]),
            793 => self.direction_1(&children[0]),
            794 => self.direction_2(&children[0]),
            795 => self.direction_3(&children[0]),
            796 => self.direction_4(&children[0]),
            797 => self.direction_5(&children[0]),
            798 => self.function_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            799 => self.function_declaration_opt1_0(&children[0], &children[1]),
            800 => self.function_declaration_opt1_1(),
            801 => self.function_declaration_opt0_0(&children[0]),
            802 => self.function_declaration_opt0_1(),
            803 => self.function_declaration_opt_0(&children[0]),
            804 => self.function_declaration_opt_1(),
            805 => self.import_declaration(&children[0], &children[1], &children[2], &children[3]),
            806 => self.import_declaration_opt_0(&children[0], &children[1]),
            807 => self.import_declaration_opt_1(),
            808 => self.export_declaration(&children[0], &children[1], &children[2]),
            809 => self.export_declaration_group_0(&children[0]),
            810 => self.export_declaration_group_1(&children[0], &children[1]),
            811 => self.export_declaration_opt_0(&children[0], &children[1]),
            812 => self.export_declaration_opt_1(),
            813 => self.unsafe_block(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
            ),
            814 => self.unsafe_block_list_0(&children[0], &children[1]),
            815 => self.unsafe_block_list_1(),
            816 => self.module_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
                &children[8],
                &children[9],
            ),
            817 => self.module_declaration_list_0(&children[0], &children[1]),
            818 => self.module_declaration_list_1(),
            819 => self.module_declaration_opt3_0(&children[0]),
            820 => self.module_declaration_opt3_1(),
            821 => self.module_declaration_opt2_0(&children[0]),
            822 => self.module_declaration_opt2_1(),
            823 => self.module_declaration_opt1_0(&children[0], &children[1]),
            824 => self.module_declaration_opt1_1(),
            825 => self.module_declaration_opt0_0(&children[0]),
            826 => self.module_declaration_opt0_1(),
            827 => self.module_declaration_opt_0(&children[0]),
            828 => self.module_declaration_opt_1(),
            829 => self.module_group(&children[0], &children[1]),
            830 => self.module_group_group_0(&children[0], &children[1], &children[2]),
            831 => self.module_group_group_list_0(&children[0], &children[1]),
            832 => self.module_group_group_list_1(),
            833 => self.module_group_group_1(&children[0]),
            834 => self.module_group_list_0(&children[0], &children[1]),
            835 => self.module_group_list_1(),
            836 => self.module_item(&children[0]),
            837 => self.interface_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
            ),
            838 => self.interface_declaration_list_0(&children[0], &children[1]),
            839 => self.interface_declaration_list_1(),
            840 => self.interface_declaration_opt1_0(&children[0]),
            841 => self.interface_declaration_opt1_1(),
            842 => self.interface_declaration_opt0_0(&children[0]),
            843 => self.interface_declaration_opt0_1(),
            844 => self.interface_declaration_opt_0(&children[0]),
            845 => self.interface_declaration_opt_1(),
            846 => self.interface_group(&children[0], &children[1]),
            847 => self.interface_group_group_0(&children[0], &children[1], &children[2]),
            848 => self.interface_group_group_list_0(&children[0], &children[1]),
            849 => self.interface_group_group_list_1(),
            850 => self.interface_group_group_1(&children[0]),
            851 => self.interface_group_list_0(&children[0], &children[1]),
            852 => self.interface_group_list_1(),
            853 => self.interface_item_0(&children[0]),
            854 => self.interface_item_1(&children[0]),
            855 => self.generate_if_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            856 => self.generate_if_declaration_list_0(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            857 => self.generate_if_declaration_list_1(),
            858 => self.generate_if_declaration_opt_0(&children[0], &children[1]),
            859 => self.generate_if_declaration_opt_1(),
            860 => self.generate_for_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            861 => self.generate_for_declaration_opt_0(&children[0], &children[1], &children[2]),
            862 => self.generate_for_declaration_opt_1(),
            863 => self.generate_block_declaration(&children[0]),
            864 => self.generate_named_block(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
            ),
            865 => self.generate_named_block_list_0(&children[0], &children[1]),
            866 => self.generate_named_block_list_1(),
            867 => self.generate_optional_named_block(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
            ),
            868 => self.generate_optional_named_block_list_0(&children[0], &children[1]),
            869 => self.generate_optional_named_block_list_1(),
            870 => self.generate_optional_named_block_opt_0(&children[0], &children[1]),
            871 => self.generate_optional_named_block_opt_1(),
            872 => self.generate_group(&children[0], &children[1]),
            873 => self.generate_group_group_0(&children[0], &children[1], &children[2]),
            874 => self.generate_group_group_list_0(&children[0], &children[1]),
            875 => self.generate_group_group_list_1(),
            876 => self.generate_group_group_1(&children[0]),
            877 => self.generate_group_list_0(&children[0], &children[1]),
            878 => self.generate_group_list_1(),
            879 => self.generate_item_0(&children[0]),
            880 => self.generate_item_1(&children[0]),
            881 => self.generate_item_2(&children[0]),
            882 => self.generate_item_3(&children[0]),
            883 => self.generate_item_4(&children[0]),
            884 => self.generate_item_5(&children[0]),
            885 => self.generate_item_6(&children[0]),
            886 => self.generate_item_7(&children[0]),
            887 => self.generate_item_8(&children[0]),
            888 => self.generate_item_9(&children[0]),
            889 => self.generate_item_10(&children[0]),
            890 => self.generate_item_11(&children[0]),
            891 => self.generate_item_12(&children[0]),
            892 => self.generate_item_13(&children[0]),
            893 => self.generate_item_14(&children[0]),
            894 => self.generate_item_15(&children[0]),
            895 => self.generate_item_16(&children[0]),
            896 => self.generate_item_17(&children[0]),
            897 => self.package_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
            ),
            898 => self.package_declaration_list_0(&children[0], &children[1]),
            899 => self.package_declaration_list_1(),
            900 => self.package_declaration_opt0_0(&children[0]),
            901 => self.package_declaration_opt0_1(),
            902 => self.package_declaration_opt_0(&children[0]),
            903 => self.package_declaration_opt_1(),
            904 => self.package_group(&children[0], &children[1]),
            905 => self.package_group_group_0(&children[0], &children[1], &children[2]),
            906 => self.package_group_group_list_0(&children[0], &children[1]),
            907 => self.package_group_group_list_1(),
            908 => self.package_group_group_1(&children[0]),
            909 => self.package_group_list_0(&children[0], &children[1]),
            910 => self.package_group_list_1(),
            911 => self.package_item_0(&children[0]),
            912 => self.package_item_1(&children[0]),
            913 => self.package_item_2(&children[0]),
            914 => self.package_item_3(&children[0]),
            915 => self.package_item_4(&children[0]),
            916 => self.package_item_5(&children[0]),
            917 => self.package_item_6(&children[0]),
            918 => self.package_item_7(&children[0]),
            919 => self.proto_module_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
            ),
            920 => self.proto_module_declaration_opt1_0(&children[0]),
            921 => self.proto_module_declaration_opt1_1(),
            922 => self.proto_module_declaration_opt0_0(&children[0]),
            923 => self.proto_module_declaration_opt0_1(),
            924 => self.proto_module_declaration_opt_0(&children[0]),
            925 => self.proto_module_declaration_opt_1(),
            926 => self.embed_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
            ),
            927 => self.embed_content(&children[0]),
            928 => self.embed_content_token(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
                &children[7],
            ),
            929 => self.embed_content_token_list_0(&children[0], &children[1]),
            930 => self.embed_content_token_list_1(),
            931 => self.embed_item_0(&children[0], &children[1], &children[2]),
            932 => self.embed_item_list_0(&children[0], &children[1]),
            933 => self.embed_item_list_1(),
            934 => self.embed_item_1(&children[0]),
            935 => self.include_declaration(
                &children[0],
                &children[1],
                &children[2],
                &children[3],
                &children[4],
                &children[5],
                &children[6],
            ),
            936 => self.description_group(&children[0], &children[1]),
            937 => self.description_group_group_0(&children[0], &children[1], &children[2]),
            938 => self.description_group_group_list_0(&children[0], &children[1]),
            939 => self.description_group_group_list_1(),
            940 => self.description_group_group_1(&children[0]),
            941 => self.description_group_list_0(&children[0], &children[1]),
            942 => self.description_group_list_1(),
            943 => self.description_item_0(&children[0]),
            944 => self.description_item_1(&children[0]),
            945 => self.description_item_2(&children[0]),
            946 => self.description_item_3(&children[0]),
            947 => self.description_item_4(&children[0]),
            948 => self.description_item_5(&children[0]),
            949 => self.description_item_6(&children[0]),
            950 => self.veryl(&children[0], &children[1]),
            951 => self.veryl_list_0(&children[0], &children[1]),
            952 => self.veryl_list_1(),
            _ => Err(ParserError::InternalError(format!(
                "Unhandled production number: {}",
                prod_num
            ))
            .into()),
        }
    }
    fn on_comment_parsed(&mut self, token: Token<'t>) {
        self.user_grammar.on_comment_parsed(token)
    }
}