athrunarthur / cxxparser Goto Github PK
View Code? Open in Web Editor NEWC++ parser for Lex and YACC
C++ parser for Lex and YACC
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 ::= "<<="
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.