KhronosGroup / KhronosGroup/glslang
Grammar railroad diagram
- Dominant language
- C++
- Stars
- 3.6k
- Forks
- 989
- Avg merge
- 1d 2h
- Merged PRs (30d)
- 31
Description
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 ::= "^"
```
Contributor guide
Research direction
The issue supplies an EBNF grammar and links to the parsertl playground and BottleCAPS or Red Dove railroad-diagram tools, but names no repository file or test. Start by comparing the referenced grammar with the repository's grammar sources. Done would need a confirmed repository location and an agreed navigable railroad diagram, which the issue does not specify.
Written by the indexing model from the issue text.
Assessment
- Domain
- compilers, documentation
- Issue type
- Documentation
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100