// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file was generated by FuzzTest's grammar_domain_code_generator using
// the following command line:
//    $ grammar_domain_code_generator --input_grammar_files \
//      /path/to/wgsl.g4 --output_header_file_path \
//      /path/to/tint_wgsl_fuzzer_grammar.h --insert_whitespace

#ifndef TESTING_LIBFUZZER_FUZZERS_TINT_WGSL_FUZZER_GRAMMAR_H_
#define TESTING_LIBFUZZER_FUZZERS_TINT_WGSL_FUZZER_GRAMMAR_H_

#include "third_party/fuzztest/src/fuzztest/internal/domains/in_grammar_impl.h"

namespace fuzztest::internal::grammar::wgsl {

enum WgslTypes {
  kWgslNode,
  kTranslation_unitNode,
  kGlobal_directiveNode,
  kGlobal_declNode,
  kGlobal_assertNode,
  kBool_literalNode,
  kInt_literalNode,
  kDECIMAL_INT_LITERALNode,
  kHEX_INT_LITERALNode,
  kFloat_literalNode,
  kDECIMAL_FLOAT_LITERALNode,
  kHEX_FLOAT_LITERALNode,
  kDiagnostic_directiveNode,
  kLiteralNode,
  kIdentNode,
  kMember_identNode,
  kDiagnostic_name_tokenNode,
  kDiagnostic_rule_nameNode,
  kTemplate_args_startNode,
  kTemplate_args_endNode,
  kTemplate_listNode,
  kTemplate_arg_comma_listNode,
  kTemplate_arg_expressionNode,
  kAlign_attrNode,
  kBinding_attrNode,
  kBlend_src_attrNode,
  kBuiltin_attrNode,
  kBuiltin_value_nameNode,
  kConst_attrNode,
  kDiagnostic_attrNode,
  kGroup_attrNode,
  kId_attrNode,
  kInterpolate_attrNode,
  kInterpolate_type_nameNode,
  kInterpolate_sampling_nameNode,
  kInvariant_attrNode,
  kLocation_attrNode,
  kMust_use_attrNode,
  kSize_attrNode,
  kWorkgroup_size_attrNode,
  kVertex_attrNode,
  kFragment_attrNode,
  kCompute_attrNode,
  kAttributeNode,
  kDiagnostic_controlNode,
  kStruct_declNode,
  kStruct_body_declNode,
  kStruct_memberNode,
  kType_alias_declNode,
  kType_specifierNode,
  kTemplate_elaborated_identNode,
  kVariable_or_value_statementNode,
  kVariable_declNode,
  kOptionally_typed_identNode,
  kGlobal_variable_declNode,
  kGlobal_value_declNode,
  kPrimary_expressionNode,
  kCall_expressionNode,
  kCall_phraseNode,
  kParen_expressionNode,
  kArgument_expression_listNode,
  kExpression_comma_listNode,
  kComponent_or_swizzle_specifierNode,
  kUnary_expressionNode,
  kSingular_expressionNode,
  kLhs_expressionNode,
  kCore_lhs_expressionNode,
  kMultiplicative_expressionNode,
  kMultiplicative_operatorNode,
  kAdditive_expressionNode,
  kAdditive_operatorNode,
  kShift_leftNode,
  kShift_rightNode,
  kLess_thanNode,
  kGreater_thanNode,
  kLess_than_equalNode,
  kGreater_than_equalNode,
  kShift_expressionNode,
  kRelational_expressionNode,
  kShort_circuit_and_expressionNode,
  kShort_circuit_or_expressionNode,
  kBinary_or_expressionNode,
  kBinary_and_expressionNode,
  kBinary_xor_expressionNode,
  kBitwise_expressionNode,
  kExpressionNode,
  kCompound_statementNode,
  kAssignment_statementNode,
  kShift_right_assignNode,
  kShift_left_assignNode,
  kCompound_assignment_operatorNode,
  kIncrement_statementNode,
  kDecrement_statementNode,
  kIf_statementNode,
  kIf_clauseNode,
  kElse_if_clauseNode,
  kElse_clauseNode,
  kSwitch_statementNode,
  kSwitch_bodyNode,
  kSwitch_clauseNode,
  kCase_clauseNode,
  kDefault_alone_clauseNode,
  kCase_selectorsNode,
  kCase_selectorNode,
  kLoop_statementNode,
  kFor_statementNode,
  kFor_headerNode,
  kFor_initNode,
  kFor_updateNode,
  kWhile_statementNode,
  kBreak_statementNode,
  kBreak_if_statementNode,
  kContinue_statementNode,
  kContinuing_statementNode,
  kContinuing_compound_statementNode,
  kReturn_statementNode,
  kFunc_call_statementNode,
  kConst_assertNode,
  kAssert_statementNode,
  kStatementNode,
  kVariable_updating_statementNode,
  kFunction_declNode,
  kFunction_headerNode,
  kParam_listNode,
  kParamNode,
  kEnable_directiveNode,
  kEnable_extension_listNode,
  kRequires_directiveNode,
  kSoftware_extension_listNode,
  kEnable_extension_nameNode,
  kSoftware_extension_nameNode,
  kIDENT_PATTERN_TOKENNode,
  kSeverity_control_nameNode,
  kSWIZZLE_NAMENode,
  kWhitespaceNode,
  kTranslation_unitSubNode0,
  kTranslation_unitSubNode1,
  kTranslation_unitSubNode2,
  kGlobal_declSubNode3,
  kGlobal_declSubNode4,
  kGlobal_declSubNode5,
  kDECIMAL_INT_LITERALSubNode6,
  kDECIMAL_INT_LITERALSubNode7,
  kDECIMAL_INT_LITERALSubNode8,
  kDECIMAL_INT_LITERALSubNode9,
  kDECIMAL_INT_LITERALSubNode10,
  kHEX_INT_LITERALSubNode11,
  kHEX_INT_LITERALSubNode12,
  kDECIMAL_FLOAT_LITERALSubNode13,
  kDECIMAL_FLOAT_LITERALSubNode14,
  kDECIMAL_FLOAT_LITERALSubNode15,
  kDECIMAL_FLOAT_LITERALSubNode16,
  kDECIMAL_FLOAT_LITERALSubNode17,
  kDECIMAL_FLOAT_LITERALSubNode18,
  kDECIMAL_FLOAT_LITERALSubNode20,
  kDECIMAL_FLOAT_LITERALSubNode21,
  kDECIMAL_FLOAT_LITERALSubNode19,
  kDECIMAL_FLOAT_LITERALSubNode22,
  kDECIMAL_FLOAT_LITERALSubNode23,
  kDECIMAL_FLOAT_LITERALSubNode24,
  kDECIMAL_FLOAT_LITERALSubNode25,
  kDECIMAL_FLOAT_LITERALSubNode26,
  kDECIMAL_FLOAT_LITERALSubNode28,
  kDECIMAL_FLOAT_LITERALSubNode29,
  kDECIMAL_FLOAT_LITERALSubNode27,
  kDECIMAL_FLOAT_LITERALSubNode30,
  kDECIMAL_FLOAT_LITERALSubNode31,
  kDECIMAL_FLOAT_LITERALSubNode32,
  kDECIMAL_FLOAT_LITERALSubNode33,
  kDECIMAL_FLOAT_LITERALSubNode34,
  kDECIMAL_FLOAT_LITERALSubNode35,
  kDECIMAL_FLOAT_LITERALSubNode36,
  kHEX_FLOAT_LITERALSubNode37,
  kHEX_FLOAT_LITERALSubNode38,
  kHEX_FLOAT_LITERALSubNode39,
  kHEX_FLOAT_LITERALSubNode41,
  kHEX_FLOAT_LITERALSubNode42,
  kHEX_FLOAT_LITERALSubNode43,
  kHEX_FLOAT_LITERALSubNode40,
  kHEX_FLOAT_LITERALSubNode44,
  kHEX_FLOAT_LITERALSubNode45,
  kHEX_FLOAT_LITERALSubNode46,
  kHEX_FLOAT_LITERALSubNode47,
  kHEX_FLOAT_LITERALSubNode49,
  kHEX_FLOAT_LITERALSubNode50,
  kHEX_FLOAT_LITERALSubNode51,
  kHEX_FLOAT_LITERALSubNode48,
  kHEX_FLOAT_LITERALSubNode52,
  kHEX_FLOAT_LITERALSubNode53,
  kHEX_FLOAT_LITERALSubNode54,
  kHEX_FLOAT_LITERALSubNode55,
  kHEX_FLOAT_LITERALSubNode56,
  kHEX_FLOAT_LITERALSubNode57,
  kDiagnostic_rule_nameSubNode58,
  kTemplate_arg_comma_listSubNode59,
  kTemplate_arg_comma_listSubNode60,
  kTemplate_arg_comma_listSubNode61,
  kAlign_attrSubNode62,
  kBinding_attrSubNode63,
  kBlend_src_attrSubNode64,
  kBuiltin_attrSubNode65,
  kGroup_attrSubNode66,
  kId_attrSubNode67,
  kInterpolate_attrSubNode68,
  kInterpolate_attrSubNode69,
  kInterpolate_attrSubNode70,
  kInterpolate_attrSubNode71,
  kLocation_attrSubNode72,
  kSize_attrSubNode73,
  kWorkgroup_size_attrSubNode74,
  kWorkgroup_size_attrSubNode75,
  kWorkgroup_size_attrSubNode76,
  kWorkgroup_size_attrSubNode77,
  kWorkgroup_size_attrSubNode78,
  kWorkgroup_size_attrSubNode79,
  kAttributeSubNode80,
  kAttributeSubNode81,
  kDiagnostic_controlSubNode82,
  kStruct_body_declSubNode83,
  kStruct_body_declSubNode84,
  kStruct_body_declSubNode85,
  kStruct_memberSubNode86,
  kTemplate_elaborated_identSubNode87,
  kVariable_or_value_statementSubNode88,
  kVariable_or_value_statementSubNode89,
  kVariable_or_value_statementSubNode90,
  kVariable_declSubNode91,
  kOptionally_typed_identSubNode92,
  kOptionally_typed_identSubNode93,
  kGlobal_variable_declSubNode94,
  kGlobal_variable_declSubNode95,
  kGlobal_variable_declSubNode96,
  kGlobal_value_declSubNode97,
  kGlobal_value_declSubNode98,
  kGlobal_value_declSubNode99,
  kGlobal_value_declSubNode100,
  kGlobal_value_declSubNode101,
  kArgument_expression_listSubNode102,
  kExpression_comma_listSubNode103,
  kExpression_comma_listSubNode104,
  kExpression_comma_listSubNode105,
  kComponent_or_swizzle_specifierSubNode106,
  kComponent_or_swizzle_specifierSubNode107,
  kComponent_or_swizzle_specifierSubNode108,
  kComponent_or_swizzle_specifierSubNode109,
  kComponent_or_swizzle_specifierSubNode110,
  kComponent_or_swizzle_specifierSubNode111,
  kUnary_expressionSubNode112,
  kUnary_expressionSubNode113,
  kUnary_expressionSubNode114,
  kUnary_expressionSubNode115,
  kUnary_expressionSubNode116,
  kSingular_expressionSubNode117,
  kLhs_expressionSubNode118,
  kLhs_expressionSubNode119,
  kLhs_expressionSubNode120,
  kLhs_expressionSubNode121,
  kCore_lhs_expressionSubNode122,
  kMultiplicative_expressionSubNode123,
  kAdditive_expressionSubNode124,
  kShift_expressionSubNode125,
  kShift_expressionSubNode126,
  kRelational_expressionSubNode127,
  kRelational_expressionSubNode128,
  kRelational_expressionSubNode129,
  kRelational_expressionSubNode130,
  kRelational_expressionSubNode131,
  kRelational_expressionSubNode132,
  kShort_circuit_and_expressionSubNode133,
  kShort_circuit_or_expressionSubNode134,
  kBinary_or_expressionSubNode135,
  kBinary_and_expressionSubNode136,
  kBinary_xor_expressionSubNode137,
  kBitwise_expressionSubNode138,
  kBitwise_expressionSubNode139,
  kBitwise_expressionSubNode140,
  kExpressionSubNode141,
  kExpressionSubNode142,
  kCompound_statementSubNode143,
  kCompound_statementSubNode144,
  kAssignment_statementSubNode145,
  kAssignment_statementSubNode146,
  kAssignment_statementSubNode147,
  kIf_statementSubNode148,
  kIf_statementSubNode149,
  kIf_statementSubNode150,
  kSwitch_statementSubNode151,
  kSwitch_bodySubNode152,
  kSwitch_bodySubNode153,
  kCase_clauseSubNode154,
  kDefault_alone_clauseSubNode155,
  kCase_selectorsSubNode156,
  kCase_selectorsSubNode157,
  kCase_selectorsSubNode158,
  kLoop_statementSubNode159,
  kLoop_statementSubNode160,
  kLoop_statementSubNode161,
  kLoop_statementSubNode162,
  kFor_statementSubNode163,
  kFor_headerSubNode164,
  kFor_headerSubNode165,
  kFor_headerSubNode166,
  kWhile_statementSubNode167,
  kContinuing_compound_statementSubNode168,
  kContinuing_compound_statementSubNode169,
  kContinuing_compound_statementSubNode170,
  kReturn_statementSubNode171,
  kStatementSubNode172,
  kStatementSubNode173,
  kStatementSubNode174,
  kStatementSubNode175,
  kStatementSubNode176,
  kStatementSubNode177,
  kStatementSubNode178,
  kStatementSubNode179,
  kFunction_declSubNode180,
  kFunction_headerSubNode181,
  kFunction_headerSubNode182,
  kFunction_headerSubNode184,
  kFunction_headerSubNode183,
  kParam_listSubNode185,
  kParam_listSubNode186,
  kParam_listSubNode187,
  kParamSubNode188,
  kEnable_extension_listSubNode189,
  kEnable_extension_listSubNode190,
  kEnable_extension_listSubNode191,
  kSoftware_extension_listSubNode192,
  kSoftware_extension_listSubNode193,
  kSoftware_extension_listSubNode194,
  kIDENT_PATTERN_TOKENSubNode196,
  kIDENT_PATTERN_TOKENSubNode195,
  kIDENT_PATTERN_TOKENSubNode197,
  kSWIZZLE_NAMESubNode198,
  kSWIZZLE_NAMESubNode199,
  kSWIZZLE_NAMESubNode200,
  kSWIZZLE_NAMESubNode201,
  kSWIZZLE_NAMESubNode202,
  kSWIZZLE_NAMESubNode203,
  kWhitespaceSubNode204,
  kEOFNode,
  kLiteral0,
  kLiteral76,
  kLiteral80,
  kLiteral88,
  kLiteral34,
  kLiteral47,
  kLiteral78,
  kLiteral81,
  kLiteral48,
  kLiteral9,
  kLiteral10,
  kLiteral32,
  kLiteral45,
  kLiteral35,
  kLiteral51,
  kLiteral43,
  kLiteral24,
  kLiteral36,
  kLiteral52,
  kLiteral44,
  kLiteral87,
  kLiteral69,
  kLiteral33,
  kLiteral46,
  kLiteral28,
  kLiteral1,
  kLiteral5,
  kLiteral37,
  kLiteral42,
  kLiteral39,
  kLiteral30,
  kLiteral79,
  kLiteral6,
  kLiteral40,
  kLiteral38,
  kLiteral41,
  kLiteral7,
  kLiteral74,
  kLiteral75,
  kLiteral84,
  kLiteral50,
  kLiteral85,
  kLiteral29,
  kLiteral8,
  kLiteral11,
  kLiteral12,
  kLiteral61,
  kLiteral13,
  kLiteral56,
  kLiteral23,
  kLiteral14,
  kLiteral65,
  kLiteral62,
  kLiteral63,
  kLiteral57,
  kLiteral4,
  kLiteral86,
  kLiteral54,
  kLiteral67,
  kLiteral3,
  kLiteral66,
  kLiteral59,
  kLiteral22,
  kLiteral15,
  kLiteral16,
  kLiteral53,
  kLiteral70,
  kLiteral17,
  kLiteral72,
  kLiteral18,
  kLiteral58,
  kLiteral19,
  kLiteral73,
  kLiteral68,
  kLiteral64,
  kLiteral20,
  kLiteral25,
  kLiteral55,
  kLiteral2,
  kLiteral31,
  kLiteral21,
  kLiteral60,
  kLiteral71,
  kLiteral26,
  kLiteral83,
  kLiteral49,
  kLiteral82,
  kLiteral27,
  kLiteral77,
  kCharSet16,
  kCharSet9,
  kCharSet11,
  kCharSet5,
  kCharSet7,
  kCharSet0,
  kCharSet6,
  kCharSet13,
  kCharSet14,
  kCharSet15,
  kCharSet10,
  kCharSet8,
  kCharSet4,
  kCharSet12,
  kCharSet2,
  kCharSet1,
  kCharSet3,
};
class WgslNode;
class Translation_unitNode;
class Global_directiveNode;
class Global_declNode;
class Global_assertNode;
class Bool_literalNode;
class Int_literalNode;
class DECIMAL_INT_LITERALNode;
class HEX_INT_LITERALNode;
class Float_literalNode;
class DECIMAL_FLOAT_LITERALNode;
class HEX_FLOAT_LITERALNode;
class Diagnostic_directiveNode;
class LiteralNode;
class IdentNode;
class Member_identNode;
class Diagnostic_name_tokenNode;
class Diagnostic_rule_nameNode;
class Template_args_startNode;
class Template_args_endNode;
class Template_listNode;
class Template_arg_comma_listNode;
class Template_arg_expressionNode;
class Align_attrNode;
class Binding_attrNode;
class Blend_src_attrNode;
class Builtin_attrNode;
class Builtin_value_nameNode;
class Const_attrNode;
class Diagnostic_attrNode;
class Group_attrNode;
class Id_attrNode;
class Interpolate_attrNode;
class Interpolate_type_nameNode;
class Interpolate_sampling_nameNode;
class Invariant_attrNode;
class Location_attrNode;
class Must_use_attrNode;
class Size_attrNode;
class Workgroup_size_attrNode;
class Vertex_attrNode;
class Fragment_attrNode;
class Compute_attrNode;
class AttributeNode;
class Diagnostic_controlNode;
class Struct_declNode;
class Struct_body_declNode;
class Struct_memberNode;
class Type_alias_declNode;
class Type_specifierNode;
class Template_elaborated_identNode;
class Variable_or_value_statementNode;
class Variable_declNode;
class Optionally_typed_identNode;
class Global_variable_declNode;
class Global_value_declNode;
class Primary_expressionNode;
class Call_expressionNode;
class Call_phraseNode;
class Paren_expressionNode;
class Argument_expression_listNode;
class Expression_comma_listNode;
class Component_or_swizzle_specifierNode;
class Unary_expressionNode;
class Singular_expressionNode;
class Lhs_expressionNode;
class Core_lhs_expressionNode;
class Multiplicative_expressionNode;
class Multiplicative_operatorNode;
class Additive_expressionNode;
class Additive_operatorNode;
class Shift_leftNode;
class Shift_rightNode;
class Less_thanNode;
class Greater_thanNode;
class Less_than_equalNode;
class Greater_than_equalNode;
class Shift_expressionNode;
class Relational_expressionNode;
class Short_circuit_and_expressionNode;
class Short_circuit_or_expressionNode;
class Binary_or_expressionNode;
class Binary_and_expressionNode;
class Binary_xor_expressionNode;
class Bitwise_expressionNode;
class ExpressionNode;
class Compound_statementNode;
class Assignment_statementNode;
class Shift_right_assignNode;
class Shift_left_assignNode;
class Compound_assignment_operatorNode;
class Increment_statementNode;
class Decrement_statementNode;
class If_statementNode;
class If_clauseNode;
class Else_if_clauseNode;
class Else_clauseNode;
class Switch_statementNode;
class Switch_bodyNode;
class Switch_clauseNode;
class Case_clauseNode;
class Default_alone_clauseNode;
class Case_selectorsNode;
class Case_selectorNode;
class Loop_statementNode;
class For_statementNode;
class For_headerNode;
class For_initNode;
class For_updateNode;
class While_statementNode;
class Break_statementNode;
class Break_if_statementNode;
class Continue_statementNode;
class Continuing_statementNode;
class Continuing_compound_statementNode;
class Return_statementNode;
class Func_call_statementNode;
class Const_assertNode;
class Assert_statementNode;
class StatementNode;
class Variable_updating_statementNode;
class Function_declNode;
class Function_headerNode;
class Param_listNode;
class ParamNode;
class Enable_directiveNode;
class Enable_extension_listNode;
class Requires_directiveNode;
class Software_extension_listNode;
class Enable_extension_nameNode;
class Software_extension_nameNode;
class IDENT_PATTERN_TOKENNode;
class Severity_control_nameNode;
class SWIZZLE_NAMENode;
class WhitespaceNode;
class Translation_unitSubNode0;
class Translation_unitSubNode1;
class Translation_unitSubNode2;
class Global_declSubNode3;
class Global_declSubNode4;
class Global_declSubNode5;
class DECIMAL_INT_LITERALSubNode6;
class DECIMAL_INT_LITERALSubNode7;
class DECIMAL_INT_LITERALSubNode8;
class DECIMAL_INT_LITERALSubNode9;
class DECIMAL_INT_LITERALSubNode10;
class HEX_INT_LITERALSubNode11;
class HEX_INT_LITERALSubNode12;
class DECIMAL_FLOAT_LITERALSubNode13;
class DECIMAL_FLOAT_LITERALSubNode14;
class DECIMAL_FLOAT_LITERALSubNode15;
class DECIMAL_FLOAT_LITERALSubNode16;
class DECIMAL_FLOAT_LITERALSubNode17;
class DECIMAL_FLOAT_LITERALSubNode18;
class DECIMAL_FLOAT_LITERALSubNode20;
class DECIMAL_FLOAT_LITERALSubNode21;
class DECIMAL_FLOAT_LITERALSubNode19;
class DECIMAL_FLOAT_LITERALSubNode22;
class DECIMAL_FLOAT_LITERALSubNode23;
class DECIMAL_FLOAT_LITERALSubNode24;
class DECIMAL_FLOAT_LITERALSubNode25;
class DECIMAL_FLOAT_LITERALSubNode26;
class DECIMAL_FLOAT_LITERALSubNode28;
class DECIMAL_FLOAT_LITERALSubNode29;
class DECIMAL_FLOAT_LITERALSubNode27;
class DECIMAL_FLOAT_LITERALSubNode30;
class DECIMAL_FLOAT_LITERALSubNode31;
class DECIMAL_FLOAT_LITERALSubNode32;
class DECIMAL_FLOAT_LITERALSubNode33;
class DECIMAL_FLOAT_LITERALSubNode34;
class DECIMAL_FLOAT_LITERALSubNode35;
class DECIMAL_FLOAT_LITERALSubNode36;
class HEX_FLOAT_LITERALSubNode37;
class HEX_FLOAT_LITERALSubNode38;
class HEX_FLOAT_LITERALSubNode39;
class HEX_FLOAT_LITERALSubNode41;
class HEX_FLOAT_LITERALSubNode42;
class HEX_FLOAT_LITERALSubNode43;
class HEX_FLOAT_LITERALSubNode40;
class HEX_FLOAT_LITERALSubNode44;
class HEX_FLOAT_LITERALSubNode45;
class HEX_FLOAT_LITERALSubNode46;
class HEX_FLOAT_LITERALSubNode47;
class HEX_FLOAT_LITERALSubNode49;
class HEX_FLOAT_LITERALSubNode50;
class HEX_FLOAT_LITERALSubNode51;
class HEX_FLOAT_LITERALSubNode48;
class HEX_FLOAT_LITERALSubNode52;
class HEX_FLOAT_LITERALSubNode53;
class HEX_FLOAT_LITERALSubNode54;
class HEX_FLOAT_LITERALSubNode55;
class HEX_FLOAT_LITERALSubNode56;
class HEX_FLOAT_LITERALSubNode57;
class Diagnostic_rule_nameSubNode58;
class Template_arg_comma_listSubNode59;
class Template_arg_comma_listSubNode60;
class Template_arg_comma_listSubNode61;
class Align_attrSubNode62;
class Binding_attrSubNode63;
class Blend_src_attrSubNode64;
class Builtin_attrSubNode65;
class Group_attrSubNode66;
class Id_attrSubNode67;
class Interpolate_attrSubNode68;
class Interpolate_attrSubNode69;
class Interpolate_attrSubNode70;
class Interpolate_attrSubNode71;
class Location_attrSubNode72;
class Size_attrSubNode73;
class Workgroup_size_attrSubNode74;
class Workgroup_size_attrSubNode75;
class Workgroup_size_attrSubNode76;
class Workgroup_size_attrSubNode77;
class Workgroup_size_attrSubNode78;
class Workgroup_size_attrSubNode79;
class AttributeSubNode80;
class AttributeSubNode81;
class Diagnostic_controlSubNode82;
class Struct_body_declSubNode83;
class Struct_body_declSubNode84;
class Struct_body_declSubNode85;
class Struct_memberSubNode86;
class Template_elaborated_identSubNode87;
class Variable_or_value_statementSubNode88;
class Variable_or_value_statementSubNode89;
class Variable_or_value_statementSubNode90;
class Variable_declSubNode91;
class Optionally_typed_identSubNode92;
class Optionally_typed_identSubNode93;
class Global_variable_declSubNode94;
class Global_variable_declSubNode95;
class Global_variable_declSubNode96;
class Global_value_declSubNode97;
class Global_value_declSubNode98;
class Global_value_declSubNode99;
class Global_value_declSubNode100;
class Global_value_declSubNode101;
class Argument_expression_listSubNode102;
class Expression_comma_listSubNode103;
class Expression_comma_listSubNode104;
class Expression_comma_listSubNode105;
class Component_or_swizzle_specifierSubNode106;
class Component_or_swizzle_specifierSubNode107;
class Component_or_swizzle_specifierSubNode108;
class Component_or_swizzle_specifierSubNode109;
class Component_or_swizzle_specifierSubNode110;
class Component_or_swizzle_specifierSubNode111;
class Unary_expressionSubNode112;
class Unary_expressionSubNode113;
class Unary_expressionSubNode114;
class Unary_expressionSubNode115;
class Unary_expressionSubNode116;
class Singular_expressionSubNode117;
class Lhs_expressionSubNode118;
class Lhs_expressionSubNode119;
class Lhs_expressionSubNode120;
class Lhs_expressionSubNode121;
class Core_lhs_expressionSubNode122;
class Multiplicative_expressionSubNode123;
class Additive_expressionSubNode124;
class Shift_expressionSubNode125;
class Shift_expressionSubNode126;
class Relational_expressionSubNode127;
class Relational_expressionSubNode128;
class Relational_expressionSubNode129;
class Relational_expressionSubNode130;
class Relational_expressionSubNode131;
class Relational_expressionSubNode132;
class Short_circuit_and_expressionSubNode133;
class Short_circuit_or_expressionSubNode134;
class Binary_or_expressionSubNode135;
class Binary_and_expressionSubNode136;
class Binary_xor_expressionSubNode137;
class Bitwise_expressionSubNode138;
class Bitwise_expressionSubNode139;
class Bitwise_expressionSubNode140;
class ExpressionSubNode141;
class ExpressionSubNode142;
class Compound_statementSubNode143;
class Compound_statementSubNode144;
class Assignment_statementSubNode145;
class Assignment_statementSubNode146;
class Assignment_statementSubNode147;
class If_statementSubNode148;
class If_statementSubNode149;
class If_statementSubNode150;
class Switch_statementSubNode151;
class Switch_bodySubNode152;
class Switch_bodySubNode153;
class Case_clauseSubNode154;
class Default_alone_clauseSubNode155;
class Case_selectorsSubNode156;
class Case_selectorsSubNode157;
class Case_selectorsSubNode158;
class Loop_statementSubNode159;
class Loop_statementSubNode160;
class Loop_statementSubNode161;
class Loop_statementSubNode162;
class For_statementSubNode163;
class For_headerSubNode164;
class For_headerSubNode165;
class For_headerSubNode166;
class While_statementSubNode167;
class Continuing_compound_statementSubNode168;
class Continuing_compound_statementSubNode169;
class Continuing_compound_statementSubNode170;
class Return_statementSubNode171;
class StatementSubNode172;
class StatementSubNode173;
class StatementSubNode174;
class StatementSubNode175;
class StatementSubNode176;
class StatementSubNode177;
class StatementSubNode178;
class StatementSubNode179;
class Function_declSubNode180;
class Function_headerSubNode181;
class Function_headerSubNode182;
class Function_headerSubNode184;
class Function_headerSubNode183;
class Param_listSubNode185;
class Param_listSubNode186;
class Param_listSubNode187;
class ParamSubNode188;
class Enable_extension_listSubNode189;
class Enable_extension_listSubNode190;
class Enable_extension_listSubNode191;
class Software_extension_listSubNode192;
class Software_extension_listSubNode193;
class Software_extension_listSubNode194;
class IDENT_PATTERN_TOKENSubNode196;
class IDENT_PATTERN_TOKENSubNode195;
class IDENT_PATTERN_TOKENSubNode197;
class SWIZZLE_NAMESubNode198;
class SWIZZLE_NAMESubNode199;
class SWIZZLE_NAMESubNode200;
class SWIZZLE_NAMESubNode201;
class SWIZZLE_NAMESubNode202;
class SWIZZLE_NAMESubNode203;
class WhitespaceSubNode204;
class EOFNode;
class Literal0;
class Literal76;
class Literal80;
class Literal88;
class Literal34;
class Literal47;
class Literal78;
class Literal81;
class Literal48;
class Literal9;
class Literal10;
class Literal32;
class Literal45;
class Literal35;
class Literal51;
class Literal43;
class Literal24;
class Literal36;
class Literal52;
class Literal44;
class Literal87;
class Literal69;
class Literal33;
class Literal46;
class Literal28;
class Literal1;
class Literal5;
class Literal37;
class Literal42;
class Literal39;
class Literal30;
class Literal79;
class Literal6;
class Literal40;
class Literal38;
class Literal41;
class Literal7;
class Literal74;
class Literal75;
class Literal84;
class Literal50;
class Literal85;
class Literal29;
class Literal8;
class Literal11;
class Literal12;
class Literal61;
class Literal13;
class Literal56;
class Literal23;
class Literal14;
class Literal65;
class Literal62;
class Literal63;
class Literal57;
class Literal4;
class Literal86;
class Literal54;
class Literal67;
class Literal3;
class Literal66;
class Literal59;
class Literal22;
class Literal15;
class Literal16;
class Literal53;
class Literal70;
class Literal17;
class Literal72;
class Literal18;
class Literal58;
class Literal19;
class Literal73;
class Literal68;
class Literal64;
class Literal20;
class Literal25;
class Literal55;
class Literal2;
class Literal31;
class Literal21;
class Literal60;
class Literal71;
class Literal26;
class Literal83;
class Literal49;
class Literal82;
class Literal27;
class Literal77;
class CharSet16;
class CharSet9;
class CharSet11;
class CharSet5;
class CharSet7;
class CharSet0;
class CharSet6;
class CharSet13;
class CharSet14;
class CharSet15;
class CharSet10;
class CharSet8;
class CharSet4;
class CharSet12;
class CharSet2;
class CharSet1;
class CharSet3;

inline constexpr absl::string_view kStrLiteral0 = " ";
inline constexpr absl::string_view kStrLiteral76 = "!";
inline constexpr absl::string_view kStrLiteral80 = "!=";
inline constexpr absl::string_view kStrLiteral88 = "";
inline constexpr absl::string_view kStrLiteral34 = "%";
inline constexpr absl::string_view kStrLiteral47 = "%=";
inline constexpr absl::string_view kStrLiteral78 = "&";
inline constexpr absl::string_view kStrLiteral81 = "&&";
inline constexpr absl::string_view kStrLiteral48 = "&=";
inline constexpr absl::string_view kStrLiteral9 = "(";
inline constexpr absl::string_view kStrLiteral10 = ")";
inline constexpr absl::string_view kStrLiteral32 = "*";
inline constexpr absl::string_view kStrLiteral45 = "*=";
inline constexpr absl::string_view kStrLiteral35 = "+";
inline constexpr absl::string_view kStrLiteral51 = "++";
inline constexpr absl::string_view kStrLiteral43 = "+=";
inline constexpr absl::string_view kStrLiteral24 = ",";
inline constexpr absl::string_view kStrLiteral36 = "-";
inline constexpr absl::string_view kStrLiteral52 = "--";
inline constexpr absl::string_view kStrLiteral44 = "-=";
inline constexpr absl::string_view kStrLiteral87 = "->";
inline constexpr absl::string_view kStrLiteral69 = ".";
inline constexpr absl::string_view kStrLiteral33 = "/";
inline constexpr absl::string_view kStrLiteral46 = "/=";
inline constexpr absl::string_view kStrLiteral28 = ":";
inline constexpr absl::string_view kStrLiteral1 = ";";
inline constexpr absl::string_view kStrLiteral5 = "<";
inline constexpr absl::string_view kStrLiteral37 = "<<";
inline constexpr absl::string_view kStrLiteral42 = "<<=";
inline constexpr absl::string_view kStrLiteral39 = "<=";
inline constexpr absl::string_view kStrLiteral30 = "=";
inline constexpr absl::string_view kStrLiteral79 = "==";
inline constexpr absl::string_view kStrLiteral6 = ">";
inline constexpr absl::string_view kStrLiteral40 = ">=";
inline constexpr absl::string_view kStrLiteral38 = ">>";
inline constexpr absl::string_view kStrLiteral41 = ">>=";
inline constexpr absl::string_view kStrLiteral7 = "@";
inline constexpr absl::string_view kStrLiteral74 = "[";
inline constexpr absl::string_view kStrLiteral75 = "]";
inline constexpr absl::string_view kStrLiteral84 = "^";
inline constexpr absl::string_view kStrLiteral50 = "^=";
inline constexpr absl::string_view kStrLiteral85 = "_";
inline constexpr absl::string_view kStrLiteral29 = "alias";
inline constexpr absl::string_view kStrLiteral8 = "align";
inline constexpr absl::string_view kStrLiteral11 = "binding";
inline constexpr absl::string_view kStrLiteral12 = "blend_src";
inline constexpr absl::string_view kStrLiteral61 = "break";
inline constexpr absl::string_view kStrLiteral13 = "builtin";
inline constexpr absl::string_view kStrLiteral56 = "case";
inline constexpr absl::string_view kStrLiteral23 = "compute";
inline constexpr absl::string_view kStrLiteral14 = "const";
inline constexpr absl::string_view kStrLiteral65 = "const_assert";
inline constexpr absl::string_view kStrLiteral62 = "continue";
inline constexpr absl::string_view kStrLiteral63 = "continuing";
inline constexpr absl::string_view kStrLiteral57 = "default";
inline constexpr absl::string_view kStrLiteral4 = "diagnostic";
inline constexpr absl::string_view kStrLiteral86 = "discard";
inline constexpr absl::string_view kStrLiteral54 = "else";
inline constexpr absl::string_view kStrLiteral67 = "enable";
inline constexpr absl::string_view kStrLiteral3 = "false";
inline constexpr absl::string_view kStrLiteral66 = "fn";
inline constexpr absl::string_view kStrLiteral59 = "for";
inline constexpr absl::string_view kStrLiteral22 = "fragment";
inline constexpr absl::string_view kStrLiteral15 = "group";
inline constexpr absl::string_view kStrLiteral16 = "id";
inline constexpr absl::string_view kStrLiteral53 = "if";
inline constexpr absl::string_view kStrLiteral70 = "interpolate";
inline constexpr absl::string_view kStrLiteral17 = "invariant";
inline constexpr absl::string_view kStrLiteral72 = "let";
inline constexpr absl::string_view kStrLiteral18 = "location";
inline constexpr absl::string_view kStrLiteral58 = "loop";
inline constexpr absl::string_view kStrLiteral19 = "must_use";
inline constexpr absl::string_view kStrLiteral73 = "override";
inline constexpr absl::string_view kStrLiteral68 = "requires";
inline constexpr absl::string_view kStrLiteral64 = "return";
inline constexpr absl::string_view kStrLiteral20 = "size";
inline constexpr absl::string_view kStrLiteral25 = "struct";
inline constexpr absl::string_view kStrLiteral55 = "switch";
inline constexpr absl::string_view kStrLiteral2 = "true";
inline constexpr absl::string_view kStrLiteral31 = "var";
inline constexpr absl::string_view kStrLiteral21 = "vertex";
inline constexpr absl::string_view kStrLiteral60 = "while";
inline constexpr absl::string_view kStrLiteral71 = "workgroup_size";
inline constexpr absl::string_view kStrLiteral26 = "{";
inline constexpr absl::string_view kStrLiteral83 = "|";
inline constexpr absl::string_view kStrLiteral49 = "|=";
inline constexpr absl::string_view kStrLiteral82 = "||";
inline constexpr absl::string_view kStrLiteral27 = "}";
inline constexpr absl::string_view kStrLiteral77 = "~";
inline constexpr absl::string_view kStrCharSet16 = R"grammar([ \t])grammar";
inline constexpr absl::string_view kStrCharSet9 = R"grammar([+-])grammar";
inline constexpr absl::string_view kStrCharSet11 = R"grammar([.])grammar";
inline constexpr absl::string_view kStrCharSet5 = R"grammar([0-9])grammar";
inline constexpr absl::string_view kStrCharSet7 =
    R"grammar([0-9a-fA-F])grammar";
inline constexpr absl::string_view kStrCharSet0 = R"grammar([0])grammar";
inline constexpr absl::string_view kStrCharSet6 = R"grammar([1-9])grammar";
inline constexpr absl::string_view kStrCharSet13 =
    R"grammar([_0-9A-Za-z])grammar";
inline constexpr absl::string_view kStrCharSet14 = R"grammar([_a-zA-Z])grammar";
inline constexpr absl::string_view kStrCharSet15 = R"grammar([a-zA-Z])grammar";
inline constexpr absl::string_view kStrCharSet10 = R"grammar([eE])grammar";
inline constexpr absl::string_view kStrCharSet8 = R"grammar([fh])grammar";
inline constexpr absl::string_view kStrCharSet4 = R"grammar([iu])grammar";
inline constexpr absl::string_view kStrCharSet12 = R"grammar([pP])grammar";
inline constexpr absl::string_view kStrCharSet2 = R"grammar([rgba])grammar";
inline constexpr absl::string_view kStrCharSet1 = R"grammar([xX])grammar";
inline constexpr absl::string_view kStrCharSet3 = R"grammar([xyzw])grammar";

class WgslNode final : public TupleDomain<kWgslNode, Translation_unitNode> {};
class Translation_unitNode final : public TupleDomain<kTranslation_unitNode,
                                                      Translation_unitSubNode0,
                                                      Literal0,
                                                      Translation_unitSubNode1,
                                                      Literal0,
                                                      EOFNode> {};
class Global_directiveNode final
    : public VariantDomain<kGlobal_directiveNode,
                           0,
                           Diagnostic_directiveNode,
                           Enable_directiveNode,
                           Requires_directiveNode> {};
class Global_declNode final : public VariantDomain<kGlobal_declNode,
                                                   0,
                                                   Global_declSubNode3,
                                                   Global_declSubNode4,
                                                   Global_declSubNode5,
                                                   Struct_declNode,
                                                   Function_declNode> {};
class Global_assertNode final : public TupleDomain<kGlobal_assertNode,
                                                   Const_assertNode,
                                                   Literal0,
                                                   Literal1> {};
class Bool_literalNode final
    : public VariantDomain<kBool_literalNode, 0, Literal2, Literal3> {};
class Int_literalNode final : public VariantDomain<kInt_literalNode,
                                                   0,
                                                   DECIMAL_INT_LITERALNode,
                                                   HEX_INT_LITERALNode> {};
class DECIMAL_INT_LITERALNode final
    : public VariantDomain<kDECIMAL_INT_LITERALNode,
                           0,
                           DECIMAL_INT_LITERALSubNode7,
                           DECIMAL_INT_LITERALSubNode10> {};
class HEX_INT_LITERALNode final : public TupleDomain<kHEX_INT_LITERALNode,
                                                     CharSet0,
                                                     CharSet1,
                                                     HEX_INT_LITERALSubNode11,
                                                     HEX_INT_LITERALSubNode12> {
};
class Float_literalNode final : public VariantDomain<kFloat_literalNode,
                                                     0,
                                                     DECIMAL_FLOAT_LITERALNode,
                                                     HEX_FLOAT_LITERALNode> {};
class DECIMAL_FLOAT_LITERALNode final
    : public VariantDomain<kDECIMAL_FLOAT_LITERALNode,
                           0,
                           DECIMAL_FLOAT_LITERALSubNode13,
                           DECIMAL_FLOAT_LITERALSubNode15,
                           DECIMAL_FLOAT_LITERALSubNode23,
                           DECIMAL_FLOAT_LITERALSubNode31,
                           DECIMAL_FLOAT_LITERALSubNode36> {};
class HEX_FLOAT_LITERALNode final
    : public VariantDomain<kHEX_FLOAT_LITERALNode,
                           0,
                           HEX_FLOAT_LITERALSubNode44,
                           HEX_FLOAT_LITERALSubNode52,
                           HEX_FLOAT_LITERALSubNode57> {};
class Diagnostic_directiveNode final
    : public TupleDomain<kDiagnostic_directiveNode,
                         Literal4,
                         Literal0,
                         Diagnostic_controlNode,
                         Literal0,
                         Literal1> {};
class LiteralNode final : public VariantDomain<kLiteralNode,
                                               2,
                                               Int_literalNode,
                                               Float_literalNode,
                                               Bool_literalNode> {};
class IdentNode final
    : public TupleDomain<kIdentNode, IDENT_PATTERN_TOKENNode> {};
class Member_identNode final
    : public TupleDomain<kMember_identNode, IDENT_PATTERN_TOKENNode> {};
class Diagnostic_name_tokenNode final
    : public TupleDomain<kDiagnostic_name_tokenNode, IDENT_PATTERN_TOKENNode> {
};
class Diagnostic_rule_nameNode final
    : public VariantDomain<kDiagnostic_rule_nameNode,
                           0,
                           Diagnostic_name_tokenNode,
                           Diagnostic_rule_nameSubNode58> {};
class Template_args_startNode final
    : public TupleDomain<kTemplate_args_startNode, Literal5> {};
class Template_args_endNode final
    : public TupleDomain<kTemplate_args_endNode, Literal6> {};
class Template_listNode final : public TupleDomain<kTemplate_listNode,
                                                   Template_args_startNode,
                                                   Literal0,
                                                   Template_arg_comma_listNode,
                                                   Literal0,
                                                   Template_args_endNode> {};
class Template_arg_comma_listNode final
    : public TupleDomain<kTemplate_arg_comma_listNode,
                         Template_arg_expressionNode,
                         Literal0,
                         Template_arg_comma_listSubNode59,
                         Literal0,
                         Template_arg_comma_listSubNode61> {};
class Template_arg_expressionNode final
    : public TupleDomain<kTemplate_arg_expressionNode, ExpressionNode> {};
class Align_attrNode final : public TupleDomain<kAlign_attrNode,
                                                Literal7,
                                                Literal0,
                                                Literal8,
                                                Literal0,
                                                Literal9,
                                                Literal0,
                                                ExpressionNode,
                                                Literal0,
                                                Align_attrSubNode62,
                                                Literal0,
                                                Literal10> {};
class Binding_attrNode final : public TupleDomain<kBinding_attrNode,
                                                  Literal7,
                                                  Literal0,
                                                  Literal11,
                                                  Literal0,
                                                  Literal9,
                                                  Literal0,
                                                  ExpressionNode,
                                                  Literal0,
                                                  Binding_attrSubNode63,
                                                  Literal0,
                                                  Literal10> {};
class Blend_src_attrNode final : public TupleDomain<kBlend_src_attrNode,
                                                    Literal7,
                                                    Literal0,
                                                    Literal12,
                                                    Literal0,
                                                    Literal9,
                                                    Literal0,
                                                    ExpressionNode,
                                                    Literal0,
                                                    Blend_src_attrSubNode64,
                                                    Literal0,
                                                    Literal10> {};
class Builtin_attrNode final : public TupleDomain<kBuiltin_attrNode,
                                                  Literal7,
                                                  Literal0,
                                                  Literal13,
                                                  Literal0,
                                                  Literal9,
                                                  Literal0,
                                                  Builtin_value_nameNode,
                                                  Literal0,
                                                  Builtin_attrSubNode65,
                                                  Literal0,
                                                  Literal10> {};
class Builtin_value_nameNode final
    : public TupleDomain<kBuiltin_value_nameNode, IDENT_PATTERN_TOKENNode> {};
class Const_attrNode final
    : public TupleDomain<kConst_attrNode, Literal7, Literal0, Literal14> {};
class Diagnostic_attrNode final : public TupleDomain<kDiagnostic_attrNode,
                                                     Literal7,
                                                     Literal0,
                                                     Literal4,
                                                     Literal0,
                                                     Diagnostic_controlNode> {};
class Group_attrNode final : public TupleDomain<kGroup_attrNode,
                                                Literal7,
                                                Literal0,
                                                Literal15,
                                                Literal0,
                                                Literal9,
                                                Literal0,
                                                ExpressionNode,
                                                Literal0,
                                                Group_attrSubNode66,
                                                Literal0,
                                                Literal10> {};
class Id_attrNode final : public TupleDomain<kId_attrNode,
                                             Literal7,
                                             Literal0,
                                             Literal16,
                                             Literal0,
                                             Literal9,
                                             Literal0,
                                             ExpressionNode,
                                             Literal0,
                                             Id_attrSubNode67,
                                             Literal0,
                                             Literal10> {};
class Interpolate_attrNode final
    : public VariantDomain<kInterpolate_attrNode,
                           0,
                           Interpolate_attrSubNode69,
                           Interpolate_attrSubNode71> {};
class Interpolate_type_nameNode final
    : public TupleDomain<kInterpolate_type_nameNode, IDENT_PATTERN_TOKENNode> {
};
class Interpolate_sampling_nameNode final
    : public TupleDomain<kInterpolate_sampling_nameNode,
                         IDENT_PATTERN_TOKENNode> {};
class Invariant_attrNode final
    : public TupleDomain<kInvariant_attrNode, Literal7, Literal0, Literal17> {};
class Location_attrNode final : public TupleDomain<kLocation_attrNode,
                                                   Literal7,
                                                   Literal0,
                                                   Literal18,
                                                   Literal0,
                                                   Literal9,
                                                   Literal0,
                                                   ExpressionNode,
                                                   Literal0,
                                                   Location_attrSubNode72,
                                                   Literal0,
                                                   Literal10> {};
class Must_use_attrNode final
    : public TupleDomain<kMust_use_attrNode, Literal7, Literal0, Literal19> {};
class Size_attrNode final : public TupleDomain<kSize_attrNode,
                                               Literal7,
                                               Literal0,
                                               Literal20,
                                               Literal0,
                                               Literal9,
                                               Literal0,
                                               ExpressionNode,
                                               Literal0,
                                               Size_attrSubNode73,
                                               Literal0,
                                               Literal10> {};
class Workgroup_size_attrNode final
    : public VariantDomain<kWorkgroup_size_attrNode,
                           0,
                           Workgroup_size_attrSubNode75,
                           Workgroup_size_attrSubNode77,
                           Workgroup_size_attrSubNode79> {};
class Vertex_attrNode final
    : public TupleDomain<kVertex_attrNode, Literal7, Literal0, Literal21> {};
class Fragment_attrNode final
    : public TupleDomain<kFragment_attrNode, Literal7, Literal0, Literal22> {};
class Compute_attrNode final
    : public TupleDomain<kCompute_attrNode, Literal7, Literal0, Literal23> {};
class AttributeNode final : public VariantDomain<kAttributeNode,
                                                 5,
                                                 AttributeSubNode81,
                                                 Align_attrNode,
                                                 Binding_attrNode,
                                                 Blend_src_attrNode,
                                                 Builtin_attrNode,
                                                 Const_attrNode,
                                                 Diagnostic_attrNode,
                                                 Group_attrNode,
                                                 Id_attrNode,
                                                 Interpolate_attrNode,
                                                 Invariant_attrNode,
                                                 Location_attrNode,
                                                 Must_use_attrNode,
                                                 Size_attrNode,
                                                 Workgroup_size_attrNode,
                                                 Vertex_attrNode,
                                                 Fragment_attrNode,
                                                 Compute_attrNode> {};
class Diagnostic_controlNode final
    : public TupleDomain<kDiagnostic_controlNode,
                         Literal9,
                         Literal0,
                         Severity_control_nameNode,
                         Literal0,
                         Literal24,
                         Literal0,
                         Diagnostic_rule_nameNode,
                         Literal0,
                         Diagnostic_controlSubNode82,
                         Literal0,
                         Literal10> {};
class Struct_declNode final : public TupleDomain<kStruct_declNode,
                                                 Literal25,
                                                 Literal0,
                                                 IdentNode,
                                                 Literal0,
                                                 Struct_body_declNode> {};
class Struct_body_declNode final : public TupleDomain<kStruct_body_declNode,
                                                      Literal26,
                                                      Literal0,
                                                      Struct_memberNode,
                                                      Literal0,
                                                      Struct_body_declSubNode83,
                                                      Literal0,
                                                      Struct_body_declSubNode85,
                                                      Literal0,
                                                      Literal27> {};
class Struct_memberNode final : public TupleDomain<kStruct_memberNode,
                                                   Struct_memberSubNode86,
                                                   Literal0,
                                                   Member_identNode,
                                                   Literal0,
                                                   Literal28,
                                                   Literal0,
                                                   Type_specifierNode> {};
class Type_alias_declNode final : public TupleDomain<kType_alias_declNode,
                                                     Literal29,
                                                     Literal0,
                                                     IdentNode,
                                                     Literal0,
                                                     Literal30,
                                                     Literal0,
                                                     Type_specifierNode> {};
class Type_specifierNode final
    : public TupleDomain<kType_specifierNode, Template_elaborated_identNode> {};
class Template_elaborated_identNode final
    : public TupleDomain<kTemplate_elaborated_identNode,
                         IdentNode,
                         Literal0,
                         Template_elaborated_identSubNode87> {};
class Variable_or_value_statementNode final
    : public VariantDomain<kVariable_or_value_statementNode,
                           2,
                           Variable_declNode,
                           Variable_or_value_statementSubNode88,
                           Variable_or_value_statementSubNode89,
                           Variable_or_value_statementSubNode90> {};
class Variable_declNode final : public TupleDomain<kVariable_declNode,
                                                   Literal31,
                                                   Literal0,
                                                   Variable_declSubNode91,
                                                   Literal0,
                                                   Optionally_typed_identNode> {
};
class Optionally_typed_identNode final
    : public TupleDomain<kOptionally_typed_identNode,
                         IdentNode,
                         Literal0,
                         Optionally_typed_identSubNode92> {};
class Global_variable_declNode final
    : public TupleDomain<kGlobal_variable_declNode,
                         Global_variable_declSubNode94,
                         Literal0,
                         Variable_declNode,
                         Literal0,
                         Global_variable_declSubNode95> {};
class Global_value_declNode final
    : public VariantDomain<kGlobal_value_declNode,
                           0,
                           Global_value_declSubNode97,
                           Global_value_declSubNode101> {};
class Primary_expressionNode final
    : public VariantDomain<kPrimary_expressionNode,
                           2,
                           Template_elaborated_identNode,
                           Call_expressionNode,
                           LiteralNode,
                           Paren_expressionNode> {};
class Call_expressionNode final
    : public TupleDomain<kCall_expressionNode, Call_phraseNode> {};
class Call_phraseNode final : public TupleDomain<kCall_phraseNode,
                                                 Template_elaborated_identNode,
                                                 Literal0,
                                                 Argument_expression_listNode> {
};
class Paren_expressionNode final : public TupleDomain<kParen_expressionNode,
                                                      Literal9,
                                                      Literal0,
                                                      ExpressionNode,
                                                      Literal0,
                                                      Literal10> {};
class Argument_expression_listNode final
    : public TupleDomain<kArgument_expression_listNode,
                         Literal9,
                         Literal0,
                         Argument_expression_listSubNode102,
                         Literal0,
                         Literal10> {};
class Expression_comma_listNode final
    : public TupleDomain<kExpression_comma_listNode,
                         ExpressionNode,
                         Literal0,
                         Expression_comma_listSubNode103,
                         Literal0,
                         Expression_comma_listSubNode105> {};
class Component_or_swizzle_specifierNode final
    : public VariantDomain<kComponent_or_swizzle_specifierNode,
                           2,
                           Component_or_swizzle_specifierSubNode107,
                           Component_or_swizzle_specifierSubNode109,
                           Component_or_swizzle_specifierSubNode111> {};
class Unary_expressionNode final
    : public VariantDomain<kUnary_expressionNode,
                           0,
                           Singular_expressionNode,
                           Unary_expressionSubNode112,
                           Unary_expressionSubNode113,
                           Unary_expressionSubNode114,
                           Unary_expressionSubNode115,
                           Unary_expressionSubNode116> {};
class Singular_expressionNode final
    : public TupleDomain<kSingular_expressionNode,
                         Primary_expressionNode,
                         Literal0,
                         Singular_expressionSubNode117> {};
class Lhs_expressionNode final
    : public VariantDomain<kLhs_expressionNode,
                           0,
                           Lhs_expressionSubNode119,
                           Lhs_expressionSubNode120,
                           Lhs_expressionSubNode121> {};
class Core_lhs_expressionNode final
    : public VariantDomain<kCore_lhs_expressionNode,
                           0,
                           IdentNode,
                           Core_lhs_expressionSubNode122> {};
class Multiplicative_expressionNode final
    : public VariantDomain<kMultiplicative_expressionNode,
                           0,
                           Unary_expressionNode,
                           Multiplicative_expressionSubNode123> {};
class Multiplicative_operatorNode final
    : public VariantDomain<kMultiplicative_operatorNode,
                           0,
                           Literal32,
                           Literal33,
                           Literal34> {};
class Additive_expressionNode final
    : public VariantDomain<kAdditive_expressionNode,
                           0,
                           Multiplicative_expressionNode,
                           Additive_expressionSubNode124> {};
class Additive_operatorNode final
    : public VariantDomain<kAdditive_operatorNode, 0, Literal35, Literal36> {};
class Shift_leftNode final : public TupleDomain<kShift_leftNode, Literal37> {};
class Shift_rightNode final : public TupleDomain<kShift_rightNode, Literal38> {
};
class Less_thanNode final : public TupleDomain<kLess_thanNode, Literal5> {};
class Greater_thanNode final : public TupleDomain<kGreater_thanNode, Literal6> {
};
class Less_than_equalNode final
    : public TupleDomain<kLess_than_equalNode, Literal39> {};
class Greater_than_equalNode final
    : public TupleDomain<kGreater_than_equalNode, Literal40> {};
class Shift_expressionNode final
    : public VariantDomain<kShift_expressionNode,
                           0,
                           Additive_expressionNode,
                           Shift_expressionSubNode125,
                           Shift_expressionSubNode126> {};
class Relational_expressionNode final
    : public VariantDomain<kRelational_expressionNode,
                           0,
                           Shift_expressionNode,
                           Relational_expressionSubNode127,
                           Relational_expressionSubNode128,
                           Relational_expressionSubNode129,
                           Relational_expressionSubNode130,
                           Relational_expressionSubNode131,
                           Relational_expressionSubNode132> {};
class Short_circuit_and_expressionNode final
    : public VariantDomain<kShort_circuit_and_expressionNode,
                           0,
                           Relational_expressionNode,
                           Short_circuit_and_expressionSubNode133> {};
class Short_circuit_or_expressionNode final
    : public VariantDomain<kShort_circuit_or_expressionNode,
                           0,
                           Relational_expressionNode,
                           Short_circuit_or_expressionSubNode134> {};
class Binary_or_expressionNode final
    : public VariantDomain<kBinary_or_expressionNode,
                           0,
                           Unary_expressionNode,
                           Binary_or_expressionSubNode135> {};
class Binary_and_expressionNode final
    : public VariantDomain<kBinary_and_expressionNode,
                           0,
                           Unary_expressionNode,
                           Binary_and_expressionSubNode136> {};
class Binary_xor_expressionNode final
    : public VariantDomain<kBinary_xor_expressionNode,
                           0,
                           Unary_expressionNode,
                           Binary_xor_expressionSubNode137> {};
class Bitwise_expressionNode final
    : public VariantDomain<kBitwise_expressionNode,
                           0,
                           Bitwise_expressionSubNode138,
                           Bitwise_expressionSubNode139,
                           Bitwise_expressionSubNode140> {};
class ExpressionNode final : public VariantDomain<kExpressionNode,
                                                  0,
                                                  Relational_expressionNode,
                                                  ExpressionSubNode141,
                                                  ExpressionSubNode142,
                                                  Bitwise_expressionNode> {};
class Compound_statementNode final
    : public TupleDomain<kCompound_statementNode,
                         Compound_statementSubNode143,
                         Literal0,
                         Literal26,
                         Literal0,
                         Compound_statementSubNode144,
                         Literal0,
                         Literal27> {};
class Assignment_statementNode final
    : public VariantDomain<kAssignment_statementNode,
                           1,
                           Assignment_statementSubNode146,
                           Assignment_statementSubNode147> {};
class Shift_right_assignNode final
    : public TupleDomain<kShift_right_assignNode, Literal41> {};
class Shift_left_assignNode final
    : public TupleDomain<kShift_left_assignNode, Literal42> {};
class Compound_assignment_operatorNode final
    : public VariantDomain<kCompound_assignment_operatorNode,
                           0,
                           Literal43,
                           Literal44,
                           Literal45,
                           Literal46,
                           Literal47,
                           Literal48,
                           Literal49,
                           Literal50,
                           Shift_right_assignNode,
                           Shift_left_assignNode> {};
class Increment_statementNode final
    : public TupleDomain<kIncrement_statementNode,
                         Lhs_expressionNode,
                         Literal0,
                         Literal51> {};
class Decrement_statementNode final
    : public TupleDomain<kDecrement_statementNode,
                         Lhs_expressionNode,
                         Literal0,
                         Literal52> {};
class If_statementNode final : public TupleDomain<kIf_statementNode,
                                                  If_statementSubNode148,
                                                  Literal0,
                                                  If_clauseNode,
                                                  Literal0,
                                                  If_statementSubNode149,
                                                  Literal0,
                                                  If_statementSubNode150> {};
class If_clauseNode final : public TupleDomain<kIf_clauseNode,
                                               Literal53,
                                               Literal0,
                                               ExpressionNode,
                                               Literal0,
                                               Compound_statementNode> {};
class Else_if_clauseNode final : public TupleDomain<kElse_if_clauseNode,
                                                    Literal54,
                                                    Literal0,
                                                    Literal53,
                                                    Literal0,
                                                    ExpressionNode,
                                                    Literal0,
                                                    Compound_statementNode> {};
class Else_clauseNode final : public TupleDomain<kElse_clauseNode,
                                                 Literal54,
                                                 Literal0,
                                                 Compound_statementNode> {};
class Switch_statementNode final
    : public TupleDomain<kSwitch_statementNode,
                         Switch_statementSubNode151,
                         Literal0,
                         Literal55,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Switch_bodyNode> {};
class Switch_bodyNode final : public TupleDomain<kSwitch_bodyNode,
                                                 Switch_bodySubNode152,
                                                 Literal0,
                                                 Literal26,
                                                 Literal0,
                                                 Switch_bodySubNode153,
                                                 Literal0,
                                                 Literal27> {};
class Switch_clauseNode final : public VariantDomain<kSwitch_clauseNode,
                                                     1,
                                                     Case_clauseNode,
                                                     Default_alone_clauseNode> {
};
class Case_clauseNode final : public TupleDomain<kCase_clauseNode,
                                                 Literal56,
                                                 Literal0,
                                                 Case_selectorsNode,
                                                 Literal0,
                                                 Case_clauseSubNode154,
                                                 Literal0,
                                                 Compound_statementNode> {};
class Default_alone_clauseNode final
    : public TupleDomain<kDefault_alone_clauseNode,
                         Literal57,
                         Literal0,
                         Default_alone_clauseSubNode155,
                         Literal0,
                         Compound_statementNode> {};
class Case_selectorsNode final : public TupleDomain<kCase_selectorsNode,
                                                    Case_selectorNode,
                                                    Literal0,
                                                    Case_selectorsSubNode156,
                                                    Literal0,
                                                    Case_selectorsSubNode158> {
};
class Case_selectorNode final
    : public VariantDomain<kCase_selectorNode, 0, Literal57, ExpressionNode> {};
class Loop_statementNode final : public TupleDomain<kLoop_statementNode,
                                                    Loop_statementSubNode159,
                                                    Literal0,
                                                    Literal58,
                                                    Literal0,
                                                    Loop_statementSubNode160,
                                                    Literal0,
                                                    Literal26,
                                                    Literal0,
                                                    Loop_statementSubNode161,
                                                    Literal0,
                                                    Loop_statementSubNode162,
                                                    Literal0,
                                                    Literal27> {};
class For_statementNode final : public TupleDomain<kFor_statementNode,
                                                   For_statementSubNode163,
                                                   Literal0,
                                                   Literal59,
                                                   Literal0,
                                                   Literal9,
                                                   Literal0,
                                                   For_headerNode,
                                                   Literal0,
                                                   Literal10,
                                                   Literal0,
                                                   Compound_statementNode> {};
class For_headerNode final : public TupleDomain<kFor_headerNode,
                                                For_headerSubNode164,
                                                Literal0,
                                                Literal1,
                                                Literal0,
                                                For_headerSubNode165,
                                                Literal0,
                                                Literal1,
                                                Literal0,
                                                For_headerSubNode166> {};
class For_initNode final : public VariantDomain<kFor_initNode,
                                                0,
                                                Variable_or_value_statementNode,
                                                Variable_updating_statementNode,
                                                Func_call_statementNode> {};
class For_updateNode final
    : public VariantDomain<kFor_updateNode,
                           1,
                           Variable_updating_statementNode,
                           Func_call_statementNode> {};
class While_statementNode final : public TupleDomain<kWhile_statementNode,
                                                     While_statementSubNode167,
                                                     Literal0,
                                                     Literal60,
                                                     Literal0,
                                                     ExpressionNode,
                                                     Literal0,
                                                     Compound_statementNode> {};
class Break_statementNode final
    : public TupleDomain<kBreak_statementNode, Literal61> {};
class Break_if_statementNode final : public TupleDomain<kBreak_if_statementNode,
                                                        Literal61,
                                                        Literal0,
                                                        Literal53,
                                                        Literal0,
                                                        ExpressionNode,
                                                        Literal0,
                                                        Literal1> {};
class Continue_statementNode final
    : public TupleDomain<kContinue_statementNode, Literal62> {};
class Continuing_statementNode final
    : public TupleDomain<kContinuing_statementNode,
                         Literal63,
                         Literal0,
                         Continuing_compound_statementNode> {};
class Continuing_compound_statementNode final
    : public TupleDomain<kContinuing_compound_statementNode,
                         Continuing_compound_statementSubNode168,
                         Literal0,
                         Literal26,
                         Literal0,
                         Continuing_compound_statementSubNode169,
                         Literal0,
                         Continuing_compound_statementSubNode170,
                         Literal0,
                         Literal27> {};
class Return_statementNode final
    : public TupleDomain<kReturn_statementNode,
                         Literal64,
                         Literal0,
                         Return_statementSubNode171> {};
class Func_call_statementNode final
    : public TupleDomain<kFunc_call_statementNode, Call_phraseNode> {};
class Const_assertNode final : public TupleDomain<kConst_assertNode,
                                                  Literal65,
                                                  Literal0,
                                                  ExpressionNode> {};
class Assert_statementNode final
    : public TupleDomain<kAssert_statementNode, Const_assertNode> {};
class StatementNode final : public VariantDomain<kStatementNode,
                                                 0,
                                                 Literal1,
                                                 StatementSubNode172,
                                                 If_statementNode,
                                                 Switch_statementNode,
                                                 Loop_statementNode,
                                                 For_statementNode,
                                                 While_statementNode,
                                                 StatementSubNode173,
                                                 StatementSubNode174,
                                                 StatementSubNode175,
                                                 StatementSubNode176,
                                                 StatementSubNode177,
                                                 StatementSubNode178,
                                                 Compound_statementNode,
                                                 StatementSubNode179> {};
class Variable_updating_statementNode final
    : public VariantDomain<kVariable_updating_statementNode,
                           0,
                           Assignment_statementNode,
                           Increment_statementNode,
                           Decrement_statementNode> {};
class Function_declNode final : public TupleDomain<kFunction_declNode,
                                                   Function_declSubNode180,
                                                   Literal0,
                                                   Function_headerNode,
                                                   Literal0,
                                                   Compound_statementNode> {};
class Function_headerNode final
    : public TupleDomain<kFunction_headerNode,
                         Literal66,
                         Literal0,
                         IdentNode,
                         Literal0,
                         Literal9,
                         Literal0,
                         Function_headerSubNode181,
                         Literal0,
                         Literal10,
                         Literal0,
                         Function_headerSubNode182> {};
class Param_listNode final : public TupleDomain<kParam_listNode,
                                                ParamNode,
                                                Literal0,
                                                Param_listSubNode185,
                                                Literal0,
                                                Param_listSubNode187> {};
class ParamNode final : public TupleDomain<kParamNode,
                                           ParamSubNode188,
                                           Literal0,
                                           IdentNode,
                                           Literal0,
                                           Literal28,
                                           Literal0,
                                           Type_specifierNode> {};
class Enable_directiveNode final : public TupleDomain<kEnable_directiveNode,
                                                      Literal67,
                                                      Literal0,
                                                      Enable_extension_listNode,
                                                      Literal0,
                                                      Literal1> {};
class Enable_extension_listNode final
    : public TupleDomain<kEnable_extension_listNode,
                         Enable_extension_nameNode,
                         Literal0,
                         Enable_extension_listSubNode189,
                         Literal0,
                         Enable_extension_listSubNode191> {};
class Requires_directiveNode final
    : public TupleDomain<kRequires_directiveNode,
                         Literal68,
                         Literal0,
                         Software_extension_listNode,
                         Literal0,
                         Literal1> {};
class Software_extension_listNode final
    : public TupleDomain<kSoftware_extension_listNode,
                         Software_extension_nameNode,
                         Literal0,
                         Software_extension_listSubNode192,
                         Literal0,
                         Software_extension_listSubNode194> {};
class Enable_extension_nameNode final
    : public TupleDomain<kEnable_extension_nameNode, IDENT_PATTERN_TOKENNode> {
};
class Software_extension_nameNode final
    : public TupleDomain<kSoftware_extension_nameNode,
                         IDENT_PATTERN_TOKENNode> {};
class IDENT_PATTERN_TOKENNode final
    : public VariantDomain<kIDENT_PATTERN_TOKENNode,
                           0,
                           IDENT_PATTERN_TOKENSubNode195,
                           IDENT_PATTERN_TOKENSubNode197> {};
class Severity_control_nameNode final
    : public TupleDomain<kSeverity_control_nameNode, IDENT_PATTERN_TOKENNode> {
};
class SWIZZLE_NAMENode final : public VariantDomain<kSWIZZLE_NAMENode,
                                                    0,
                                                    CharSet2,
                                                    SWIZZLE_NAMESubNode198,
                                                    SWIZZLE_NAMESubNode199,
                                                    SWIZZLE_NAMESubNode200,
                                                    CharSet3,
                                                    SWIZZLE_NAMESubNode201,
                                                    SWIZZLE_NAMESubNode202,
                                                    SWIZZLE_NAMESubNode203> {};
class WhitespaceNode final
    : public TupleDomain<kWhitespaceNode, WhitespaceSubNode204> {};
class Translation_unitSubNode0 final
    : public Vector<kTranslation_unitSubNode0, Global_directiveNode> {};
class Translation_unitSubNode1 final
    : public Vector<kTranslation_unitSubNode1, Translation_unitSubNode2> {};
class Translation_unitSubNode2 final
    : public VariantDomain<kTranslation_unitSubNode2,
                           2,
                           Global_declNode,
                           Global_assertNode,
                           Literal1> {};
class Global_declSubNode3 final : public TupleDomain<kGlobal_declSubNode3,
                                                     Global_variable_declNode,
                                                     Literal0,
                                                     Literal1> {};
class Global_declSubNode4 final : public TupleDomain<kGlobal_declSubNode4,
                                                     Global_value_declNode,
                                                     Literal0,
                                                     Literal1> {};
class Global_declSubNode5 final : public TupleDomain<kGlobal_declSubNode5,
                                                     Type_alias_declNode,
                                                     Literal0,
                                                     Literal1> {};
class DECIMAL_INT_LITERALSubNode6 final
    : public Optional<kDECIMAL_INT_LITERALSubNode6, CharSet4> {};
class DECIMAL_INT_LITERALSubNode7 final
    : public TupleDomain<kDECIMAL_INT_LITERALSubNode7,
                         CharSet0,
                         DECIMAL_INT_LITERALSubNode6> {};
class DECIMAL_INT_LITERALSubNode8 final
    : public Vector<kDECIMAL_INT_LITERALSubNode8, CharSet5> {};
class DECIMAL_INT_LITERALSubNode9 final
    : public Optional<kDECIMAL_INT_LITERALSubNode9, CharSet4> {};
class DECIMAL_INT_LITERALSubNode10 final
    : public TupleDomain<kDECIMAL_INT_LITERALSubNode10,
                         CharSet6,
                         DECIMAL_INT_LITERALSubNode8,
                         DECIMAL_INT_LITERALSubNode9> {};
class HEX_INT_LITERALSubNode11 final
    : public NonEmptyVector<kHEX_INT_LITERALSubNode11, CharSet7> {};
class HEX_INT_LITERALSubNode12 final
    : public Optional<kHEX_INT_LITERALSubNode12, CharSet4> {};
class DECIMAL_FLOAT_LITERALSubNode13 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode13, CharSet0, CharSet8> {
};
class DECIMAL_FLOAT_LITERALSubNode14 final
    : public Vector<kDECIMAL_FLOAT_LITERALSubNode14, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode15 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode15,
                         CharSet6,
                         DECIMAL_FLOAT_LITERALSubNode14,
                         CharSet8> {};
class DECIMAL_FLOAT_LITERALSubNode16 final
    : public Vector<kDECIMAL_FLOAT_LITERALSubNode16, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode17 final
    : public NonEmptyVector<kDECIMAL_FLOAT_LITERALSubNode17, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode18 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode18,
                      DECIMAL_FLOAT_LITERALSubNode19> {};
class DECIMAL_FLOAT_LITERALSubNode20 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode20, CharSet9> {};
class DECIMAL_FLOAT_LITERALSubNode21 final
    : public NonEmptyVector<kDECIMAL_FLOAT_LITERALSubNode21, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode19 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode19,
                         CharSet10,
                         DECIMAL_FLOAT_LITERALSubNode20,
                         DECIMAL_FLOAT_LITERALSubNode21> {};
class DECIMAL_FLOAT_LITERALSubNode22 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode22, CharSet8> {};
class DECIMAL_FLOAT_LITERALSubNode23 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode23,
                         DECIMAL_FLOAT_LITERALSubNode16,
                         CharSet11,
                         DECIMAL_FLOAT_LITERALSubNode17,
                         DECIMAL_FLOAT_LITERALSubNode18,
                         DECIMAL_FLOAT_LITERALSubNode22> {};
class DECIMAL_FLOAT_LITERALSubNode24 final
    : public NonEmptyVector<kDECIMAL_FLOAT_LITERALSubNode24, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode25 final
    : public Vector<kDECIMAL_FLOAT_LITERALSubNode25, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode26 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode26,
                      DECIMAL_FLOAT_LITERALSubNode27> {};
class DECIMAL_FLOAT_LITERALSubNode28 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode28, CharSet9> {};
class DECIMAL_FLOAT_LITERALSubNode29 final
    : public NonEmptyVector<kDECIMAL_FLOAT_LITERALSubNode29, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode27 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode27,
                         CharSet10,
                         DECIMAL_FLOAT_LITERALSubNode28,
                         DECIMAL_FLOAT_LITERALSubNode29> {};
class DECIMAL_FLOAT_LITERALSubNode30 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode30, CharSet8> {};
class DECIMAL_FLOAT_LITERALSubNode31 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode31,
                         DECIMAL_FLOAT_LITERALSubNode24,
                         CharSet11,
                         DECIMAL_FLOAT_LITERALSubNode25,
                         DECIMAL_FLOAT_LITERALSubNode26,
                         DECIMAL_FLOAT_LITERALSubNode30> {};
class DECIMAL_FLOAT_LITERALSubNode32 final
    : public NonEmptyVector<kDECIMAL_FLOAT_LITERALSubNode32, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode33 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode33, CharSet9> {};
class DECIMAL_FLOAT_LITERALSubNode34 final
    : public NonEmptyVector<kDECIMAL_FLOAT_LITERALSubNode34, CharSet5> {};
class DECIMAL_FLOAT_LITERALSubNode35 final
    : public Optional<kDECIMAL_FLOAT_LITERALSubNode35, CharSet8> {};
class DECIMAL_FLOAT_LITERALSubNode36 final
    : public TupleDomain<kDECIMAL_FLOAT_LITERALSubNode36,
                         DECIMAL_FLOAT_LITERALSubNode32,
                         CharSet10,
                         DECIMAL_FLOAT_LITERALSubNode33,
                         DECIMAL_FLOAT_LITERALSubNode34,
                         DECIMAL_FLOAT_LITERALSubNode35> {};
class HEX_FLOAT_LITERALSubNode37 final
    : public Vector<kHEX_FLOAT_LITERALSubNode37, CharSet7> {};
class HEX_FLOAT_LITERALSubNode38 final
    : public NonEmptyVector<kHEX_FLOAT_LITERALSubNode38, CharSet7> {};
class HEX_FLOAT_LITERALSubNode39 final
    : public Optional<kHEX_FLOAT_LITERALSubNode39, HEX_FLOAT_LITERALSubNode40> {
};
class HEX_FLOAT_LITERALSubNode41 final
    : public Optional<kHEX_FLOAT_LITERALSubNode41, CharSet9> {};
class HEX_FLOAT_LITERALSubNode42 final
    : public NonEmptyVector<kHEX_FLOAT_LITERALSubNode42, CharSet5> {};
class HEX_FLOAT_LITERALSubNode43 final
    : public Optional<kHEX_FLOAT_LITERALSubNode43, CharSet8> {};
class HEX_FLOAT_LITERALSubNode40 final
    : public TupleDomain<kHEX_FLOAT_LITERALSubNode40,
                         CharSet12,
                         HEX_FLOAT_LITERALSubNode41,
                         HEX_FLOAT_LITERALSubNode42,
                         HEX_FLOAT_LITERALSubNode43> {};
class HEX_FLOAT_LITERALSubNode44 final
    : public TupleDomain<kHEX_FLOAT_LITERALSubNode44,
                         CharSet0,
                         CharSet1,
                         HEX_FLOAT_LITERALSubNode37,
                         CharSet11,
                         HEX_FLOAT_LITERALSubNode38,
                         HEX_FLOAT_LITERALSubNode39> {};
class HEX_FLOAT_LITERALSubNode45 final
    : public NonEmptyVector<kHEX_FLOAT_LITERALSubNode45, CharSet7> {};
class HEX_FLOAT_LITERALSubNode46 final
    : public Vector<kHEX_FLOAT_LITERALSubNode46, CharSet7> {};
class HEX_FLOAT_LITERALSubNode47 final
    : public Optional<kHEX_FLOAT_LITERALSubNode47, HEX_FLOAT_LITERALSubNode48> {
};
class HEX_FLOAT_LITERALSubNode49 final
    : public Optional<kHEX_FLOAT_LITERALSubNode49, CharSet9> {};
class HEX_FLOAT_LITERALSubNode50 final
    : public NonEmptyVector<kHEX_FLOAT_LITERALSubNode50, CharSet5> {};
class HEX_FLOAT_LITERALSubNode51 final
    : public Optional<kHEX_FLOAT_LITERALSubNode51, CharSet8> {};
class HEX_FLOAT_LITERALSubNode48 final
    : public TupleDomain<kHEX_FLOAT_LITERALSubNode48,
                         CharSet12,
                         HEX_FLOAT_LITERALSubNode49,
                         HEX_FLOAT_LITERALSubNode50,
                         HEX_FLOAT_LITERALSubNode51> {};
class HEX_FLOAT_LITERALSubNode52 final
    : public TupleDomain<kHEX_FLOAT_LITERALSubNode52,
                         CharSet0,
                         CharSet1,
                         HEX_FLOAT_LITERALSubNode45,
                         CharSet11,
                         HEX_FLOAT_LITERALSubNode46,
                         HEX_FLOAT_LITERALSubNode47> {};
class HEX_FLOAT_LITERALSubNode53 final
    : public NonEmptyVector<kHEX_FLOAT_LITERALSubNode53, CharSet7> {};
class HEX_FLOAT_LITERALSubNode54 final
    : public Optional<kHEX_FLOAT_LITERALSubNode54, CharSet9> {};
class HEX_FLOAT_LITERALSubNode55 final
    : public NonEmptyVector<kHEX_FLOAT_LITERALSubNode55, CharSet5> {};
class HEX_FLOAT_LITERALSubNode56 final
    : public Optional<kHEX_FLOAT_LITERALSubNode56, CharSet8> {};
class HEX_FLOAT_LITERALSubNode57 final
    : public TupleDomain<kHEX_FLOAT_LITERALSubNode57,
                         CharSet0,
                         CharSet1,
                         HEX_FLOAT_LITERALSubNode53,
                         CharSet12,
                         HEX_FLOAT_LITERALSubNode54,
                         HEX_FLOAT_LITERALSubNode55,
                         HEX_FLOAT_LITERALSubNode56> {};
class Diagnostic_rule_nameSubNode58 final
    : public TupleDomain<kDiagnostic_rule_nameSubNode58,
                         Diagnostic_name_tokenNode,
                         Literal0,
                         Literal69,
                         Literal0,
                         Diagnostic_name_tokenNode> {};
class Template_arg_comma_listSubNode59 final
    : public Vector<kTemplate_arg_comma_listSubNode59,
                    Template_arg_comma_listSubNode60> {};
class Template_arg_comma_listSubNode60 final
    : public TupleDomain<kTemplate_arg_comma_listSubNode60,
                         Literal24,
                         Literal0,
                         Template_arg_expressionNode> {};
class Template_arg_comma_listSubNode61 final
    : public Optional<kTemplate_arg_comma_listSubNode61, Literal24> {};
class Align_attrSubNode62 final
    : public Optional<kAlign_attrSubNode62, Literal24> {};
class Binding_attrSubNode63 final
    : public Optional<kBinding_attrSubNode63, Literal24> {};
class Blend_src_attrSubNode64 final
    : public Optional<kBlend_src_attrSubNode64, Literal24> {};
class Builtin_attrSubNode65 final
    : public Optional<kBuiltin_attrSubNode65, Literal24> {};
class Group_attrSubNode66 final
    : public Optional<kGroup_attrSubNode66, Literal24> {};
class Id_attrSubNode67 final : public Optional<kId_attrSubNode67, Literal24> {};
class Interpolate_attrSubNode68 final
    : public Optional<kInterpolate_attrSubNode68, Literal24> {};
class Interpolate_attrSubNode69 final
    : public TupleDomain<kInterpolate_attrSubNode69,
                         Literal7,
                         Literal0,
                         Literal70,
                         Literal0,
                         Literal9,
                         Literal0,
                         Interpolate_type_nameNode,
                         Literal0,
                         Interpolate_attrSubNode68,
                         Literal0,
                         Literal10> {};
class Interpolate_attrSubNode70 final
    : public Optional<kInterpolate_attrSubNode70, Literal24> {};
class Interpolate_attrSubNode71 final
    : public TupleDomain<kInterpolate_attrSubNode71,
                         Literal7,
                         Literal0,
                         Literal70,
                         Literal0,
                         Literal9,
                         Literal0,
                         Interpolate_type_nameNode,
                         Literal0,
                         Literal24,
                         Literal0,
                         Interpolate_sampling_nameNode,
                         Literal0,
                         Interpolate_attrSubNode70,
                         Literal0,
                         Literal10> {};
class Location_attrSubNode72 final
    : public Optional<kLocation_attrSubNode72, Literal24> {};
class Size_attrSubNode73 final
    : public Optional<kSize_attrSubNode73, Literal24> {};
class Workgroup_size_attrSubNode74 final
    : public Optional<kWorkgroup_size_attrSubNode74, Literal24> {};
class Workgroup_size_attrSubNode75 final
    : public TupleDomain<kWorkgroup_size_attrSubNode75,
                         Literal7,
                         Literal0,
                         Literal71,
                         Literal0,
                         Literal9,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Workgroup_size_attrSubNode74,
                         Literal0,
                         Literal10> {};
class Workgroup_size_attrSubNode76 final
    : public Optional<kWorkgroup_size_attrSubNode76, Literal24> {};
class Workgroup_size_attrSubNode77 final
    : public TupleDomain<kWorkgroup_size_attrSubNode77,
                         Literal7,
                         Literal0,
                         Literal71,
                         Literal0,
                         Literal9,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Literal24,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Workgroup_size_attrSubNode76,
                         Literal0,
                         Literal10> {};
class Workgroup_size_attrSubNode78 final
    : public Optional<kWorkgroup_size_attrSubNode78, Literal24> {};
class Workgroup_size_attrSubNode79 final
    : public TupleDomain<kWorkgroup_size_attrSubNode79,
                         Literal7,
                         Literal0,
                         Literal71,
                         Literal0,
                         Literal9,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Literal24,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Literal24,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Workgroup_size_attrSubNode78,
                         Literal0,
                         Literal10> {};
class AttributeSubNode80 final
    : public Optional<kAttributeSubNode80, Argument_expression_listNode> {};
class AttributeSubNode81 final : public TupleDomain<kAttributeSubNode81,
                                                    Literal7,
                                                    Literal0,
                                                    IDENT_PATTERN_TOKENNode,
                                                    Literal0,
                                                    AttributeSubNode80> {};
class Diagnostic_controlSubNode82 final
    : public Optional<kDiagnostic_controlSubNode82, Literal24> {};
class Struct_body_declSubNode83 final
    : public Vector<kStruct_body_declSubNode83, Struct_body_declSubNode84> {};
class Struct_body_declSubNode84 final
    : public TupleDomain<kStruct_body_declSubNode84,
                         Literal24,
                         Literal0,
                         Struct_memberNode> {};
class Struct_body_declSubNode85 final
    : public Optional<kStruct_body_declSubNode85, Literal24> {};
class Struct_memberSubNode86 final
    : public Vector<kStruct_memberSubNode86, AttributeNode> {};
class Template_elaborated_identSubNode87 final
    : public Optional<kTemplate_elaborated_identSubNode87, Template_listNode> {
};
class Variable_or_value_statementSubNode88 final
    : public TupleDomain<kVariable_or_value_statementSubNode88,
                         Variable_declNode,
                         Literal0,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class Variable_or_value_statementSubNode89 final
    : public TupleDomain<kVariable_or_value_statementSubNode89,
                         Literal72,
                         Literal0,
                         Optionally_typed_identNode,
                         Literal0,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class Variable_or_value_statementSubNode90 final
    : public TupleDomain<kVariable_or_value_statementSubNode90,
                         Literal14,
                         Literal0,
                         Optionally_typed_identNode,
                         Literal0,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class Variable_declSubNode91 final
    : public Optional<kVariable_declSubNode91, Template_listNode> {};
class Optionally_typed_identSubNode92 final
    : public Optional<kOptionally_typed_identSubNode92,
                      Optionally_typed_identSubNode93> {};
class Optionally_typed_identSubNode93 final
    : public TupleDomain<kOptionally_typed_identSubNode93,
                         Literal28,
                         Literal0,
                         Type_specifierNode> {};
class Global_variable_declSubNode94 final
    : public Vector<kGlobal_variable_declSubNode94, AttributeNode> {};
class Global_variable_declSubNode95 final
    : public Optional<kGlobal_variable_declSubNode95,
                      Global_variable_declSubNode96> {};
class Global_variable_declSubNode96 final
    : public TupleDomain<kGlobal_variable_declSubNode96,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class Global_value_declSubNode97 final
    : public TupleDomain<kGlobal_value_declSubNode97,
                         Literal14,
                         Literal0,
                         Optionally_typed_identNode,
                         Literal0,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class Global_value_declSubNode98 final
    : public Vector<kGlobal_value_declSubNode98, AttributeNode> {};
class Global_value_declSubNode99 final
    : public Optional<kGlobal_value_declSubNode99,
                      Global_value_declSubNode100> {};
class Global_value_declSubNode100 final
    : public TupleDomain<kGlobal_value_declSubNode100,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class Global_value_declSubNode101 final
    : public TupleDomain<kGlobal_value_declSubNode101,
                         Global_value_declSubNode98,
                         Literal0,
                         Literal73,
                         Literal0,
                         Optionally_typed_identNode,
                         Literal0,
                         Global_value_declSubNode99> {};
class Argument_expression_listSubNode102 final
    : public Optional<kArgument_expression_listSubNode102,
                      Expression_comma_listNode> {};
class Expression_comma_listSubNode103 final
    : public Vector<kExpression_comma_listSubNode103,
                    Expression_comma_listSubNode104> {};
class Expression_comma_listSubNode104 final
    : public TupleDomain<kExpression_comma_listSubNode104,
                         Literal24,
                         Literal0,
                         ExpressionNode> {};
class Expression_comma_listSubNode105 final
    : public Optional<kExpression_comma_listSubNode105, Literal24> {};
class Component_or_swizzle_specifierSubNode106 final
    : public Optional<kComponent_or_swizzle_specifierSubNode106,
                      Component_or_swizzle_specifierNode> {};
class Component_or_swizzle_specifierSubNode107 final
    : public TupleDomain<kComponent_or_swizzle_specifierSubNode107,
                         Literal74,
                         Literal0,
                         ExpressionNode,
                         Literal0,
                         Literal75,
                         Literal0,
                         Component_or_swizzle_specifierSubNode106> {};
class Component_or_swizzle_specifierSubNode108 final
    : public Optional<kComponent_or_swizzle_specifierSubNode108,
                      Component_or_swizzle_specifierNode> {};
class Component_or_swizzle_specifierSubNode109 final
    : public TupleDomain<kComponent_or_swizzle_specifierSubNode109,
                         Literal69,
                         Literal0,
                         Member_identNode,
                         Literal0,
                         Component_or_swizzle_specifierSubNode108> {};
class Component_or_swizzle_specifierSubNode110 final
    : public Optional<kComponent_or_swizzle_specifierSubNode110,
                      Component_or_swizzle_specifierNode> {};
class Component_or_swizzle_specifierSubNode111 final
    : public TupleDomain<kComponent_or_swizzle_specifierSubNode111,
                         Literal69,
                         Literal0,
                         SWIZZLE_NAMENode,
                         Literal0,
                         Component_or_swizzle_specifierSubNode110> {};
class Unary_expressionSubNode112 final
    : public TupleDomain<kUnary_expressionSubNode112,
                         Literal36,
                         Literal0,
                         Unary_expressionNode> {};
class Unary_expressionSubNode113 final
    : public TupleDomain<kUnary_expressionSubNode113,
                         Literal76,
                         Literal0,
                         Unary_expressionNode> {};
class Unary_expressionSubNode114 final
    : public TupleDomain<kUnary_expressionSubNode114,
                         Literal77,
                         Literal0,
                         Unary_expressionNode> {};
class Unary_expressionSubNode115 final
    : public TupleDomain<kUnary_expressionSubNode115,
                         Literal32,
                         Literal0,
                         Unary_expressionNode> {};
class Unary_expressionSubNode116 final
    : public TupleDomain<kUnary_expressionSubNode116,
                         Literal78,
                         Literal0,
                         Unary_expressionNode> {};
class Singular_expressionSubNode117 final
    : public Optional<kSingular_expressionSubNode117,
                      Component_or_swizzle_specifierNode> {};
class Lhs_expressionSubNode118 final
    : public Optional<kLhs_expressionSubNode118,
                      Component_or_swizzle_specifierNode> {};
class Lhs_expressionSubNode119 final
    : public TupleDomain<kLhs_expressionSubNode119,
                         Core_lhs_expressionNode,
                         Literal0,
                         Lhs_expressionSubNode118> {};
class Lhs_expressionSubNode120 final
    : public TupleDomain<kLhs_expressionSubNode120,
                         Literal32,
                         Literal0,
                         Lhs_expressionNode> {};
class Lhs_expressionSubNode121 final
    : public TupleDomain<kLhs_expressionSubNode121,
                         Literal78,
                         Literal0,
                         Lhs_expressionNode> {};
class Core_lhs_expressionSubNode122 final
    : public TupleDomain<kCore_lhs_expressionSubNode122,
                         Literal9,
                         Literal0,
                         Lhs_expressionNode,
                         Literal0,
                         Literal10> {};
class Multiplicative_expressionSubNode123 final
    : public TupleDomain<kMultiplicative_expressionSubNode123,
                         Multiplicative_expressionNode,
                         Literal0,
                         Multiplicative_operatorNode,
                         Literal0,
                         Unary_expressionNode> {};
class Additive_expressionSubNode124 final
    : public TupleDomain<kAdditive_expressionSubNode124,
                         Additive_expressionNode,
                         Literal0,
                         Additive_operatorNode,
                         Literal0,
                         Multiplicative_expressionNode> {};
class Shift_expressionSubNode125 final
    : public TupleDomain<kShift_expressionSubNode125,
                         Unary_expressionNode,
                         Literal0,
                         Shift_leftNode,
                         Literal0,
                         Unary_expressionNode> {};
class Shift_expressionSubNode126 final
    : public TupleDomain<kShift_expressionSubNode126,
                         Unary_expressionNode,
                         Literal0,
                         Shift_rightNode,
                         Literal0,
                         Unary_expressionNode> {};
class Relational_expressionSubNode127 final
    : public TupleDomain<kRelational_expressionSubNode127,
                         Shift_expressionNode,
                         Literal0,
                         Less_thanNode,
                         Literal0,
                         Shift_expressionNode> {};
class Relational_expressionSubNode128 final
    : public TupleDomain<kRelational_expressionSubNode128,
                         Shift_expressionNode,
                         Literal0,
                         Greater_thanNode,
                         Literal0,
                         Shift_expressionNode> {};
class Relational_expressionSubNode129 final
    : public TupleDomain<kRelational_expressionSubNode129,
                         Shift_expressionNode,
                         Literal0,
                         Less_than_equalNode,
                         Literal0,
                         Shift_expressionNode> {};
class Relational_expressionSubNode130 final
    : public TupleDomain<kRelational_expressionSubNode130,
                         Shift_expressionNode,
                         Literal0,
                         Greater_than_equalNode,
                         Literal0,
                         Shift_expressionNode> {};
class Relational_expressionSubNode131 final
    : public TupleDomain<kRelational_expressionSubNode131,
                         Shift_expressionNode,
                         Literal0,
                         Literal79,
                         Literal0,
                         Shift_expressionNode> {};
class Relational_expressionSubNode132 final
    : public TupleDomain<kRelational_expressionSubNode132,
                         Shift_expressionNode,
                         Literal0,
                         Literal80,
                         Literal0,
                         Shift_expressionNode> {};
class Short_circuit_and_expressionSubNode133 final
    : public TupleDomain<kShort_circuit_and_expressionSubNode133,
                         Short_circuit_and_expressionNode,
                         Literal0,
                         Literal81,
                         Literal0,
                         Relational_expressionNode> {};
class Short_circuit_or_expressionSubNode134 final
    : public TupleDomain<kShort_circuit_or_expressionSubNode134,
                         Short_circuit_or_expressionNode,
                         Literal0,
                         Literal82,
                         Literal0,
                         Relational_expressionNode> {};
class Binary_or_expressionSubNode135 final
    : public TupleDomain<kBinary_or_expressionSubNode135,
                         Binary_or_expressionNode,
                         Literal0,
                         Literal83,
                         Literal0,
                         Unary_expressionNode> {};
class Binary_and_expressionSubNode136 final
    : public TupleDomain<kBinary_and_expressionSubNode136,
                         Binary_and_expressionNode,
                         Literal0,
                         Literal78,
                         Literal0,
                         Unary_expressionNode> {};
class Binary_xor_expressionSubNode137 final
    : public TupleDomain<kBinary_xor_expressionSubNode137,
                         Binary_xor_expressionNode,
                         Literal0,
                         Literal84,
                         Literal0,
                         Unary_expressionNode> {};
class Bitwise_expressionSubNode138 final
    : public TupleDomain<kBitwise_expressionSubNode138,
                         Binary_and_expressionNode,
                         Literal0,
                         Literal78,
                         Literal0,
                         Unary_expressionNode> {};
class Bitwise_expressionSubNode139 final
    : public TupleDomain<kBitwise_expressionSubNode139,
                         Binary_or_expressionNode,
                         Literal0,
                         Literal83,
                         Literal0,
                         Unary_expressionNode> {};
class Bitwise_expressionSubNode140 final
    : public TupleDomain<kBitwise_expressionSubNode140,
                         Binary_xor_expressionNode,
                         Literal0,
                         Literal84,
                         Literal0,
                         Unary_expressionNode> {};
class ExpressionSubNode141 final
    : public TupleDomain<kExpressionSubNode141,
                         Short_circuit_or_expressionNode,
                         Literal0,
                         Literal82,
                         Literal0,
                         Relational_expressionNode> {};
class ExpressionSubNode142 final
    : public TupleDomain<kExpressionSubNode142,
                         Short_circuit_and_expressionNode,
                         Literal0,
                         Literal81,
                         Literal0,
                         Relational_expressionNode> {};
class Compound_statementSubNode143 final
    : public Vector<kCompound_statementSubNode143, AttributeNode> {};
class Compound_statementSubNode144 final
    : public Vector<kCompound_statementSubNode144, StatementNode> {};
class Assignment_statementSubNode145 final
    : public VariantDomain<kAssignment_statementSubNode145,
                           0,
                           Literal30,
                           Compound_assignment_operatorNode> {};
class Assignment_statementSubNode146 final
    : public TupleDomain<kAssignment_statementSubNode146,
                         Lhs_expressionNode,
                         Literal0,
                         Assignment_statementSubNode145,
                         Literal0,
                         ExpressionNode> {};
class Assignment_statementSubNode147 final
    : public TupleDomain<kAssignment_statementSubNode147,
                         Literal85,
                         Literal0,
                         Literal30,
                         Literal0,
                         ExpressionNode> {};
class If_statementSubNode148 final
    : public Vector<kIf_statementSubNode148, AttributeNode> {};
class If_statementSubNode149 final
    : public Vector<kIf_statementSubNode149, Else_if_clauseNode> {};
class If_statementSubNode150 final
    : public Optional<kIf_statementSubNode150, Else_clauseNode> {};
class Switch_statementSubNode151 final
    : public Vector<kSwitch_statementSubNode151, AttributeNode> {};
class Switch_bodySubNode152 final
    : public Vector<kSwitch_bodySubNode152, AttributeNode> {};
class Switch_bodySubNode153 final
    : public NonEmptyVector<kSwitch_bodySubNode153, Switch_clauseNode> {};
class Case_clauseSubNode154 final
    : public Optional<kCase_clauseSubNode154, Literal28> {};
class Default_alone_clauseSubNode155 final
    : public Optional<kDefault_alone_clauseSubNode155, Literal28> {};
class Case_selectorsSubNode156 final
    : public Vector<kCase_selectorsSubNode156, Case_selectorsSubNode157> {};
class Case_selectorsSubNode157 final
    : public TupleDomain<kCase_selectorsSubNode157,
                         Literal24,
                         Literal0,
                         Case_selectorNode> {};
class Case_selectorsSubNode158 final
    : public Optional<kCase_selectorsSubNode158, Literal24> {};
class Loop_statementSubNode159 final
    : public Vector<kLoop_statementSubNode159, AttributeNode> {};
class Loop_statementSubNode160 final
    : public Vector<kLoop_statementSubNode160, AttributeNode> {};
class Loop_statementSubNode161 final
    : public Vector<kLoop_statementSubNode161, StatementNode> {};
class Loop_statementSubNode162 final
    : public Optional<kLoop_statementSubNode162, Continuing_statementNode> {};
class For_statementSubNode163 final
    : public Vector<kFor_statementSubNode163, AttributeNode> {};
class For_headerSubNode164 final
    : public Optional<kFor_headerSubNode164, For_initNode> {};
class For_headerSubNode165 final
    : public Optional<kFor_headerSubNode165, ExpressionNode> {};
class For_headerSubNode166 final
    : public Optional<kFor_headerSubNode166, For_updateNode> {};
class While_statementSubNode167 final
    : public Vector<kWhile_statementSubNode167, AttributeNode> {};
class Continuing_compound_statementSubNode168 final
    : public Vector<kContinuing_compound_statementSubNode168, AttributeNode> {};
class Continuing_compound_statementSubNode169 final
    : public Vector<kContinuing_compound_statementSubNode169, StatementNode> {};
class Continuing_compound_statementSubNode170 final
    : public Optional<kContinuing_compound_statementSubNode170,
                      Break_if_statementNode> {};
class Return_statementSubNode171 final
    : public Optional<kReturn_statementSubNode171, ExpressionNode> {};
class StatementSubNode172 final : public TupleDomain<kStatementSubNode172,
                                                     Return_statementNode,
                                                     Literal0,
                                                     Literal1> {};
class StatementSubNode173 final : public TupleDomain<kStatementSubNode173,
                                                     Func_call_statementNode,
                                                     Literal0,
                                                     Literal1> {};
class StatementSubNode174 final
    : public TupleDomain<kStatementSubNode174,
                         Variable_or_value_statementNode,
                         Literal0,
                         Literal1> {};
class StatementSubNode175 final : public TupleDomain<kStatementSubNode175,
                                                     Break_statementNode,
                                                     Literal0,
                                                     Literal1> {};
class StatementSubNode176 final : public TupleDomain<kStatementSubNode176,
                                                     Continue_statementNode,
                                                     Literal0,
                                                     Literal1> {};
class StatementSubNode177 final
    : public TupleDomain<kStatementSubNode177, Literal86, Literal0, Literal1> {
};
class StatementSubNode178 final
    : public TupleDomain<kStatementSubNode178,
                         Variable_updating_statementNode,
                         Literal0,
                         Literal1> {};
class StatementSubNode179 final : public TupleDomain<kStatementSubNode179,
                                                     Assert_statementNode,
                                                     Literal0,
                                                     Literal1> {};
class Function_declSubNode180 final
    : public Vector<kFunction_declSubNode180, AttributeNode> {};
class Function_headerSubNode181 final
    : public Optional<kFunction_headerSubNode181, Param_listNode> {};
class Function_headerSubNode182 final
    : public Optional<kFunction_headerSubNode182, Function_headerSubNode183> {};
class Function_headerSubNode184 final
    : public Vector<kFunction_headerSubNode184, AttributeNode> {};
class Function_headerSubNode183 final
    : public TupleDomain<kFunction_headerSubNode183,
                         Literal87,
                         Literal0,
                         Function_headerSubNode184,
                         Literal0,
                         Template_elaborated_identNode> {};
class Param_listSubNode185 final
    : public Vector<kParam_listSubNode185, Param_listSubNode186> {};
class Param_listSubNode186 final : public TupleDomain<kParam_listSubNode186,
                                                      Literal24,
                                                      Literal0,
                                                      ParamNode> {};
class Param_listSubNode187 final
    : public Optional<kParam_listSubNode187, Literal24> {};
class ParamSubNode188 final : public Vector<kParamSubNode188, AttributeNode> {};
class Enable_extension_listSubNode189 final
    : public Vector<kEnable_extension_listSubNode189,
                    Enable_extension_listSubNode190> {};
class Enable_extension_listSubNode190 final
    : public TupleDomain<kEnable_extension_listSubNode190,
                         Literal24,
                         Literal0,
                         Enable_extension_nameNode> {};
class Enable_extension_listSubNode191 final
    : public Optional<kEnable_extension_listSubNode191, Literal24> {};
class Software_extension_listSubNode192 final
    : public Vector<kSoftware_extension_listSubNode192,
                    Software_extension_listSubNode193> {};
class Software_extension_listSubNode193 final
    : public TupleDomain<kSoftware_extension_listSubNode193,
                         Literal24,
                         Literal0,
                         Software_extension_nameNode> {};
class Software_extension_listSubNode194 final
    : public Optional<kSoftware_extension_listSubNode194, Literal24> {};
class IDENT_PATTERN_TOKENSubNode196 final
    : public NonEmptyVector<kIDENT_PATTERN_TOKENSubNode196, CharSet13> {};
class IDENT_PATTERN_TOKENSubNode195 final
    : public TupleDomain<kIDENT_PATTERN_TOKENSubNode195,
                         CharSet14,
                         IDENT_PATTERN_TOKENSubNode196> {};
class IDENT_PATTERN_TOKENSubNode197 final
    : public TupleDomain<kIDENT_PATTERN_TOKENSubNode197, CharSet15> {};
class SWIZZLE_NAMESubNode198 final
    : public TupleDomain<kSWIZZLE_NAMESubNode198, CharSet2, CharSet2> {};
class SWIZZLE_NAMESubNode199 final : public TupleDomain<kSWIZZLE_NAMESubNode199,
                                                        CharSet2,
                                                        CharSet2,
                                                        CharSet2> {};
class SWIZZLE_NAMESubNode200 final : public TupleDomain<kSWIZZLE_NAMESubNode200,
                                                        CharSet2,
                                                        CharSet2,
                                                        CharSet2,
                                                        CharSet2> {};
class SWIZZLE_NAMESubNode201 final
    : public TupleDomain<kSWIZZLE_NAMESubNode201, CharSet3, CharSet3> {};
class SWIZZLE_NAMESubNode202 final : public TupleDomain<kSWIZZLE_NAMESubNode202,
                                                        CharSet3,
                                                        CharSet3,
                                                        CharSet3> {};
class SWIZZLE_NAMESubNode203 final : public TupleDomain<kSWIZZLE_NAMESubNode203,
                                                        CharSet3,
                                                        CharSet3,
                                                        CharSet3,
                                                        CharSet3> {};
class WhitespaceSubNode204 final
    : public NonEmptyVector<kWhitespaceSubNode204, CharSet16> {};
class EOFNode final : public TupleDomain<kEOFNode, Literal88> {};
class Literal0 final : public StringLiteralDomain<kLiteral0, kStrLiteral0> {};
class Literal76 final : public StringLiteralDomain<kLiteral76, kStrLiteral76> {
};
class Literal80 final : public StringLiteralDomain<kLiteral80, kStrLiteral80> {
};
class Literal88 final : public StringLiteralDomain<kLiteral88, kStrLiteral88> {
};
class Literal34 final : public StringLiteralDomain<kLiteral34, kStrLiteral34> {
};
class Literal47 final : public StringLiteralDomain<kLiteral47, kStrLiteral47> {
};
class Literal78 final : public StringLiteralDomain<kLiteral78, kStrLiteral78> {
};
class Literal81 final : public StringLiteralDomain<kLiteral81, kStrLiteral81> {
};
class Literal48 final : public StringLiteralDomain<kLiteral48, kStrLiteral48> {
};
class Literal9 final : public StringLiteralDomain<kLiteral9, kStrLiteral9> {};
class Literal10 final : public StringLiteralDomain<kLiteral10, kStrLiteral10> {
};
class Literal32 final : public StringLiteralDomain<kLiteral32, kStrLiteral32> {
};
class Literal45 final : public StringLiteralDomain<kLiteral45, kStrLiteral45> {
};
class Literal35 final : public StringLiteralDomain<kLiteral35, kStrLiteral35> {
};
class Literal51 final : public StringLiteralDomain<kLiteral51, kStrLiteral51> {
};
class Literal43 final : public StringLiteralDomain<kLiteral43, kStrLiteral43> {
};
class Literal24 final : public StringLiteralDomain<kLiteral24, kStrLiteral24> {
};
class Literal36 final : public StringLiteralDomain<kLiteral36, kStrLiteral36> {
};
class Literal52 final : public StringLiteralDomain<kLiteral52, kStrLiteral52> {
};
class Literal44 final : public StringLiteralDomain<kLiteral44, kStrLiteral44> {
};
class Literal87 final : public StringLiteralDomain<kLiteral87, kStrLiteral87> {
};
class Literal69 final : public StringLiteralDomain<kLiteral69, kStrLiteral69> {
};
class Literal33 final : public StringLiteralDomain<kLiteral33, kStrLiteral33> {
};
class Literal46 final : public StringLiteralDomain<kLiteral46, kStrLiteral46> {
};
class Literal28 final : public StringLiteralDomain<kLiteral28, kStrLiteral28> {
};
class Literal1 final : public StringLiteralDomain<kLiteral1, kStrLiteral1> {};
class Literal5 final : public StringLiteralDomain<kLiteral5, kStrLiteral5> {};
class Literal37 final : public StringLiteralDomain<kLiteral37, kStrLiteral37> {
};
class Literal42 final : public StringLiteralDomain<kLiteral42, kStrLiteral42> {
};
class Literal39 final : public StringLiteralDomain<kLiteral39, kStrLiteral39> {
};
class Literal30 final : public StringLiteralDomain<kLiteral30, kStrLiteral30> {
};
class Literal79 final : public StringLiteralDomain<kLiteral79, kStrLiteral79> {
};
class Literal6 final : public StringLiteralDomain<kLiteral6, kStrLiteral6> {};
class Literal40 final : public StringLiteralDomain<kLiteral40, kStrLiteral40> {
};
class Literal38 final : public StringLiteralDomain<kLiteral38, kStrLiteral38> {
};
class Literal41 final : public StringLiteralDomain<kLiteral41, kStrLiteral41> {
};
class Literal7 final : public StringLiteralDomain<kLiteral7, kStrLiteral7> {};
class Literal74 final : public StringLiteralDomain<kLiteral74, kStrLiteral74> {
};
class Literal75 final : public StringLiteralDomain<kLiteral75, kStrLiteral75> {
};
class Literal84 final : public StringLiteralDomain<kLiteral84, kStrLiteral84> {
};
class Literal50 final : public StringLiteralDomain<kLiteral50, kStrLiteral50> {
};
class Literal85 final : public StringLiteralDomain<kLiteral85, kStrLiteral85> {
};
class Literal29 final : public StringLiteralDomain<kLiteral29, kStrLiteral29> {
};
class Literal8 final : public StringLiteralDomain<kLiteral8, kStrLiteral8> {};
class Literal11 final : public StringLiteralDomain<kLiteral11, kStrLiteral11> {
};
class Literal12 final : public StringLiteralDomain<kLiteral12, kStrLiteral12> {
};
class Literal61 final : public StringLiteralDomain<kLiteral61, kStrLiteral61> {
};
class Literal13 final : public StringLiteralDomain<kLiteral13, kStrLiteral13> {
};
class Literal56 final : public StringLiteralDomain<kLiteral56, kStrLiteral56> {
};
class Literal23 final : public StringLiteralDomain<kLiteral23, kStrLiteral23> {
};
class Literal14 final : public StringLiteralDomain<kLiteral14, kStrLiteral14> {
};
class Literal65 final : public StringLiteralDomain<kLiteral65, kStrLiteral65> {
};
class Literal62 final : public StringLiteralDomain<kLiteral62, kStrLiteral62> {
};
class Literal63 final : public StringLiteralDomain<kLiteral63, kStrLiteral63> {
};
class Literal57 final : public StringLiteralDomain<kLiteral57, kStrLiteral57> {
};
class Literal4 final : public StringLiteralDomain<kLiteral4, kStrLiteral4> {};
class Literal86 final : public StringLiteralDomain<kLiteral86, kStrLiteral86> {
};
class Literal54 final : public StringLiteralDomain<kLiteral54, kStrLiteral54> {
};
class Literal67 final : public StringLiteralDomain<kLiteral67, kStrLiteral67> {
};
class Literal3 final : public StringLiteralDomain<kLiteral3, kStrLiteral3> {};
class Literal66 final : public StringLiteralDomain<kLiteral66, kStrLiteral66> {
};
class Literal59 final : public StringLiteralDomain<kLiteral59, kStrLiteral59> {
};
class Literal22 final : public StringLiteralDomain<kLiteral22, kStrLiteral22> {
};
class Literal15 final : public StringLiteralDomain<kLiteral15, kStrLiteral15> {
};
class Literal16 final : public StringLiteralDomain<kLiteral16, kStrLiteral16> {
};
class Literal53 final : public StringLiteralDomain<kLiteral53, kStrLiteral53> {
};
class Literal70 final : public StringLiteralDomain<kLiteral70, kStrLiteral70> {
};
class Literal17 final : public StringLiteralDomain<kLiteral17, kStrLiteral17> {
};
class Literal72 final : public StringLiteralDomain<kLiteral72, kStrLiteral72> {
};
class Literal18 final : public StringLiteralDomain<kLiteral18, kStrLiteral18> {
};
class Literal58 final : public StringLiteralDomain<kLiteral58, kStrLiteral58> {
};
class Literal19 final : public StringLiteralDomain<kLiteral19, kStrLiteral19> {
};
class Literal73 final : public StringLiteralDomain<kLiteral73, kStrLiteral73> {
};
class Literal68 final : public StringLiteralDomain<kLiteral68, kStrLiteral68> {
};
class Literal64 final : public StringLiteralDomain<kLiteral64, kStrLiteral64> {
};
class Literal20 final : public StringLiteralDomain<kLiteral20, kStrLiteral20> {
};
class Literal25 final : public StringLiteralDomain<kLiteral25, kStrLiteral25> {
};
class Literal55 final : public StringLiteralDomain<kLiteral55, kStrLiteral55> {
};
class Literal2 final : public StringLiteralDomain<kLiteral2, kStrLiteral2> {};
class Literal31 final : public StringLiteralDomain<kLiteral31, kStrLiteral31> {
};
class Literal21 final : public StringLiteralDomain<kLiteral21, kStrLiteral21> {
};
class Literal60 final : public StringLiteralDomain<kLiteral60, kStrLiteral60> {
};
class Literal71 final : public StringLiteralDomain<kLiteral71, kStrLiteral71> {
};
class Literal26 final : public StringLiteralDomain<kLiteral26, kStrLiteral26> {
};
class Literal83 final : public StringLiteralDomain<kLiteral83, kStrLiteral83> {
};
class Literal49 final : public StringLiteralDomain<kLiteral49, kStrLiteral49> {
};
class Literal82 final : public StringLiteralDomain<kLiteral82, kStrLiteral82> {
};
class Literal27 final : public StringLiteralDomain<kLiteral27, kStrLiteral27> {
};
class Literal77 final : public StringLiteralDomain<kLiteral77, kStrLiteral77> {
};
class CharSet16 final : public RegexLiteralDomain<kCharSet16, kStrCharSet16> {};
class CharSet9 final : public RegexLiteralDomain<kCharSet9, kStrCharSet9> {};
class CharSet11 final : public RegexLiteralDomain<kCharSet11, kStrCharSet11> {};
class CharSet5 final : public RegexLiteralDomain<kCharSet5, kStrCharSet5> {};
class CharSet7 final : public RegexLiteralDomain<kCharSet7, kStrCharSet7> {};
class CharSet0 final : public RegexLiteralDomain<kCharSet0, kStrCharSet0> {};
class CharSet6 final : public RegexLiteralDomain<kCharSet6, kStrCharSet6> {};
class CharSet13 final : public RegexLiteralDomain<kCharSet13, kStrCharSet13> {};
class CharSet14 final : public RegexLiteralDomain<kCharSet14, kStrCharSet14> {};
class CharSet15 final : public RegexLiteralDomain<kCharSet15, kStrCharSet15> {};
class CharSet10 final : public RegexLiteralDomain<kCharSet10, kStrCharSet10> {};
class CharSet8 final : public RegexLiteralDomain<kCharSet8, kStrCharSet8> {};
class CharSet4 final : public RegexLiteralDomain<kCharSet4, kStrCharSet4> {};
class CharSet12 final : public RegexLiteralDomain<kCharSet12, kStrCharSet12> {};
class CharSet2 final : public RegexLiteralDomain<kCharSet2, kStrCharSet2> {};
class CharSet1 final : public RegexLiteralDomain<kCharSet1, kStrCharSet1> {};
class CharSet3 final : public RegexLiteralDomain<kCharSet3, kStrCharSet3> {};
}  // namespace fuzztest::internal::grammar::wgsl
namespace fuzztest::internal_no_adl {

inline auto InWgslGrammar() {
  return internal::grammar::InGrammarImpl<internal::grammar::wgsl::WgslNode>();
}

}  // namespace fuzztest::internal_no_adl
#endif  // TESTING_LIBFUZZER_FUZZERS_TINT_WGSL_FUZZER_GRAMMAR_H_
