KhronosGroup / glslang

Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator.
Other
2.9k stars 816 forks source link

Grammar railroad diagram #3560

Open mingodad opened 3 months ago

mingodad commented 3 months ago

I've just added this project grammar to https://mingodad.github.io/parsertl-playground/playground/ an Yacc/Lex compatible online editor/tester (select Glslang parser (partially working) from Examples then click Parse to see a parse tree for the content in Input source).

And here is an EBNF to generate a nice navigable railroad diagram:

//
// EBNF to be viewd at
//    (IPV6) https://www.bottlecaps.de/rr/ui
//    (IPV4) https://rr.red-dove.com/ui
//
// Copy and paste this at one of the urls shown above in the 'Edit Grammar' tab
// then click the 'View Diagram' tab.
//

translation_unit::=
      external_declaration
    | translation_unit external_declaration

variable_identifier::=
      IDENTIFIER

primary_expression::=
      variable_identifier
    | LEFT_PAREN expression RIGHT_PAREN
    | FLOATCONSTANT
    | INTCONSTANT
    | UINTCONSTANT
    | BOOLCONSTANT
    | STRING_LITERAL
    | INT32CONSTANT
    | UINT32CONSTANT
    | INT64CONSTANT
    | UINT64CONSTANT
    | INT16CONSTANT
    | UINT16CONSTANT
    | DOUBLECONSTANT
    | FLOAT16CONSTANT

postfix_expression::=
      primary_expression
    | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET
    | function_call
    | postfix_expression DOT IDENTIFIER
    | postfix_expression INC_OP
    | postfix_expression DEC_OP

integer_expression::=
      expression

function_call::=
      function_call_or_method

function_call_or_method::=
      function_call_generic

function_call_generic::=
      function_call_header_with_parameters RIGHT_PAREN
    | function_call_header_no_parameters RIGHT_PAREN

function_call_header_no_parameters::=
      function_call_header VOID
    | function_call_header

function_call_header_with_parameters::=
      function_call_header assignment_expression
    | function_call_header_with_parameters COMMA assignment_expression

function_call_header::=
      function_identifier LEFT_PAREN

function_identifier::=
      type_specifier
    | postfix_expression
    | non_uniform_qualifier

unary_expression::=
      postfix_expression
    | INC_OP unary_expression
    | DEC_OP unary_expression
    | unary_operator unary_expression

unary_operator::=
      PLUS
    | DASH
    | BANG
    | TILDE

multiplicative_expression::=
      unary_expression
    | multiplicative_expression STAR unary_expression
    | multiplicative_expression SLASH unary_expression
    | multiplicative_expression PERCENT unary_expression

additive_expression::=
      multiplicative_expression
    | additive_expression PLUS multiplicative_expression
    | additive_expression DASH multiplicative_expression

shift_expression::=
      additive_expression
    | shift_expression LEFT_OP additive_expression
    | shift_expression RIGHT_OP additive_expression

relational_expression::=
      shift_expression
    | relational_expression LEFT_ANGLE shift_expression
    | relational_expression RIGHT_ANGLE shift_expression
    | relational_expression LE_OP shift_expression
    | relational_expression GE_OP shift_expression

equality_expression::=
      relational_expression
    | equality_expression EQ_OP relational_expression
    | equality_expression NE_OP relational_expression

and_expression::=
      equality_expression
    | and_expression AMPERSAND equality_expression

exclusive_or_expression::=
      and_expression
    | exclusive_or_expression CARET and_expression

inclusive_or_expression::=
      exclusive_or_expression
    | inclusive_or_expression VERTICAL_BAR exclusive_or_expression

logical_and_expression::=
      inclusive_or_expression
    | logical_and_expression AND_OP inclusive_or_expression

logical_xor_expression::=
      logical_and_expression
    | logical_xor_expression XOR_OP logical_and_expression

logical_or_expression::=
      logical_xor_expression
    | logical_or_expression OR_OP logical_xor_expression

conditional_expression::=
      logical_or_expression
    | logical_or_expression QUESTION expression COLON assignment_expression

assignment_expression::=
      conditional_expression
    | unary_expression assignment_operator assignment_expression

assignment_operator::=
      EQUAL
    | MUL_ASSIGN
    | DIV_ASSIGN
    | MOD_ASSIGN
    | ADD_ASSIGN
    | SUB_ASSIGN
    | LEFT_ASSIGN
    | RIGHT_ASSIGN
    | AND_ASSIGN
    | XOR_ASSIGN
    | OR_ASSIGN

expression::=
      assignment_expression
    | expression COMMA assignment_expression

constant_expression::=
      conditional_expression

declaration::=
      function_prototype SEMICOLON
    | spirv_instruction_qualifier function_prototype SEMICOLON
    | spirv_execution_mode_qualifier SEMICOLON
    | init_declarator_list SEMICOLON
    | PRECISION precision_qualifier type_specifier SEMICOLON
    | block_structure SEMICOLON
    | block_structure IDENTIFIER SEMICOLON
    | block_structure IDENTIFIER array_specifier SEMICOLON
    | type_qualifier SEMICOLON
    | type_qualifier IDENTIFIER SEMICOLON
    | type_qualifier IDENTIFIER identifier_list SEMICOLON

block_structure::=
      type_qualifier IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE

identifier_list::=
      COMMA IDENTIFIER
    | identifier_list COMMA IDENTIFIER

function_prototype::=
      function_declarator RIGHT_PAREN
    | function_declarator RIGHT_PAREN attribute
    | attribute function_declarator RIGHT_PAREN
    | attribute function_declarator RIGHT_PAREN attribute

function_declarator::=
      function_header
    | function_header_with_parameters

function_header_with_parameters::=
      function_header parameter_declaration
    | function_header_with_parameters COMMA parameter_declaration

function_header::=
      fully_specified_type IDENTIFIER LEFT_PAREN

parameter_declarator::=
      type_specifier IDENTIFIER
    | type_specifier IDENTIFIER array_specifier

parameter_declaration::=
      type_qualifier parameter_declarator
    | parameter_declarator
    | type_qualifier parameter_type_specifier
    | parameter_type_specifier

parameter_type_specifier::=
      type_specifier

init_declarator_list::=
      single_declaration
    | init_declarator_list COMMA IDENTIFIER
    | init_declarator_list COMMA IDENTIFIER array_specifier
    | init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer
    | init_declarator_list COMMA IDENTIFIER EQUAL initializer

single_declaration::=
      fully_specified_type
    | fully_specified_type IDENTIFIER
    | fully_specified_type IDENTIFIER array_specifier
    | fully_specified_type IDENTIFIER array_specifier EQUAL initializer
    | fully_specified_type IDENTIFIER EQUAL initializer

fully_specified_type::=
      type_specifier
    | type_qualifier type_specifier

invariant_qualifier::=
      INVARIANT

interpolation_qualifier::=
      SMOOTH
    | FLAT
    | NOPERSPECTIVE
    | EXPLICITINTERPAMD
    | PERVERTEXNV
    | PERVERTEXEXT
    | PERPRIMITIVENV
    | PERPRIMITIVEEXT
    | PERVIEWNV
    | PERTASKNV

layout_qualifier::=
      LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN

layout_qualifier_id_list::=
      layout_qualifier_id
    | layout_qualifier_id_list COMMA layout_qualifier_id

layout_qualifier_id::=
      IDENTIFIER
    | IDENTIFIER EQUAL constant_expression
    | SHARED

precise_qualifier::=
      PRECISE

type_qualifier::=
      single_type_qualifier
    | type_qualifier single_type_qualifier

single_type_qualifier::=
      storage_qualifier
    | layout_qualifier
    | precision_qualifier
    | interpolation_qualifier
    | invariant_qualifier
    | precise_qualifier
    | non_uniform_qualifier
    | spirv_storage_class_qualifier
    | spirv_decorate_qualifier
    | SPIRV_BY_REFERENCE
    | SPIRV_LITERAL

storage_qualifier::=
      CONST
    | INOUT
    | IN
    | OUT
    | CENTROID
    | UNIFORM
    | TILEIMAGEEXT
    | SHARED
    | BUFFER
    | ATTRIBUTE
    | VARYING
    | PATCH
    | SAMPLE
    | HITATTRNV
    | HITOBJECTATTRNV
    | HITATTREXT
    | PAYLOADNV
    | PAYLOADEXT
    | PAYLOADINNV
    | PAYLOADINEXT
    | CALLDATANV
    | CALLDATAEXT
    | CALLDATAINNV
    | CALLDATAINEXT
    | COHERENT
    | DEVICECOHERENT
    | QUEUEFAMILYCOHERENT
    | WORKGROUPCOHERENT
    | SUBGROUPCOHERENT
    | NONPRIVATE
    | SHADERCALLCOHERENT
    | VOLATILE
    | RESTRICT
    | READONLY
    | WRITEONLY
    | SUBROUTINE
    | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN
    | TASKPAYLOADWORKGROUPEXT

non_uniform_qualifier::=
      NONUNIFORM

type_name_list::=
      IDENTIFIER
    | type_name_list COMMA IDENTIFIER

type_specifier::=
      type_specifier_nonarray type_parameter_specifier_opt
    | type_specifier_nonarray type_parameter_specifier_opt array_specifier

array_specifier::=
      LEFT_BRACKET RIGHT_BRACKET
    | LEFT_BRACKET conditional_expression RIGHT_BRACKET
    | array_specifier LEFT_BRACKET RIGHT_BRACKET
    | array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET

type_parameter_specifier_opt::=
      type_parameter_specifier
    | /*%empty*/

type_parameter_specifier::=
      LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE

type_parameter_specifier_list::=
      type_specifier
    | unary_expression
    | type_parameter_specifier_list COMMA unary_expression

type_specifier_nonarray::=
      VOID
    | FLOAT
    | INT
    | UINT
    | BOOL
    | VEC2
    | VEC3
    | VEC4
    | BVEC2
    | BVEC3
    | BVEC4
    | IVEC2
    | IVEC3
    | IVEC4
    | UVEC2
    | UVEC3
    | UVEC4
    | MAT2
    | MAT3
    | MAT4
    | MAT2X2
    | MAT2X3
    | MAT2X4
    | MAT3X2
    | MAT3X3
    | MAT3X4
    | MAT4X2
    | MAT4X3
    | MAT4X4
    | DOUBLE
    | FLOAT16_T
    | FLOAT32_T
    | FLOAT64_T
    | INT8_T
    | UINT8_T
    | INT16_T
    | UINT16_T
    | INT32_T
    | UINT32_T
    | INT64_T
    | UINT64_T
    | DVEC2
    | DVEC3
    | DVEC4
    | F16VEC2
    | F16VEC3
    | F16VEC4
    | F32VEC2
    | F32VEC3
    | F32VEC4
    | F64VEC2
    | F64VEC3
    | F64VEC4
    | I8VEC2
    | I8VEC3
    | I8VEC4
    | I16VEC2
    | I16VEC3
    | I16VEC4
    | I32VEC2
    | I32VEC3
    | I32VEC4
    | I64VEC2
    | I64VEC3
    | I64VEC4
    | U8VEC2
    | U8VEC3
    | U8VEC4
    | U16VEC2
    | U16VEC3
    | U16VEC4
    | U32VEC2
    | U32VEC3
    | U32VEC4
    | U64VEC2
    | U64VEC3
    | U64VEC4
    | DMAT2
    | DMAT3
    | DMAT4
    | DMAT2X2
    | DMAT2X3
    | DMAT2X4
    | DMAT3X2
    | DMAT3X3
    | DMAT3X4
    | DMAT4X2
    | DMAT4X3
    | DMAT4X4
    | F16MAT2
    | F16MAT3
    | F16MAT4
    | F16MAT2X2
    | F16MAT2X3
    | F16MAT2X4
    | F16MAT3X2
    | F16MAT3X3
    | F16MAT3X4
    | F16MAT4X2
    | F16MAT4X3
    | F16MAT4X4
    | F32MAT2
    | F32MAT3
    | F32MAT4
    | F32MAT2X2
    | F32MAT2X3
    | F32MAT2X4
    | F32MAT3X2
    | F32MAT3X3
    | F32MAT3X4
    | F32MAT4X2
    | F32MAT4X3
    | F32MAT4X4
    | F64MAT2
    | F64MAT3
    | F64MAT4
    | F64MAT2X2
    | F64MAT2X3
    | F64MAT2X4
    | F64MAT3X2
    | F64MAT3X3
    | F64MAT3X4
    | F64MAT4X2
    | F64MAT4X3
    | F64MAT4X4
    | ACCSTRUCTNV
    | ACCSTRUCTEXT
    | RAYQUERYEXT
    | ATOMIC_UINT
    | SAMPLER1D
    | SAMPLER2D
    | SAMPLER3D
    | SAMPLERCUBE
    | SAMPLER2DSHADOW
    | SAMPLERCUBESHADOW
    | SAMPLER2DARRAY
    | SAMPLER2DARRAYSHADOW
    | SAMPLER1DSHADOW
    | SAMPLER1DARRAY
    | SAMPLER1DARRAYSHADOW
    | SAMPLERCUBEARRAY
    | SAMPLERCUBEARRAYSHADOW
    | F16SAMPLER1D
    | F16SAMPLER2D
    | F16SAMPLER3D
    | F16SAMPLERCUBE
    | F16SAMPLER1DSHADOW
    | F16SAMPLER2DSHADOW
    | F16SAMPLERCUBESHADOW
    | F16SAMPLER1DARRAY
    | F16SAMPLER2DARRAY
    | F16SAMPLER1DARRAYSHADOW
    | F16SAMPLER2DARRAYSHADOW
    | F16SAMPLERCUBEARRAY
    | F16SAMPLERCUBEARRAYSHADOW
    | ISAMPLER1D
    | ISAMPLER2D
    | ISAMPLER3D
    | ISAMPLERCUBE
    | ISAMPLER2DARRAY
    | USAMPLER2D
    | USAMPLER3D
    | USAMPLERCUBE
    | ISAMPLER1DARRAY
    | ISAMPLERCUBEARRAY
    | USAMPLER1D
    | USAMPLER1DARRAY
    | USAMPLERCUBEARRAY
    | TEXTURECUBEARRAY
    | ITEXTURECUBEARRAY
    | UTEXTURECUBEARRAY
    | USAMPLER2DARRAY
    | TEXTURE2D
    | TEXTURE3D
    | TEXTURE2DARRAY
    | TEXTURECUBE
    | ITEXTURE2D
    | ITEXTURE3D
    | ITEXTURECUBE
    | ITEXTURE2DARRAY
    | UTEXTURE2D
    | UTEXTURE3D
    | UTEXTURECUBE
    | UTEXTURE2DARRAY
    | SAMPLER
    | SAMPLERSHADOW
    | SAMPLER2DRECT
    | SAMPLER2DRECTSHADOW
    | F16SAMPLER2DRECT
    | F16SAMPLER2DRECTSHADOW
    | ISAMPLER2DRECT
    | USAMPLER2DRECT
    | SAMPLERBUFFER
    | F16SAMPLERBUFFER
    | ISAMPLERBUFFER
    | USAMPLERBUFFER
    | SAMPLER2DMS
    | F16SAMPLER2DMS
    | ISAMPLER2DMS
    | USAMPLER2DMS
    | SAMPLER2DMSARRAY
    | F16SAMPLER2DMSARRAY
    | ISAMPLER2DMSARRAY
    | USAMPLER2DMSARRAY
    | TEXTURE1D
    | F16TEXTURE1D
    | F16TEXTURE2D
    | F16TEXTURE3D
    | F16TEXTURECUBE
    | TEXTURE1DARRAY
    | F16TEXTURE1DARRAY
    | F16TEXTURE2DARRAY
    | F16TEXTURECUBEARRAY
    | ITEXTURE1D
    | ITEXTURE1DARRAY
    | UTEXTURE1D
    | UTEXTURE1DARRAY
    | TEXTURE2DRECT
    | F16TEXTURE2DRECT
    | ITEXTURE2DRECT
    | UTEXTURE2DRECT
    | TEXTUREBUFFER
    | F16TEXTUREBUFFER
    | ITEXTUREBUFFER
    | UTEXTUREBUFFER
    | TEXTURE2DMS
    | F16TEXTURE2DMS
    | ITEXTURE2DMS
    | UTEXTURE2DMS
    | TEXTURE2DMSARRAY
    | F16TEXTURE2DMSARRAY
    | ITEXTURE2DMSARRAY
    | UTEXTURE2DMSARRAY
    | IMAGE1D
    | F16IMAGE1D
    | IIMAGE1D
    | UIMAGE1D
    | IMAGE2D
    | F16IMAGE2D
    | IIMAGE2D
    | UIMAGE2D
    | IMAGE3D
    | F16IMAGE3D
    | IIMAGE3D
    | UIMAGE3D
    | IMAGE2DRECT
    | F16IMAGE2DRECT
    | IIMAGE2DRECT
    | UIMAGE2DRECT
    | IMAGECUBE
    | F16IMAGECUBE
    | IIMAGECUBE
    | UIMAGECUBE
    | IMAGEBUFFER
    | F16IMAGEBUFFER
    | IIMAGEBUFFER
    | UIMAGEBUFFER
    | IMAGE1DARRAY
    | F16IMAGE1DARRAY
    | IIMAGE1DARRAY
    | UIMAGE1DARRAY
    | IMAGE2DARRAY
    | F16IMAGE2DARRAY
    | IIMAGE2DARRAY
    | UIMAGE2DARRAY
    | IMAGECUBEARRAY
    | F16IMAGECUBEARRAY
    | IIMAGECUBEARRAY
    | UIMAGECUBEARRAY
    | IMAGE2DMS
    | F16IMAGE2DMS
    | IIMAGE2DMS
    | UIMAGE2DMS
    | IMAGE2DMSARRAY
    | F16IMAGE2DMSARRAY
    | IIMAGE2DMSARRAY
    | UIMAGE2DMSARRAY
    | I64IMAGE1D
    | U64IMAGE1D
    | I64IMAGE2D
    | U64IMAGE2D
    | I64IMAGE3D
    | U64IMAGE3D
    | I64IMAGE2DRECT
    | U64IMAGE2DRECT
    | I64IMAGECUBE
    | U64IMAGECUBE
    | I64IMAGEBUFFER
    | U64IMAGEBUFFER
    | I64IMAGE1DARRAY
    | U64IMAGE1DARRAY
    | I64IMAGE2DARRAY
    | U64IMAGE2DARRAY
    | I64IMAGECUBEARRAY
    | U64IMAGECUBEARRAY
    | I64IMAGE2DMS
    | U64IMAGE2DMS
    | I64IMAGE2DMSARRAY
    | U64IMAGE2DMSARRAY
    | SAMPLEREXTERNALOES
    | SAMPLEREXTERNAL2DY2YEXT
    | ATTACHMENTEXT
    | IATTACHMENTEXT
    | UATTACHMENTEXT
    | SUBPASSINPUT
    | SUBPASSINPUTMS
    | F16SUBPASSINPUT
    | F16SUBPASSINPUTMS
    | ISUBPASSINPUT
    | ISUBPASSINPUTMS
    | USUBPASSINPUT
    | USUBPASSINPUTMS
    | FCOOPMATNV
    | ICOOPMATNV
    | UCOOPMATNV
    | COOPMAT
    | spirv_type_specifier
    | HITOBJECTNV
    | struct_specifier
    | TYPE_NAME

precision_qualifier::=
      HIGH_PRECISION
    | MEDIUM_PRECISION
    | LOW_PRECISION

struct_specifier::=
      STRUCT IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE
    | STRUCT LEFT_BRACE struct_declaration_list RIGHT_BRACE

struct_declaration_list::=
      struct_declaration
    | struct_declaration_list struct_declaration

struct_declaration::=
      type_specifier struct_declarator_list SEMICOLON
    | type_qualifier type_specifier struct_declarator_list SEMICOLON

struct_declarator_list::=
      struct_declarator
    | struct_declarator_list COMMA struct_declarator

struct_declarator::=
      IDENTIFIER
    | IDENTIFIER array_specifier

initializer::=
      assignment_expression
    | LEFT_BRACE initializer_list RIGHT_BRACE
    | LEFT_BRACE initializer_list COMMA RIGHT_BRACE
    | LEFT_BRACE RIGHT_BRACE

initializer_list::=
      initializer
    | initializer_list COMMA initializer

declaration_statement::=
      declaration

statement::=
      compound_statement
    | simple_statement

simple_statement::=
      declaration_statement
    | expression_statement
    | selection_statement
    | switch_statement
    | case_label
    | iteration_statement
    | jump_statement
    | demote_statement

demote_statement::=
      DEMOTE SEMICOLON

compound_statement::=
      LEFT_BRACE RIGHT_BRACE
    | LEFT_BRACE statement_list RIGHT_BRACE

statement_no_new_scope::=
      compound_statement_no_new_scope
    | simple_statement

statement_scoped::=
      compound_statement
    | simple_statement

compound_statement_no_new_scope::=
      LEFT_BRACE RIGHT_BRACE
    | LEFT_BRACE statement_list RIGHT_BRACE

statement_list::=
      statement
    | statement_list statement

expression_statement::=
      SEMICOLON
    | expression SEMICOLON

selection_statement::=
      selection_statement_nonattributed
    | attribute selection_statement_nonattributed

selection_statement_nonattributed::=
      IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement

selection_rest_statement::=
      statement_scoped ELSE statement_scoped
    | statement_scoped

condition::=
      expression
    | fully_specified_type IDENTIFIER EQUAL initializer

switch_statement::=
      switch_statement_nonattributed
    | attribute switch_statement_nonattributed

switch_statement_nonattributed::=
      SWITCH LEFT_PAREN expression RIGHT_PAREN LEFT_BRACE switch_statement_list RIGHT_BRACE

switch_statement_list::=
      /*%empty*/
    | statement_list

case_label::=
      CASE expression COLON
    | DEFAULT COLON

iteration_statement::=
      iteration_statement_nonattributed
    | attribute iteration_statement_nonattributed

iteration_statement_nonattributed::=
      WHILE LEFT_PAREN condition RIGHT_PAREN statement_no_new_scope
    | DO statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON
    | FOR LEFT_PAREN for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope

for_init_statement::=
      expression_statement
    | declaration_statement

conditionopt::=
      condition
    | /*%empty*/

for_rest_statement::=
      conditionopt SEMICOLON
    | conditionopt SEMICOLON expression

jump_statement::=
      CONTINUE SEMICOLON
    | BREAK SEMICOLON
    | RETURN SEMICOLON
    | RETURN expression SEMICOLON
    | DISCARD SEMICOLON
    | TERMINATE_INVOCATION SEMICOLON
    | TERMINATE_RAY SEMICOLON
    | IGNORE_INTERSECTION SEMICOLON

external_declaration::=
      function_definition
    | declaration
    | SEMICOLON

function_definition::=
      function_prototype compound_statement_no_new_scope

attribute::=
      LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET

attribute_list::=
      single_attribute
    | attribute_list COMMA single_attribute

single_attribute::=
      IDENTIFIER
    | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN

spirv_requirements_list::=
      spirv_requirements_parameter
    | spirv_requirements_list COMMA spirv_requirements_parameter

spirv_requirements_parameter::=
      IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET
    | IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET

spirv_extension_list::=
      STRING_LITERAL
    | spirv_extension_list COMMA STRING_LITERAL

spirv_capability_list::=
      INTCONSTANT
    | spirv_capability_list COMMA INTCONSTANT

spirv_execution_mode_qualifier::=
      SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN
    | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN
    | SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN
    | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN
    | SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN
    | SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN

spirv_execution_mode_parameter_list::=
      spirv_execution_mode_parameter
    | spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter

spirv_execution_mode_parameter::=
      FLOATCONSTANT
    | INTCONSTANT
    | UINTCONSTANT
    | BOOLCONSTANT
    | STRING_LITERAL

spirv_execution_mode_id_parameter_list::=
      constant_expression
    | spirv_execution_mode_id_parameter_list COMMA constant_expression

spirv_storage_class_qualifier::=
      SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN
    | SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN

spirv_decorate_qualifier::=
      SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN
    | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN
    | SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN
    | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN
    | SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN
    | SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN
    | SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN
    | SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN

spirv_decorate_parameter_list::=
      spirv_decorate_parameter
    | spirv_decorate_parameter_list COMMA spirv_decorate_parameter

spirv_decorate_parameter::=
      FLOATCONSTANT
    | INTCONSTANT
    | UINTCONSTANT
    | BOOLCONSTANT

spirv_decorate_id_parameter_list::=
      spirv_decorate_id_parameter
    | spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter

spirv_decorate_id_parameter::=
      variable_identifier
    | FLOATCONSTANT
    | INTCONSTANT
    | UINTCONSTANT
    | BOOLCONSTANT

spirv_decorate_string_parameter_list::=
      STRING_LITERAL
    | spirv_decorate_string_parameter_list COMMA STRING_LITERAL

spirv_type_specifier::=
      SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN
    | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN
    | SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN
    | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN

spirv_type_parameter_list::=
      spirv_type_parameter
    | spirv_type_parameter_list COMMA spirv_type_parameter

spirv_type_parameter::=
      constant_expression
    | type_specifier_nonarray

spirv_instruction_qualifier::=
      SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN
    | SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN

spirv_instruction_qualifier_list::=
      spirv_instruction_qualifier_id
    | spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id

spirv_instruction_qualifier_id::=
      IDENTIFIER EQUAL STRING_LITERAL
    | IDENTIFIER EQUAL INTCONSTANT

//Tokens

CONST ::= "const"
UNIFORM ::= "uniform"
TILEIMAGEEXT ::= "tileImageEXT"
BUFFER ::= "buffer"
IN ::= "in"
OUT ::= "out"
SMOOTH ::= "smooth"
FLAT ::= "flat"
CENTROID ::= "centroid"
INVARIANT ::= "invariant"
PACKED ::= //"packed"
RESOURCE ::= //"resource"
INOUT ::= "inout"
STRUCT ::= "struct"
BREAK ::= "break"
CONTINUE ::= "continue"
DO ::= "do"
FOR ::= "for"
WHILE ::= "while"
SWITCH ::= "switch"
CASE ::= "case"
DEFAULT ::= "default"
IF ::= "if"
ELSE ::= "else"
DISCARD ::= "discard"
TERMINATE_INVOCATION ::= "terminateInvocation"
TERMINATE_RAY ::= "terminateRayEXT"
IGNORE_INTERSECTION ::= "ignoreIntersectionEXT"
RETURN ::= "return"
VOID ::= "void"
BOOL ::= "bool"
FLOAT ::= "float"
INT ::= "int"
BVEC2 ::= "bvec2"
BVEC3 ::= "bvec3"
BVEC4 ::= "bvec4"
VEC2 ::= "vec2"
VEC3 ::= "vec3"
VEC4 ::= "vec4"
IVEC2 ::= "ivec2"
IVEC3 ::= "ivec3"
IVEC4 ::= "ivec4"
MAT2 ::= "mat2"
MAT3 ::= "mat3"
MAT4 ::= "mat4"
BOOLCONSTANT ::= "true"
BOOLCONSTANT ::= "false"
LAYOUT ::= "layout"
SHARED ::= "shared"
HIGH_PRECISION ::= "highp"
MEDIUM_PRECISION ::= "mediump"
LOW_PRECISION ::= "lowp"
SUPERP ::= //"superp"
PRECISION ::= "precision"
MAT2X2 ::= "mat2x2"
MAT2X3 ::= "mat2x3"
MAT2X4 ::= "mat2x4"
MAT3X2 ::= "mat3x2"
MAT3X3 ::= "mat3x3"
MAT3X4 ::= "mat3x4"
MAT4X2 ::= "mat4x2"
MAT4X3 ::= "mat4x3"
MAT4X4 ::= "mat4x4"
UINT ::= "uint"
UVEC2 ::= "uvec2"
UVEC3 ::= "uvec3"
UVEC4 ::= "uvec4"

NONUNIFORM ::= "nonuniformEXT"
DEMOTE ::= "demote"
ATTRIBUTE ::= "attribute"
VARYING ::= "varying"
NOPERSPECTIVE ::= "noperspective"
COHERENT ::= "coherent"
DEVICECOHERENT ::= "devicecoherent"
QUEUEFAMILYCOHERENT ::= "queuefamilycoherent"
WORKGROUPCOHERENT ::= "workgroupcoherent"
SUBGROUPCOHERENT ::= "subgroupcoherent"
SHADERCALLCOHERENT ::= "shadercallcoherent"
NONPRIVATE ::= "nonprivate"
RESTRICT ::= "restrict"
READONLY ::= "readonly"
WRITEONLY ::= "writeonly"
ATOMIC_UINT ::= "atomic_uint"
VOLATILE ::= "volatile"
PATCH ::= "patch"
SAMPLE ::= "sample"
SUBROUTINE ::= "subroutine"
DMAT2 ::= "dmat2"
DMAT3 ::= "dmat3"
DMAT4 ::= "dmat4"
DMAT2X2 ::= "dmat2x2"
DMAT2X3 ::= "dmat2x3"
DMAT2X4 ::= "dmat2x4"
DMAT3X2 ::= "dmat3x2"
DMAT3X3 ::= "dmat3x3"
DMAT3X4 ::= "dmat3x4"
DMAT4X2 ::= "dmat4x2"
DMAT4X3 ::= "dmat4x3"
DMAT4X4 ::= "dmat4x4"
IMAGE1D ::= "image1D"
IIMAGE1D ::= "iimage1D"
UIMAGE1D ::= "uimage1D"
IMAGE2D ::= "image2D"
IIMAGE2D ::= "iimage2D"
UIMAGE2D ::= "uimage2D"
IMAGE3D ::= "image3D"
IIMAGE3D ::= "iimage3D"
UIMAGE3D ::= "uimage3D"
IMAGE2DRECT ::= "image2DRect"
IIMAGE2DRECT ::= "iimage2DRect"
UIMAGE2DRECT ::= "uimage2DRect"
IMAGECUBE ::= "imageCube"
IIMAGECUBE ::= "iimageCube"
UIMAGECUBE ::= "uimageCube"
IMAGEBUFFER ::= "imageBuffer"
IIMAGEBUFFER ::= "iimageBuffer"
UIMAGEBUFFER ::= "uimageBuffer"
IMAGE1DARRAY ::= "image1DArray"
IIMAGE1DARRAY ::= "iimage1DArray"
UIMAGE1DARRAY ::= "uimage1DArray"
IMAGE2DARRAY ::= "image2DArray"
IIMAGE2DARRAY ::= "iimage2DArray"
UIMAGE2DARRAY ::= "uimage2DArray"
IMAGECUBEARRAY ::= "imageCubeArray"
IIMAGECUBEARRAY ::= "iimageCubeArray"
UIMAGECUBEARRAY ::= "uimageCubeArray"
IMAGE2DMS ::= "image2DMS"
IIMAGE2DMS ::= "iimage2DMS"
UIMAGE2DMS ::= "uimage2DMS"
IMAGE2DMSARRAY ::= "image2DMSArray"
IIMAGE2DMSARRAY ::= "iimage2DMSArray"
UIMAGE2DMSARRAY ::= "uimage2DMSArray"
I64IMAGE1D ::= "i64image1D"
U64IMAGE1D ::= "u64image1D"
I64IMAGE2D ::= "i64image2D"
U64IMAGE2D ::= "u64image2D"
I64IMAGE3D ::= "i64image3D"
U64IMAGE3D ::= "u64image3D"
I64IMAGE2DRECT ::= "i64image2DRect"
U64IMAGE2DRECT ::= "u64image2DRect"
I64IMAGECUBE ::= "i64imageCube"
U64IMAGECUBE ::= "u64imageCube"
I64IMAGEBUFFER ::= "i64imageBuffer"
U64IMAGEBUFFER ::= "u64imageBuffer"
I64IMAGE1DARRAY ::= "i64image1DArray"
U64IMAGE1DARRAY ::= "u64image1DArray"
I64IMAGE2DARRAY ::= "i64image2DArray"
U64IMAGE2DARRAY ::= "u64image2DArray"
I64IMAGECUBEARRAY ::= "i64imageCubeArray"
U64IMAGECUBEARRAY ::= "u64imageCubeArray"
I64IMAGE2DMS ::= "i64image2DMS"
U64IMAGE2DMS ::= "u64image2DMS"
I64IMAGE2DMSARRAY ::= "i64image2DMSArray"
U64IMAGE2DMSARRAY ::= "u64image2DMSArray"
DOUBLE ::= "double"
DVEC2 ::= "dvec2"
DVEC3 ::= "dvec3"
DVEC4 ::= "dvec4"
INT64_T ::= "int64_t"
UINT64_T ::= "uint64_t"
I64VEC2 ::= "i64vec2"
I64VEC3 ::= "i64vec3"
I64VEC4 ::= "i64vec4"
U64VEC2 ::= "u64vec2"
U64VEC3 ::= "u64vec3"
U64VEC4 ::= "u64vec4"

// GL_EXT_shader_explicit_arithmetic_types
INT8_T ::= "int8_t"
I8VEC2 ::= "i8vec2"
I8VEC3 ::= "i8vec3"
I8VEC4 ::= "i8vec4"
UINT8_T ::= "uint8_t"
U8VEC2 ::= "u8vec2"
U8VEC3 ::= "u8vec3"
U8VEC4 ::= "u8vec4"

INT16_T ::= "int16_t"
I16VEC2 ::= "i16vec2"
I16VEC3 ::= "i16vec3"
I16VEC4 ::= "i16vec4"
UINT16_T ::= "uint16_t"
U16VEC2 ::= "u16vec2"
U16VEC3 ::= "u16vec3"
U16VEC4 ::= "u16vec4"

INT32_T ::= "int32_t"
I32VEC2 ::= "i32vec2"
I32VEC3 ::= "i32vec3"
I32VEC4 ::= "i32vec4"
UINT32_T ::= "uint32_t"
U32VEC2 ::= "u32vec2"
U32VEC3 ::= "u32vec3"
U32VEC4 ::= "u32vec4"

FLOAT16_T ::= "float16_t"
F16VEC2 ::= "f16vec2"
F16VEC3 ::= "f16vec3"
F16VEC4 ::= "f16vec4"
F16MAT2 ::= "f16mat2"
F16MAT3 ::= "f16mat3"
F16MAT4 ::= "f16mat4"
F16MAT2X2 ::= "f16mat2x2"
F16MAT2X3 ::= "f16mat2x3"
F16MAT2X4 ::= "f16mat2x4"
F16MAT3X2 ::= "f16mat3x2"
F16MAT3X3 ::= "f16mat3x3"
F16MAT3X4 ::= "f16mat3x4"
F16MAT4X2 ::= "f16mat4x2"
F16MAT4X3 ::= "f16mat4x3"
F16MAT4X4 ::= "f16mat4x4"

FLOAT32_T ::= "float32_t"
F32VEC2 ::= "f32vec2"
F32VEC3 ::= "f32vec3"
F32VEC4 ::= "f32vec4"
F32MAT2 ::= "f32mat2"
F32MAT3 ::= "f32mat3"
F32MAT4 ::= "f32mat4"
F32MAT2X2 ::= "f32mat2x2"
F32MAT2X3 ::= "f32mat2x3"
F32MAT2X4 ::= "f32mat2x4"
F32MAT3X2 ::= "f32mat3x2"
F32MAT3X3 ::= "f32mat3x3"
F32MAT3X4 ::= "f32mat3x4"
F32MAT4X2 ::= "f32mat4x2"
F32MAT4X3 ::= "f32mat4x3"
F32MAT4X4 ::= "f32mat4x4"
FLOAT64_T ::= "float64_t"
F64VEC2 ::= "f64vec2"
F64VEC3 ::= "f64vec3"
F64VEC4 ::= "f64vec4"
F64MAT2 ::= "f64mat2"
F64MAT3 ::= "f64mat3"
F64MAT4 ::= "f64mat4"
F64MAT2X2 ::= "f64mat2x2"
F64MAT2X3 ::= "f64mat2x3"
F64MAT2X4 ::= "f64mat2x4"
F64MAT3X2 ::= "f64mat3x2"
F64MAT3X3 ::= "f64mat3x3"
F64MAT3X4 ::= "f64mat3x4"
F64MAT4X2 ::= "f64mat4x2"
F64MAT4X3 ::= "f64mat4x3"
F64MAT4X4 ::= "f64mat4x4"

// GL_EXT_spirv_intrinsics
SPIRV_INSTRUCTION ::= "spirv_instruction"
SPIRV_EXECUTION_MODE ::= "spirv_execution_mode"
SPIRV_EXECUTION_MODE_ID ::= "spirv_execution_mode_id"
SPIRV_DECORATE ::= "spirv_decorate"
SPIRV_DECORATE_ID ::= "spirv_decorate_id"
SPIRV_DECORATE_STRING ::= "spirv_decorate_string"
SPIRV_TYPE ::= "spirv_type"
SPIRV_STORAGE_CLASS ::= "spirv_storage_class"
SPIRV_BY_REFERENCE ::= "spirv_by_reference"
SPIRV_LITERAL ::= "spirv_literal"

SAMPLER2D ::= "sampler2D"
SAMPLERCUBE ::= "samplerCube"
SAMPLERCUBESHADOW ::= "samplerCubeShadow"
SAMPLER2DARRAY ::= "sampler2DArray"
SAMPLER2DARRAYSHADOW ::= "sampler2DArrayShadow"
ISAMPLER2D ::= "isampler2D"
ISAMPLER3D ::= "isampler3D"
ISAMPLERCUBE ::= "isamplerCube"
ISAMPLER2DARRAY ::= "isampler2DArray"
USAMPLER2D ::= "usampler2D"
USAMPLER3D ::= "usampler3D"
USAMPLERCUBE ::= "usamplerCube"
USAMPLER2DARRAY ::= "usampler2DArray"
SAMPLER3D ::= "sampler3D"
SAMPLER2DSHADOW ::= "sampler2DShadow"

TEXTURE2D ::= "texture2D"
TEXTURECUBE ::= "textureCube"
TEXTURE2DARRAY ::= "texture2DArray"
ITEXTURE2D ::= "itexture2D"
ITEXTURE3D ::= "itexture3D"
ITEXTURECUBE ::= "itextureCube"
ITEXTURE2DARRAY ::= "itexture2DArray"
UTEXTURE2D ::= "utexture2D"
UTEXTURE3D ::= "utexture3D"
UTEXTURECUBE ::= "utextureCube"
UTEXTURE2DARRAY ::= "utexture2DArray"
TEXTURE3D ::= "texture3D"

SAMPLER ::= "sampler"
SAMPLERSHADOW ::= "samplerShadow"

TEXTURECUBEARRAY ::= "textureCubeArray"
ITEXTURECUBEARRAY ::= "itextureCubeArray"
UTEXTURECUBEARRAY ::= "utextureCubeArray"
SAMPLERCUBEARRAY ::= "samplerCubeArray"
SAMPLERCUBEARRAYSHADOW ::= "samplerCubeArrayShadow"
ISAMPLERCUBEARRAY ::= "isamplerCubeArray"
USAMPLERCUBEARRAY ::= "usamplerCubeArray"
SAMPLER1DARRAYSHADOW ::= "sampler1DArrayShadow"
ISAMPLER1DARRAY ::= "isampler1DArray"
USAMPLER1D ::= "usampler1D"
ISAMPLER1D ::= "isampler1D"
USAMPLER1DARRAY ::= "usampler1DArray"
SAMPLERBUFFER ::= "samplerBuffer"
ISAMPLER2DRECT ::= "isampler2DRect"
USAMPLER2DRECT ::= "usampler2DRect"
ISAMPLERBUFFER ::= "isamplerBuffer"
USAMPLERBUFFER ::= "usamplerBuffer"
SAMPLER2DMS ::= "sampler2DMS"
ISAMPLER2DMS ::= "isampler2DMS"
USAMPLER2DMS ::= "usampler2DMS"
SAMPLER2DMSARRAY ::= "sampler2DMSArray"
ISAMPLER2DMSARRAY ::= "isampler2DMSArray"
USAMPLER2DMSARRAY ::= "usampler2DMSArray"
SAMPLER1D ::= "sampler1D"
SAMPLER1DSHADOW ::= "sampler1DShadow"
SAMPLER2DRECT ::= "sampler2DRect"
SAMPLER2DRECTSHADOW ::= "sampler2DRectShadow"
SAMPLER1DARRAY ::= "sampler1DArray"

SAMPLEREXTERNALOES ::= "samplerExternalOES" GL_OES_EGL_image_external ::= //

SAMPLEREXTERNAL2DY2YEXT ::= "__samplerExternal2DY2YEXT" GL_EXT_YUV_target ::= //

ITEXTURE1DARRAY ::= "itexture1DArray"
UTEXTURE1D ::= "utexture1D"
ITEXTURE1D ::= "itexture1D"
UTEXTURE1DARRAY ::= "utexture1DArray"
TEXTUREBUFFER ::= "textureBuffer"
ITEXTURE2DRECT ::= "itexture2DRect"
UTEXTURE2DRECT ::= "utexture2DRect"
ITEXTUREBUFFER ::= "itextureBuffer"
UTEXTUREBUFFER ::= "utextureBuffer"
TEXTURE2DMS ::= "texture2DMS"
ITEXTURE2DMS ::= "itexture2DMS"
UTEXTURE2DMS ::= "utexture2DMS"
TEXTURE2DMSARRAY ::= "texture2DMSArray"
ITEXTURE2DMSARRAY ::= "itexture2DMSArray"
UTEXTURE2DMSARRAY ::= "utexture2DMSArray"
TEXTURE1D ::= "texture1D"
TEXTURE2DRECT ::= "texture2DRect"
TEXTURE1DARRAY ::= "texture1DArray"

ATTACHMENTEXT ::= "attachmentEXT"
IATTACHMENTEXT ::= "iattachmentEXT"
UATTACHMENTEXT ::= "uattachmentEXT"

SUBPASSINPUT ::= "subpassInput"
SUBPASSINPUTMS ::= "subpassInputMS"
ISUBPASSINPUT ::= "isubpassInput"
ISUBPASSINPUTMS ::= "isubpassInputMS"
USUBPASSINPUT ::= "usubpassInput"
USUBPASSINPUTMS ::= "usubpassInputMS"

F16SAMPLER1D ::= "f16sampler1D"
F16SAMPLER2D ::= "f16sampler2D"
F16SAMPLER3D ::= "f16sampler3D"
F16SAMPLER2DRECT ::= "f16sampler2DRect"
F16SAMPLERCUBE ::= "f16samplerCube"
F16SAMPLER1DARRAY ::= "f16sampler1DArray"
F16SAMPLER2DARRAY ::= "f16sampler2DArray"
F16SAMPLERCUBEARRAY ::= "f16samplerCubeArray"
F16SAMPLERBUFFER ::= "f16samplerBuffer"
F16SAMPLER2DMS ::= "f16sampler2DMS"
F16SAMPLER2DMSARRAY ::= "f16sampler2DMSArray"
F16SAMPLER1DSHADOW ::= "f16sampler1DShadow"
F16SAMPLER2DSHADOW ::= "f16sampler2DShadow"
F16SAMPLER2DRECTSHADOW ::= "f16sampler2DRectShadow"
F16SAMPLERCUBESHADOW ::= "f16samplerCubeShadow"
F16SAMPLER1DARRAYSHADOW ::= "f16sampler1DArrayShadow"
F16SAMPLER2DARRAYSHADOW ::= "f16sampler2DArrayShadow"
F16SAMPLERCUBEARRAYSHADOW ::= "f16samplerCubeArrayShadow"

F16IMAGE1D ::= "f16image1D"
F16IMAGE2D ::= "f16image2D"
F16IMAGE3D ::= "f16image3D"
F16IMAGE2DRECT ::= "f16image2DRect"
F16IMAGECUBE ::= "f16imageCube"
F16IMAGE1DARRAY ::= "f16image1DArray"
F16IMAGE2DARRAY ::= "f16image2DArray"
F16IMAGECUBEARRAY ::= "f16imageCubeArray"
F16IMAGEBUFFER ::= "f16imageBuffer"
F16IMAGE2DMS ::= "f16image2DMS"
F16IMAGE2DMSARRAY ::= "f16image2DMSArray"

F16TEXTURE1D ::= "f16texture1D"
F16TEXTURE2D ::= "f16texture2D"
F16TEXTURE3D ::= "f16texture3D"
F16TEXTURE2DRECT ::= "f16texture2DRect"
F16TEXTURECUBE ::= "f16textureCube"
F16TEXTURE1DARRAY ::= "f16texture1DArray"
F16TEXTURE2DARRAY ::= "f16texture2DArray"
F16TEXTURECUBEARRAY ::= "f16textureCubeArray"
F16TEXTUREBUFFER ::= "f16textureBuffer"
F16TEXTURE2DMS ::= "f16texture2DMS"
F16TEXTURE2DMSARRAY ::= "f16texture2DMSArray"

F16SUBPASSINPUT ::= "f16subpassInput"
F16SUBPASSINPUTMS ::= "f16subpassInputMS"
EXPLICITINTERPAMD ::= "__explicitInterpAMD"
PERVERTEXNV ::= "pervertexNV"
PERVERTEXEXT ::= "pervertexEXT"
PRECISE ::= "precise"

PAYLOADNV ::= "rayPayloadNV"
PAYLOADEXT ::= "rayPayloadEXT"
PAYLOADINNV ::= "rayPayloadInNV"
PAYLOADINEXT ::= "rayPayloadInEXT"
HITATTRNV ::= "hitAttributeNV"
HITATTREXT ::= "hitAttributeEXT"
CALLDATANV ::= "callableDataNV"
CALLDATAEXT ::= "callableDataEXT"
CALLDATAINNV ::= "callableDataInNV"
CALLDATAINEXT ::= "callableDataInEXT"
ACCSTRUCTNV ::= "accelerationStructureNV"
ACCSTRUCTEXT ::= "accelerationStructureEXT"
RAYQUERYEXT ::= "rayQueryEXT"
PERPRIMITIVENV ::= "perprimitiveNV"
PERVIEWNV ::= "perviewNV"
PERTASKNV ::= "taskNV"
PERPRIMITIVEEXT ::= "perprimitiveEXT"
TASKPAYLOADWORKGROUPEXT ::= "taskPayloadSharedEXT"

FCOOPMATNV ::= "fcoopmatNV"
ICOOPMATNV ::= "icoopmatNV"
UCOOPMATNV ::= "ucoopmatNV"

COOPMAT ::= "coopmat"

HITOBJECTNV ::= "hitObjectNV"
HITOBJECTATTRNV ::= "hitObjectAttributeNV"

ADD_ASSIGN ::= "+="
AMPERSAND ::= "&"
AND_ASSIGN ::= "&="
AND_OP ::= "&&"
BANG ::= "!"
CARET ::= "^"
COLON ::= ":"
COMMA ::= ","
DASH ::= "#"
DEC_OP ::= "--"
DIV_ASSIGN ::= "/="
DOT ::= "."
EQ_OP ::= "=="
EQUAL ::= "="
GE_OP ::= ">="
INC_OP ::= "++"
LEFT_ANGLE ::= "<"
LEFT_ASSIGN ::= "<<="
LEFT_BRACE ::= "{"
LEFT_BRACKET ::= "["
LEFT_OP ::= "<<"
LEFT_PAREN ::= "("
LE_OP ::= "<="
MOD_ASSIGN ::= "%="
MUL_ASSIGN ::= "*="
NE_OP ::= "!="
OR_ASSIGN ::= "|="
OR_OP ::= "||"
PERCENT ::= "%"
PLUS ::= "+"
QUESTION ::= "?"
RIGHT_ANGLE ::= ">"
RIGHT_ASSIGN ::= ">>="
RIGHT_BRACE ::= "}"
RIGHT_BRACKET ::= "]"
RIGHT_OP ::= ">>"
RIGHT_PAREN ::= ")"
SEMICOLON ::= ";"
SLASH ::= "/"
STAR ::= "*"
SUB_ASSIGN ::= "-="
TILDE ::= "~"
VERTICAL_BAR ::= "|"
XOR_ASSIGN ::= "^="
XOR_OP ::= "^"
arcady-lunarg commented 1 month ago

Hi, what exactly do you want from the glslang maintainers here?

mingodad commented 1 month ago

You could use the navigable railroad diagram to the documentation.