AthrunArthur / cxxparser

C++ parser for Lex and YACC
26 stars 7 forks source link

Grammar railroad diagram #1

Open mingodad opened 3 years ago

mingodad commented 3 years ago

I've done a experimental tool to convert bison grammars to a kind of EBNF understood by https://www.bottlecaps.de/rr/ui to generate railroad diagrams see bellow the converted CxxParser.y and with some hand made changes to allow view it at https://www.bottlecaps.de/rr/ui the order of the rules could be changed to a better view of the railroad diagrams. Copy and paste the EBNF bellow on https://www.bottlecaps.de/rr/ui tab Edit Grammar then switch to the tab View Diagram.


identifier_word ::=
    Identifier

identifier ::=
    identifier_word

id ::=
    identifier
    | identifier template_test '+' template_argument_list '>'
    | identifier template_test '+' '>'
    | identifier template_test '-'
    | template_id

template_test ::=
    '<'

global_scope ::=
    SCOPE
    | TEMPLATE global_scope

id_scope ::=
    id SCOPE

nested_id ::=
    id
    | id_scope nested_id

scoped_id ::=
    nested_id
    | global_scope nested_id

destructor_id ::=
    '~' id
    | TEMPLATE destructor_id

special_function_id ::=
    conversion_function_id
    | operator_function_id
    | TEMPLATE special_function_id

nested_special_function_id ::=
    special_function_id
    | id_scope destructor_id
    | id_scope nested_special_function_id

scoped_special_function_id ::=
    nested_special_function_id
    | global_scope nested_special_function_id

declarator_id ::=
    scoped_id
    | scoped_special_function_id
    | destructor_id

built_in_type_id ::=
    built_in_type_specifier
    | built_in_type_id built_in_type_specifier

pseudo_destructor_id ::=
    built_in_type_id SCOPE '~' built_in_type_id
    | '~' built_in_type_id
    | TEMPLATE pseudo_destructor_id

nested_pseudo_destructor_id ::=
    pseudo_destructor_id
    | id_scope nested_pseudo_destructor_id

scoped_pseudo_destructor_id ::=
    nested_pseudo_destructor_id
    | global_scope scoped_pseudo_destructor_id

string ::=
    StringLiteral

literal ::=
    IntegerLiteral
    | CharacterLiteral
    | FloatingLiteral
    | string
    | boolean_literal

boolean_literal ::=
    FALSE
    | TRUE

translation_unit ::=
    declaration_seq.opt

primary_expression ::=
    literal
    | THIS
    | suffix_decl_specified_ids
    | abstract_expression

abstract_expression ::=
    parenthesis_clause
    | '[' expression.opt ']'
    | TEMPLATE parenthesis_clause

type1_parameters ::=
    parameter_declaration_list ';'
    | type1_parameters parameter_declaration_list ';'

mark_type1 ::=
    /* empty */

postfix_expression ::=
    primary_expression
    | postfix_expression parenthesis_clause mark_type1 '-'
    | postfix_expression parenthesis_clause mark_type1 '+' type1_parameters mark '{' error
    | postfix_expression parenthesis_clause mark_type1 '+' type1_parameters mark error
    | postfix_expression parenthesis_clause mark_type1 '+' error
    | postfix_expression '[' expression.opt ']'
    | postfix_expression '.' declarator_id
    | postfix_expression '.' scoped_pseudo_destructor_id
    | postfix_expression ARROW declarator_id
    | postfix_expression ARROW scoped_pseudo_destructor_id
    | postfix_expression INC
    | postfix_expression DEC
    | DYNAMIC_CAST '<' type_id '>' '(' expression ')'
    | STATIC_CAST '<' type_id '>' '(' expression ')'
    | REINTERPRET_CAST '<' type_id '>' '(' expression ')'
    | CONST_CAST '<' type_id '>' '(' expression ')'
    | TYPEID parameters_clause

expression_list.opt ::=
    /* empty */
    | expression_list

expression_list ::=
    assignment_expression
    | expression_list ',' assignment_expression

unary_expression ::=
    postfix_expression
    | INC cast_expression
    | DEC cast_expression
    | ptr_operator cast_expression
    | suffix_decl_specified_scope star_ptr_operator cast_expression
    | '+' cast_expression
    | '-' cast_expression
    | '!' cast_expression
    | '~' cast_expression
    | SIZEOF unary_expression
    | new_expression
    | global_scope new_expression
    | delete_expression
    | global_scope delete_expression

delete_expression ::=
    DELETE cast_expression

new_expression ::=
    NEW new_type_id new_initializer.opt
    | NEW parameters_clause new_type_id new_initializer.opt
    | NEW parameters_clause
    | NEW parameters_clause parameters_clause new_initializer.opt

new_type_id ::=
    type_specifier ptr_operator_seq.opt
    | type_specifier new_declarator
    | type_specifier new_type_id

new_declarator ::=
    ptr_operator new_declarator
    | direct_new_declarator

direct_new_declarator ::=
    '[' expression ']'
    | direct_new_declarator '[' constant_expression ']'

new_initializer.opt ::=
    /* empty */
    | '(' expression_list.opt ')'

cast_expression ::=
    unary_expression
    | abstract_expression cast_expression

pm_expression ::=
    cast_expression
    | pm_expression DOT_STAR cast_expression
    | pm_expression ARROW_STAR cast_expression

multiplicative_expression ::=
    pm_expression
    | multiplicative_expression star_ptr_operator pm_expression
    | multiplicative_expression '/' pm_expression
    | multiplicative_expression '%' pm_expression

additive_expression ::=
    multiplicative_expression
    | additive_expression '+' multiplicative_expression
    | additive_expression '-' multiplicative_expression

shift_expression ::=
    additive_expression
    | shift_expression SHL additive_expression
    | shift_expression SHR additive_expression

relational_expression ::=
    shift_expression
    | relational_expression '<' shift_expression
    | relational_expression '>' shift_expression
    | relational_expression LE shift_expression
    | relational_expression GE shift_expression

equality_expression ::=
    relational_expression
    | equality_expression EQ relational_expression
    | equality_expression NE relational_expression

and_expression ::=
    equality_expression
    | and_expression '&' equality_expression

exclusive_or_expression ::=
    and_expression
    | exclusive_or_expression '^' and_expression

inclusive_or_expression ::=
    exclusive_or_expression
    | inclusive_or_expression '|' exclusive_or_expression

logical_and_expression ::=
    inclusive_or_expression
    | logical_and_expression LOG_AND inclusive_or_expression

logical_or_expression ::=
    logical_and_expression
    | logical_or_expression LOG_OR logical_and_expression

conditional_expression ::=
    logical_or_expression
    | logical_or_expression '?' expression ':' assignment_expression

assignment_expression ::=
    conditional_expression
    | logical_or_expression assignment_operator assignment_expression
    | logical_or_expression '=' braced_initializer
    | throw_expression

assignment_operator ::=
    '='
    | ASS_ADD
    | ASS_AND
    | ASS_DIV
    | ASS_MOD
    | ASS_MUL
    | ASS_OR
    | ASS_SHL
    | ASS_SHR
    | ASS_SUB
    | ASS_XOR

expression.opt ::=
    /* empty */
    | expression

expression ::=
    assignment_expression
    | expression_list ',' assignment_expression

constant_expression ::=
    conditional_expression

templated_relational_expression ::=
    shift_expression
    | templated_relational_expression '<' shift_expression
    | templated_relational_expression LE shift_expression
    | templated_relational_expression GE shift_expression

templated_equality_expression ::=
    templated_relational_expression
    | templated_equality_expression EQ templated_relational_expression
    | templated_equality_expression NE templated_relational_expression

templated_and_expression ::=
    templated_equality_expression
    | templated_and_expression '&' templated_equality_expression

templated_exclusive_or_expression ::=
    templated_and_expression
    | templated_exclusive_or_expression '^' templated_and_expression

templated_inclusive_or_expression ::=
    templated_exclusive_or_expression
    | templated_inclusive_or_expression '|' templated_exclusive_or_expression

templated_logical_and_expression ::=
    templated_inclusive_or_expression
    | templated_logical_and_expression LOG_AND templated_inclusive_or_expression

templated_logical_or_expression ::=
    templated_logical_and_expression
    | templated_logical_or_expression LOG_OR templated_logical_and_expression

templated_conditional_expression ::=
    templated_logical_or_expression
    | templated_logical_or_expression '?' templated_expression ':' templated_assignment_expression

templated_assignment_expression ::=
    templated_conditional_expression
    | templated_logical_or_expression assignment_operator templated_assignment_expression
    | templated_throw_expression

templated_expression ::=
    templated_assignment_expression
    | templated_expression_list ',' templated_assignment_expression

templated_expression_list ::=
    templated_assignment_expression
    | templated_expression_list ',' templated_assignment_expression

looping_statement ::=
    start_search looped_statement

looped_statement ::=
    statement
    | advance_search '+' looped_statement
    | advance_search '-'

statement ::=
    control_statement
    | compound_statement
    | declaration_statement
    | try_block

control_statement ::=
    labeled_statement
    | selection_statement
    | iteration_statement
    | jump_statement

labeled_statement ::=
    identifier_word ':' looping_statement
    | CASE constant_expression ':' looping_statement
    | DEFAULT ':' looping_statement

compound_statement ::=
    '{' statement_seq.opt '}'
    | '{' statement_seq.opt looping_statement '#' bang error '}'

statement_seq.opt ::=
    /* empty */
    | statement_seq.opt looping_statement
    | statement_seq.opt looping_statement '#' bang error ';'

selection_statement ::=
    IF '(' condition ')' looping_statement
    | IF '(' condition ')' looping_statement ELSE looping_statement
    | SWITCH '(' condition ')' looping_statement

condition.opt ::=
    /* empty */
    | condition

condition ::=
    parameter_declaration_list

iteration_statement ::=
    WHILE '(' condition ')' looping_statement
    | DO looping_statement WHILE '(' expression ')' ';'
    | FOR '(' for_init_statement condition.opt ';' expression.opt ')' looping_statement

for_init_statement ::=
    simple_declaration

jump_statement ::=
    BREAK ';'
    | CONTINUE ';'
    | RETURN expression.opt ';'
    | GOTO identifier ';'

declaration_statement ::=
    block_declaration

compound_declaration ::=
    '{' nest declaration_seq.opt '}'
    | '{' nest declaration_seq.opt util looping_declaration '#' bang error '}'

declaration_seq.opt ::=
    /* empty */
    | declaration_seq.opt util looping_declaration
    | declaration_seq.opt util looping_declaration '#' bang error ';'

looping_declaration ::=
    start_search1 looped_declaration

looped_declaration ::=
    declaration
    | advance_search '+' looped_declaration
    | advance_search '-'

declaration ::=
    block_declaration
    | function_definition
    | template_declaration
    | explicit_specialization
    | specialised_declaration

specialised_declaration ::=
    linkage_specification
    | namespace_definition
    | TEMPLATE specialised_declaration

block_declaration ::=
    simple_declaration
    | specialised_block_declaration

specialised_block_declaration ::=
    asm_definition
    | namespace_alias_definition
    | using_declaration
    | using_directive
    | TEMPLATE specialised_block_declaration

simple_declaration ::=
    ';'
    | init_declaration ';'
    | init_declarations ';'
    | decl_specifier_prefix simple_declaration

suffix_built_in_decl_specifier.raw ::=
    built_in_type_specifier
    | suffix_built_in_decl_specifier.raw built_in_type_specifier
    | suffix_built_in_decl_specifier.raw decl_specifier_suffix

suffix_built_in_decl_specifier ::=
    suffix_built_in_decl_specifier.raw
    | TEMPLATE suffix_built_in_decl_specifier

suffix_named_decl_specifier ::=
    scoped_id
    | elaborate_type_specifier
    | suffix_named_decl_specifier decl_specifier_suffix

suffix_named_decl_specifier.bi ::=
    suffix_named_decl_specifier
    | suffix_named_decl_specifier suffix_built_in_decl_specifier.raw

suffix_named_decl_specifiers ::=
    suffix_named_decl_specifier.bi
    | suffix_named_decl_specifiers suffix_named_decl_specifier.bi

suffix_named_decl_specifiers.sf ::=
    scoped_special_function_id
    | suffix_named_decl_specifiers
    | suffix_named_decl_specifiers scoped_special_function_id

suffix_decl_specified_ids ::=
    suffix_built_in_decl_specifier
    | suffix_built_in_decl_specifier suffix_named_decl_specifiers.sf
    | suffix_named_decl_specifiers.sf

suffix_decl_specified_scope ::=
    suffix_named_decl_specifiers SCOPE
    | suffix_built_in_decl_specifier suffix_named_decl_specifiers SCOPE
    | suffix_built_in_decl_specifier SCOPE

decl_specifier_affix ::=
    storage_class_specifier
    | function_specifier
    | FRIEND
    | TYPEDEF
    | cv_qualifier

decl_specifier_suffix ::=
    decl_specifier_affix

decl_specifier_prefix ::=
    decl_specifier_affix
    | TEMPLATE decl_specifier_prefix

storage_class_specifier ::=
    REGISTER
    | STATIC
    | MUTABLE
    | EXTERN
    | AUTO

function_specifier ::=
    EXPLICIT
    | INLINE
    | VIRTUAL

type_specifier ::=
    simple_type_specifier
    | elaborate_type_specifier
    | cv_qualifier

elaborate_type_specifier ::=
    class_specifier
    | enum_specifier
    | elaborated_type_specifier
    | TEMPLATE elaborate_type_specifier

simple_type_specifier ::=
    scoped_id
    | built_in_type_specifier

built_in_type_specifier ::=
    CHAR
    | WCHAR_T
    | BOOL
    | SHORT
    | INT
    | LONG
    | SIGNED
    | UNSIGNED
    | FLOAT
    | DOUBLE
    | VOID

elaborated_type_specifier ::=
    elaborated_class_specifier
    | elaborated_enum_specifier
    | TYPENAME scoped_id

elaborated_enum_specifier ::=
    ENUM scoped_id

enum_specifier ::=
    ENUM scoped_id enumerator_clause
    | ENUM enumerator_clause

enumerator_clause ::=
    '{' enumerator_list_ecarb
    | '{' enumerator_list enumerator_list_ecarb
    | '{' enumerator_list ',' enumerator_definition_ecarb

enumerator_list_ecarb ::=
    '}'
    | bang error '}'

enumerator_definition_ecarb ::=
    '}'
    | bang error '}'

enumerator_definition_filler ::=
    /* empty */
    | bang error ','

enumerator_list_head ::=
    enumerator_definition_filler
    | enumerator_list ',' enumerator_definition_filler

enumerator_list ::=
    enumerator_list_head enumerator_definition

enumerator_definition ::=
    enumerator
    | enumerator '=' constant_expression

enumerator ::=
    identifier

namespace_definition ::=
    NAMESPACE scoped_id compound_declaration
    | NAMESPACE compound_declaration

namespace_alias_definition ::=
    NAMESPACE scoped_id '=' scoped_id ';'

using_declaration ::=
    USING declarator_id ';'
    | USING TYPENAME declarator_id ';'

using_directive ::=
    USING NAMESPACE scoped_id ';'

asm_definition ::=
    ASM '(' string ')' ';'

linkage_specification ::=
    EXTERN string looping_declaration
    | EXTERN string compound_declaration

init_declarations ::=
    assignment_expression ',' init_declaration
    | init_declarations ',' init_declaration

init_declaration ::=
    assignment_expression

star_ptr_operator ::=
    '*'
    | star_ptr_operator cv_qualifier

nested_ptr_operator ::=
    star_ptr_operator
    | id_scope nested_ptr_operator

ptr_operator ::=
    '&'
    | nested_ptr_operator
    | global_scope nested_ptr_operator

ptr_operator_seq ::=
    ptr_operator
    | ptr_operator ptr_operator_seq

ptr_operator_seq.opt ::=
    /* empty */
    | ptr_operator ptr_operator_seq.opt

cv_qualifier_seq.opt ::=
    /* empty */
    | cv_qualifier_seq.opt cv_qualifier

cv_qualifier ::=
    CONST
    | VOLATILE

type_id ::=
    type_specifier abstract_declarator.opt
    | type_specifier type_id

abstract_declarator.opt ::=
    /* empty */
    | ptr_operator abstract_declarator.opt
    | direct_abstract_declarator

direct_abstract_declarator.opt ::=
    /* empty */
    | direct_abstract_declarator

direct_abstract_declarator ::=
    direct_abstract_declarator.opt parenthesis_clause
    | direct_abstract_declarator.opt '[' ']'
    | direct_abstract_declarator.opt '[' constant_expression ']'

parenthesis_clause ::=
    parameters_clause cv_qualifier_seq.opt
    | parameters_clause cv_qualifier_seq.opt exception_specification

parameters_clause ::=
    '(' parameter_declaration_clause ')'

parameter_declaration_clause ::=
    /* empty */
    | parameter_declaration_list
    | parameter_declaration_list ELLIPSIS

parameter_declaration_list ::=
    parameter_declaration
    | parameter_declaration_list ',' parameter_declaration

abstract_pointer_declaration ::=
    ptr_operator_seq
    | multiplicative_expression star_ptr_operator ptr_operator_seq.opt

abstract_parameter_declaration ::=
    abstract_pointer_declaration
    | and_expression '&'
    | and_expression '&' abstract_pointer_declaration

special_parameter_declaration ::=
    abstract_parameter_declaration
    | abstract_parameter_declaration '=' assignment_expression
    | ELLIPSIS

parameter_declaration ::=
    assignment_expression
    | special_parameter_declaration
    | decl_specifier_prefix parameter_declaration

templated_parameter_declaration ::=
    templated_assignment_expression
    | templated_abstract_declaration
    | templated_abstract_declaration '=' templated_assignment_expression
    | decl_specifier_prefix templated_parameter_declaration

templated_abstract_declaration ::=
    abstract_pointer_declaration
    | templated_and_expression '&'
    | templated_and_expression '&' abstract_pointer_declaration

function_definition ::=
    ctor_definition
    | func_definition

func_definition ::=
    assignment_expression function_try_block
    | assignment_expression function_body
    | decl_specifier_prefix func_definition

ctor_definition ::=
    constructor_head function_try_block
    | constructor_head function_body
    | decl_specifier_prefix ctor_definition

constructor_head ::=
    bit_field_init_declaration
    | constructor_head ',' assignment_expression

function_try_block ::=
    TRY function_block handler_seq

function_block ::=
    ctor_initializer.opt function_body

function_body ::=
    compound_statement

initializer_clause ::=
    assignment_expression
    | braced_initializer

braced_initializer ::=
    '{' initializer_list '}'
    | '{' initializer_list ',' '}'
    | '{' '}'
    | '{' looping_initializer_clause '#' bang error '}'
    | '{' initializer_list ',' looping_initializer_clause '#' bang error '}'

initializer_list ::=
    looping_initializer_clause
    | initializer_list ',' looping_initializer_clause

looping_initializer_clause ::=
    start_search looped_initializer_clause

looped_initializer_clause ::=
    initializer_clause
    | advance_search '+' looped_initializer_clause
    | advance_search '-'

colon_mark ::=
    ':'

elaborated_class_specifier ::=
    class_key scoped_id
    | class_key scoped_id colon_mark error

class_specifier_head ::=
    class_key scoped_id colon_mark base_specifier_list '{'
    | class_key ':' base_specifier_list '{'
    | class_key scoped_id '{'
    | class_key '{'

class_key ::=
    CLASS
    | STRUCT
    | UNION

class_specifier ::=
    class_specifier_head member_specification.opt '}'
    | class_specifier_head member_specification.opt util looping_member_declaration '#' bang error '}'

member_specification.opt ::=
    /* empty */
    | member_specification.opt util looping_member_declaration
    | member_specification.opt util looping_member_declaration '#' bang error ';'

looping_member_declaration ::=
    start_search looped_member_declaration

looped_member_declaration ::=
    member_declaration
    | advance_search '+' looped_member_declaration
    | advance_search '-'

member_declaration ::=
    accessibility_specifier
    | simple_member_declaration
    | function_definition
    | using_declaration
    | template_declaration

simple_member_declaration ::=
    ';'
    | assignment_expression ';'
    | constructor_head ';'
    | member_init_declarations ';'
    | decl_specifier_prefix simple_member_declaration

member_init_declarations ::=
    assignment_expression ',' member_init_declaration
    | constructor_head ',' bit_field_init_declaration
    | member_init_declarations ',' member_init_declaration

member_init_declaration ::=
    assignment_expression
    | bit_field_init_declaration

accessibility_specifier ::=
    access_specifier ':'

bit_field_declaration ::=
    assignment_expression ':' bit_field_width
    | ':' bit_field_width

bit_field_width ::=
    logical_or_expression
    | logical_or_expression '?' bit_field_width ':' bit_field_width

bit_field_init_declaration ::=
    bit_field_declaration
    | bit_field_declaration '=' initializer_clause

base_specifier_list ::=
    base_specifier
    | base_specifier_list ',' base_specifier

base_specifier ::=
    scoped_id
    | access_specifier base_specifier
    | VIRTUAL base_specifier

access_specifier ::=
    PRIVATE
    | PROTECTED
    | PUBLIC

conversion_function_id ::=
    OPERATOR conversion_type_id

conversion_type_id ::=
    type_specifier ptr_operator_seq.opt
    | type_specifier conversion_type_id

ctor_initializer.opt ::=
    /* empty */
    | ctor_initializer

ctor_initializer ::=
    ':' mem_initializer_list
    | ':' mem_initializer_list bang error

mem_initializer_list ::=
    mem_initializer
    | mem_initializer_list_head mem_initializer

mem_initializer_list_head ::=
    mem_initializer_list ','
    | mem_initializer_list bang error ','

mem_initializer ::=
    mem_initializer_id '(' expression_list.opt ')'

mem_initializer_id ::=
    scoped_id

operator_function_id ::=
    OPERATOR operator

operator ::=
    NEW
    | DELETE
    | '+'
    | '-'
    | '*'
    | '/'
    | '%'
    | '^'
    | '&'
    | '|'
    | '~'
    | '!'
    | '='
    | '<'
    | '>'
    | ASS_ADD
    | ASS_SUB
    | ASS_MUL
    | ASS_DIV
    | ASS_MOD
    | ASS_XOR
    | ASS_AND
    | ASS_OR
    | SHL
    | SHR
    | ASS_SHR
    | ASS_SHL
    | EQ
    | NE
    | LE
    | GE
    | LOG_AND
    | LOG_OR
    | INC
    | DEC
    | ','
    | ARROW_STAR
    | ARROW
    | '(' ')'
    | '[' ']'

template_declaration ::=
    template_parameter_clause declaration
    | EXPORT template_declaration

template_parameter_clause ::=
    TEMPLATE '<' template_parameter_list '>'

template_parameter_list ::=
    template_parameter
    | template_parameter_list ',' template_parameter

template_parameter ::=
    simple_type_parameter
    | simple_type_parameter '=' type_id
    | templated_type_parameter
    | templated_type_parameter '=' identifier
    | templated_parameter_declaration
    | bang error

simple_type_parameter ::=
    CLASS
    | TYPENAME

templated_type_parameter ::=
    template_parameter_clause CLASS
    | template_parameter_clause CLASS identifier

template_id ::=
    TEMPLATE identifier '<' template_argument_list '>'
    | TEMPLATE template_id

template_argument_list ::=
    template_argument
    | template_argument_list ',' template_argument

template_argument ::=
    templated_parameter_declaration

explicit_specialization ::=
    TEMPLATE '<' '>' declaration

try_block ::=
    TRY compound_statement handler_seq

handler_seq ::=
    handler
    | handler handler_seq

handler ::=
    CATCH '(' exception_declaration ')' compound_statement

exception_declaration ::=
    parameter_declaration

throw_expression ::=
    THROW
    | THROW assignment_expression

templated_throw_expression ::=
    THROW
    | THROW templated_assignment_expression

exception_specification ::=
    THROW '(' ')'
    | THROW '(' type_id_list ')'

type_id_list ::=
    type_id
    | type_id_list ',' type_id

advance_search ::=
    error

bang ::=
    /* empty */

mark ::=
    /* empty */

nest ::=
    /* empty */

start_search ::=
    /* empty */

start_search1 ::=
    /* empty */

util ::=

// Tokens

ASM ::= "asm"
AUTO ::= "auto"
BOOL ::= "bool"
BREAK ::= "break"
CASE ::= "case"
CATCH ::= "catch"
CHAR ::= "char"
CLASS ::= "class"
CONST ::= "const"
CONST_CAST ::= "const_cast"
CONTINUE ::= "continue"
DEFAULT ::= "default"
DELETE ::= "delete"
DO ::= "do"
DOUBLE ::= "double"
DYNAMIC_CAST ::= "dynamic_cast"
ELSE ::= "else"
ENUM ::= "enum"
EXPLICIT ::= "explicit"
EXPORT ::= "export"
EXTERN ::= "extern"
FALSE ::= "false"
FLOAT ::= "float"
FOR ::= "for"
FRIEND ::= "friend"
GOTO ::= "goto"
IF ::= "if"
INLINE ::= "inline"
INT ::= "int"
LONG ::= "long"
MUTABLE ::= "mutable"
NAMESPACE ::= "namespace"
NEW ::= "new"
OPERATOR ::= "operator"
PRIVATE ::= "private"
PROTECTED ::= "protected"
PUBLIC ::= "public"
REGISTER ::= "register"
REINTERPRET_CAST ::= "reinterpret_cast"
RETURN ::= "return"
SHORT ::= "short"
SIGNED ::= "signed"
SIZEOF ::= "sizeof"
STATIC ::= "static"
STATIC_CAST ::= "static_cast"
STRUCT ::= "struct"
SWITCH ::= "switch"
TEMPLATE ::= "template"
THIS ::= "this"
THROW ::= "throw"
TRUE ::= "true"
TRY ::= "try"
TYPEDEF ::= "typedef"
TYPEID ::= "typeid"
TYPENAME ::= "typename"
UNION ::= "union"
UNSIGNED ::= "unsigned"
USING ::= "using"
VIRTUAL ::= "virtual"
VOID ::= "void"
VOLATILE ::= "volatile"
WCHAR_T ::= "wchar_t"
WHILE ::= "while"

SCOPE ::= "::"
ELLIPSIS ::= "..."
SHL ::= "<<"
SHR ::= ">>"
EQ ::= "=="
NE ::= "!="
LE ::= "<="
GE ::= ">="
LOG_AND ::= "&&"
LOG_OR ::= "||"
INC ::= "++"
DEC ::= "--"
ARROW_STAR ::= "->*"
ARROW ::= "->"
DOT_STAR ::= ".*"
ASS_ADD ::= "+="
ASS_SUB ::= "-="
ASS_MUL ::= "*="
ASS_DIV ::= "/="
ASS_MOD ::= "%="
ASS_XOR ::= "^="
ASS_AND ::= "&="
ASS_OR ::= "|="
ASS_SHR ::= ">>="
ASS_SHL ::= "<<="
AthrunArthur commented 2 years ago

Cool, nice work