translation_unit: declaration
translation_unit
         ::= declaration*
no referencesdeclaration: access-specifier identifier ... unnamed-declaration alias
declaration
         ::= access-specifier? identifier ( '...'? unnamed-declaration | alias )
referenced by: parameter-declaration statement translation_unit access-specifier: public protected private
         ::= 'public'
           | 'protected'
           | 'private'
referenced by: declaration alias: : template-parameter-declaration-list type requires-clause == type-id type-id requires-clause == expression namespace == id-expression ;
alias    ::= ':' ( template-parameter-declaration-list? ( 'type' requires-clause? '==' type-id | type-id? requires-clause? '==' expression ) | 'namespace' '==' id-expression ) ';'
referenced by: declaration prefix-operator: ! - +
         ::= '!'
           | '-'
           | '+'
referenced by: is-as-expression postfix-operator: ++ -- * & ~ $ ...
         ::= '++'
           | '--'
           | '*'
           | '&'
           | '~'
           | '$'
           | '...'
referenced by: is-as-expression assignment-operator: = *= /= %= += -= >>= <<= &= ^= |=
         ::= '='
           | '*='
           | '/='
           | '%='
           | '+='
           | '-='
           | '>>='
           | '<<='
           | '&='
           | '^='
           | '|='
referenced by: assignment-expression primary-expression: inspect-expression id-expression literal ( expression-list ) { expression-list } unnamed-declaration
         ::= inspect-expression
           | id-expression
           | literal
           | '(' expression-list ')'
           | '{' expression-list '}'
           | unnamed-declaration
referenced by: is-as-expression multiplicative-expression: is-as-expression * / %
         ::= is-as-expression ( ( '*' | '/' | '%' ) is-as-expression )*
referenced by: additive-expression additive-expression: multiplicative-expression + -
         ::= multiplicative-expression ( ( '+' | '-' ) multiplicative-expression )*
referenced by: shift-expression shift-expression: additive-expression << >>
         ::= additive-expression ( ( '<<' | '>>' ) additive-expression )*
referenced by: compare-expression compare-expression: shift-expression <=>
         ::= shift-expression ( '<=>' shift-expression )*
referenced by: relational-expression relational-expression: compare-expression < > <= >=
         ::= compare-expression ( ( '<' | '>' | '<=' | '>=' ) compare-expression )*
referenced by: equality-expression equality-expression: relational-expression == !=
         ::= relational-expression ( ( '==' | '!=' ) relational-expression )*
referenced by: bit-and-expression bit-and-expression: equality-expression &
         ::= equality-expression ( '&' equality-expression )*
referenced by: bit-xor-expression bit-xor-expression: bit-and-expression ^
         ::= bit-and-expression ( '^' bit-and-expression )*
referenced by: bit-or-expression bit-or-expression: bit-xor-expression |
         ::= bit-xor-expression ( '|' bit-xor-expression )*
referenced by: logical-and-expression logical-and-expression: bit-or-expression &&
         ::= bit-or-expression ( '&&' bit-or-expression )*
referenced by: logical-or-expression logical-or-expression: logical-and-expression ||
         ::= logical-and-expression ( '||' logical-and-expression )*
referenced by: assignment-expression contract iteration-statement requires-clause selection-statement assignment-expression: logical-or-expression assignment-operator referenced by: expression next-clause expression: assignment-expression
         ::= assignment-expression
referenced by: alias contract expression-list expression-statement inspect-expression is-value-constraint iteration-statement return-statement template-argument expression-list: parameter-direction expression , referenced by: is-as-expression primary-expression type-id: type-qualifier qualified-id unqualified-id referenced by: alias as-type-cast inspect-expression is-type-constraint return-list template-argument unnamed-declaration type-qualifier: const *
         ::= 'const'
           | '*'
referenced by: type-id is-as-expression: prefix-operator primary-expression postfix-operator [ expression-list ] ( expression-list ) . id-expression is-type-constraint is-value-constraint as-type-cast referenced by: multiplicative-expression is-type-constraint: is type-id
         ::= 'is' type-id
referenced by: alternative is-as-expression is-value-constraint: is expression
         ::= 'is' expression
referenced by: alternative is-as-expression as-type-cast: as type-id
         ::= 'as' type-id
referenced by: alternative is-as-expression unqualified-id: identifier keyword template-id
         ::= identifier
           | keyword
           | template-id
referenced by: id-expression member-name-specifier nested-name-specifier qualified-id type-id template-id: identifier < template-argument-list >
         ::= identifier '<' template-argument-list? '>'
referenced by: unqualified-id template-argument-list: template-argument-list , template-argument
         ::= template-argument-list ',' template-argument
referenced by: template-argument-list template-id template-argument: const type-id expression
         ::= 'const'? type-id
           | expression
referenced by: template-argument-list qualified-id: nested-name-specifier member-name-specifier unqualified-id referenced by: id-expression type-id nested-name-specifier: unqualified-id ::
         ::= unqualified-id? '::'
referenced by: qualified-id member-name-specifier: unqualified-id .
         ::= unqualified-id '.'
referenced by: qualified-id id-expression: qualified-id unqualified-id
         ::= qualified-id
           | unqualified-id
referenced by: alias contract-group is-as-expression primary-expression unnamed-declaration using-statement literal: integer-literal character-literal floating-point-literal string-literal boolean-literal pointer-literal user-defined-literal ud-suffix referenced by: primary-expression expression-statement: expression ;
         ::= expression ';'?
referenced by: return-list statement selection-statement: if constexpr logical-or-expression compound-statement else compound-statement
         ::= 'if' 'constexpr'? logical-or-expression compound-statement ( 'else' compound-statement )?
referenced by: statement return-statement: return expression ;
         ::= return expression? ';'
referenced by: statement iteration-statement: label while logical-or-expression next-clause compound-statement do compound-statement next-clause while logical-or-expression ; for expression next-clause do unnamed-declaration referenced by: statement label: identifier :
label    ::= identifier ':'
referenced by: iteration-statement next-clause: next assignment-expression
         ::= 'next' assignment-expression
referenced by: iteration-statement alternative: alt-name is-type-constraint is-value-constraint as-type-cast = statement referenced by: inspect-expression inspect-expression: inspect constexpr expression -> type-id { alternative }
         ::= 'inspect' 'constexpr'? expression ( '->' type-id )? '{' alternative* '}'
referenced by: primary-expression statement jump-statement: break continue identifier ;
         ::= ( 'break' | 'continue' ) identifier? ';'
referenced by: statement using-statement: using namespace id-expression ;
         ::= 'using' 'namespace'? id-expression ';'
referenced by: statement statement: selection-statement using-statement inspect-expression return-statement jump-statement iteration-statement compound-statement contract-statement declaration expression-statement
         ::= selection-statement
           | using-statement
           | inspect-expression
           | return-statement
           | jump-statement
           | iteration-statement
           | compound-statement
           | contract-statement
           | declaration
           | expression-statement
referenced by: alternative compound-statement unnamed-declaration contract-statement: contract ;
         ::= contract ';'
referenced by: statement compound-statement: { statement }
         ::= '{' statement* '}'
referenced by: iteration-statement selection-statement statement parameter-declaration: this-specifier parameter-direction declaration referenced by: parameter-declaration-seq parameter-direction: in copy inout out move forward
         ::= 'in'
           | 'copy'
           | 'inout'
           | 'out'
           | 'move'
           | 'forward'
referenced by: expression-list parameter-declaration return-list this-specifier: implicit virtual override final
         ::= 'implicit'
           | 'virtual'
           | 'override'
           | 'final'
referenced by: parameter-declaration parameter-declaration-list: ( parameter-declaration-seq )
         ::= '(' parameter-declaration-seq? ')'
referenced by: function-type return-list parameter-declaration-seq: parameter-declaration ,
         ::= parameter-declaration ( ',' parameter-declaration )*
referenced by: parameter-declaration-list template-parameter-declaration-list contract: contract-kind contract-group : ( logical-or-expression , expression ) referenced by: contract-statement function-type contract-group: < id-expression , >
         ::= '<' id-expression ( ',' id-expression )* '>'
referenced by: contract contract-kind: pre post assert
         ::= 'pre'
           | 'post'
           | 'assert'
referenced by: contract function-type: parameter-declaration-list throws return-list contract
         ::= parameter-declaration-list 'throws'? return-list? contract*
referenced by: unnamed-declaration return-list: expression-statement -> parameter-direction type-id parameter-declaration-list
         ::= expression-statement
           | '->' ( parameter-direction? type-id | parameter-declaration-list )
referenced by: function-type unnamed-declaration: : @ id-expression template-parameter-declaration-list function-type requires-clause = type-id final type requires-clause = statement type-id namespace = statement
         ::= ':' ( ( '@' id-expression )* template-parameter-declaration-list? ( ( function-type ( requires-clause? '=' )? | ( type-id | 'final'? 'type' )? requires-clause? '=' ) statement | type-id ) | 'namespace' '=' statement )
referenced by: declaration iteration-statement primary-expression requires-clause: requires logical-or-expression
         ::= 'requires' logical-or-expression
referenced by: alias unnamed-declaration template-parameter-declaration-list: < parameter-declaration-seq >
         ::= '<' parameter-declaration-seq '>'
referenced by: alias unnamed-declaration   ... generated by RR - Railroad Diagram Generator R R