Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grammar railroad diagram #3560

Open
mingodad opened this issue Mar 27, 2024 · 2 comments
Open

Grammar railroad diagram #3560

mingodad opened this issue Mar 27, 2024 · 2 comments

Comments

@mingodad
Copy link

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
Copy link
Contributor

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

@mingodad
Copy link
Author

You could use the navigable railroad diagram to the documentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants