Skip to content

Grammar railroad diagram #106

@mingodad

Description

@mingodad

Using the sql output of the lemon parser generator with the query shown bellow give us an EBNF understood by https://www.bottlecaps.de/rr/ui to generate railroad diagrams.

lemon -S zephir.lemon 
select name || ' ::=' || group_concat(	case when hasOr == 1 then ' (' || trim(rtxt) || ')'	else	case when length(rtxt) == 0 then ' /* empty */' else rtxt end	end, '	|') from (	select lhs, name, substr(txt, instr(txt, tbl.sep) + length(tbl.sep)) rtxt, (instr(txt, '|') > 0) hasOr	from rule left join symbol on lhs=id, (select '::=' as sep) tbl ) as t group by lhs; 

We can see a railroad diagram for the grammar in parser/zephir.lemon with tokens manually added from parser/scanner.re, copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui in the tab Edit Grammar then switching to the tab View Diagram.

input ::= xx_language xx_language ::= xx_top_statement_list xx_top_statement_list ::= xx_top_statement_list xx_top_statement | xx_top_statement xx_top_statement ::= xx_namespace_def | xx_use_aliases | xx_function_def | xx_class_def | xx_interface_def | xx_comment | xx_cblock xx_namespace_def ::= NAMESPACE IDENTIFIER DOTCOMMA | USE xx_use_aliases_list DOTCOMMA xx_use_aliases ::= IDENTIFIER | IDENTIFIER AS IDENTIFIER xx_function_def ::= FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE DOTCOMMA | FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE DOTCOMMA | FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_class_def ::= CLASS IDENTIFIER xx_class_body | CLASS IDENTIFIER EXTENDS IDENTIFIER xx_class_body | CLASS IDENTIFIER IMPLEMENTS xx_implements_list xx_class_body | CLASS IDENTIFIER EXTENDS IDENTIFIER IMPLEMENTS xx_implements_list xx_class_body | ABSTRACT CLASS IDENTIFIER xx_class_body | ABSTRACT CLASS IDENTIFIER EXTENDS IDENTIFIER xx_class_body | ABSTRACT CLASS IDENTIFIER IMPLEMENTS xx_implements_list xx_class_body | ABSTRACT CLASS IDENTIFIER EXTENDS IDENTIFIER IMPLEMENTS xx_implements_list xx_class_body | FINAL CLASS IDENTIFIER xx_class_body | FINAL CLASS IDENTIFIER EXTENDS IDENTIFIER xx_class_body | FINAL CLASS IDENTIFIER IMPLEMENTS xx_implements_list xx_class_body | FINAL CLASS IDENTIFIER EXTENDS IDENTIFIER IMPLEMENTS xx_implements_list xx_class_body xx_interface_def ::= INTERFACE IDENTIFIER xx_interface_body | INTERFACE IDENTIFIER EXTENDS xx_implements_list xx_interface_body xx_comment ::= COMMENT xx_cblock ::= CBLOCK xx_use_aliases_list ::= xx_use_aliases_list COMMA xx_use_aliases | xx_use_aliases xx_method_return_type ::= VOID | xx_method_return_type_list xx_parameter_list ::= xx_parameter_list COMMA xx_parameter | xx_parameter xx_statement_list ::= xx_statement_list xx_statement | xx_statement xx_interface_body ::= BRACKET_OPEN BRACKET_CLOSE | BRACKET_OPEN xx_interface_definition BRACKET_CLOSE xx_implements_list ::= xx_implements_list COMMA xx_implements | xx_implements xx_class_body ::= BRACKET_OPEN BRACKET_CLOSE | BRACKET_OPEN xx_class_definition BRACKET_CLOSE xx_class_definition ::= xx_class_properties_definition | xx_class_consts_definition | xx_class_methods_definition | xx_class_properties_definition xx_class_methods_definition | xx_class_properties_definition xx_class_consts_definition | xx_class_consts_definition xx_class_properties_definition | xx_class_consts_definition xx_class_methods_definition | xx_class_properties_definition xx_class_consts_definition xx_class_methods_definition | xx_class_consts_definition xx_class_properties_definition xx_class_methods_definition xx_implements ::= IDENTIFIER xx_interface_definition ::= xx_class_consts_definition | xx_interface_methods_definition | xx_class_consts_definition xx_interface_methods_definition xx_class_properties_definition ::= xx_class_properties_definition xx_class_property_definition | xx_class_property_definition xx_class_consts_definition ::= xx_class_consts_definition xx_class_const_definition | xx_class_const_definition xx_class_methods_definition ::= xx_class_methods_definition xx_class_method_definition | xx_class_method_definition xx_interface_methods_definition ::= xx_interface_methods_definition xx_interface_method_definition | xx_interface_method_definition xx_class_property_definition ::= COMMENT xx_visibility_list IDENTIFIER DOTCOMMA | xx_visibility_list IDENTIFIER DOTCOMMA | COMMENT xx_visibility_list IDENTIFIER ASSIGN xx_literal_expr DOTCOMMA | xx_visibility_list IDENTIFIER ASSIGN xx_literal_expr DOTCOMMA | COMMENT xx_visibility_list IDENTIFIER xx_class_property_shortcuts DOTCOMMA | xx_visibility_list IDENTIFIER xx_class_property_shortcuts DOTCOMMA | COMMENT xx_visibility_list IDENTIFIER ASSIGN xx_literal_expr xx_class_property_shortcuts DOTCOMMA | xx_visibility_list IDENTIFIER ASSIGN xx_literal_expr xx_class_property_shortcuts DOTCOMMA xx_visibility_list ::= xx_visibility_list xx_visibility | xx_visibility xx_literal_expr ::= INTEGER | CHAR | STRING | DOUBLE | NULL | FALSE | TRUE | IDENTIFIER DOUBLECOLON CONSTANT | CONSTANT | SBRACKET_OPEN SBRACKET_CLOSE | SBRACKET_OPEN xx_literal_array_list SBRACKET_CLOSE xx_class_property_shortcuts ::= BRACKET_OPEN BRACKET_CLOSE | BRACKET_OPEN xx_class_property_shortcuts_list BRACKET_CLOSE xx_class_property_shortcuts_list ::= xx_class_property_shortcuts_list COMMA xx_class_property_shortcut | xx_class_property_shortcut xx_class_property_shortcut ::= IDENTIFIER | COMMENT IDENTIFIER xx_class_const_definition ::= COMMENT CONST CONSTANT ASSIGN xx_literal_expr DOTCOMMA | CONST CONSTANT ASSIGN xx_literal_expr DOTCOMMA | COMMENT CONST IDENTIFIER ASSIGN xx_literal_expr DOTCOMMA | CONST IDENTIFIER ASSIGN xx_literal_expr DOTCOMMA xx_class_method_definition ::= xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN xx_statement_list BRACKET_CLOSE | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN xx_statement_list BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN xx_statement_list BRACKET_CLOSE | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_interface_method_definition ::= xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE ARROW xx_method_return_type DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE DOTCOMMA | xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE DOTCOMMA | COMMENT xx_visibility_list FUNCTION IDENTIFIER PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE DOTCOMMA xx_visibility ::= INTERNAL | PUBLIC | PROTECTED | PRIVATE | STATIC | SCOPED | INLINE | DEPRECATED | ABSTRACT | FINAL xx_method_return_type_list ::= xx_method_return_type_list BITWISE_OR xx_method_return_type_item | xx_method_return_type_item xx_method_return_type_item ::= xx_parameter_type | NULL | THIS | xx_parameter_type NOT | xx_parameter_cast | xx_parameter_cast_collection xx_parameter_type ::= TYPE_INTEGER | TYPE_UINTEGER | TYPE_LONG | TYPE_ULONG | TYPE_CHAR | TYPE_UCHAR | TYPE_DOUBLE | TYPE_BOOL | TYPE_STRING | TYPE_ARRAY | TYPE_VAR | TYPE_CALLABLE | TYPE_RESOURCE | TYPE_OBJECT xx_parameter_cast ::= LESS IDENTIFIER GREATER xx_parameter_cast_collection ::= LESS IDENTIFIER SBRACKET_OPEN SBRACKET_CLOSE GREATER xx_parameter ::= IDENTIFIER | BITWISE_AND IDENTIFIER | CONST IDENTIFIER | CONST BITWISE_AND IDENTIFIER | xx_parameter_type IDENTIFIER | xx_parameter_type BITWISE_AND IDENTIFIER | CONST xx_parameter_type IDENTIFIER | CONST xx_parameter_type BITWISE_AND IDENTIFIER | xx_parameter_type NOT IDENTIFIER | xx_parameter_type NOT BITWISE_AND IDENTIFIER | CONST xx_parameter_type NOT IDENTIFIER | CONST xx_parameter_type NOT BITWISE_AND IDENTIFIER | xx_parameter_cast IDENTIFIER | xx_parameter_cast BITWISE_AND IDENTIFIER | CONST xx_parameter_cast IDENTIFIER | CONST xx_parameter_cast BITWISE_AND IDENTIFIER | IDENTIFIER ASSIGN xx_literal_expr | BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | CONST IDENTIFIER ASSIGN xx_literal_expr | CONST BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | xx_parameter_type IDENTIFIER ASSIGN xx_literal_expr | xx_parameter_type BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | CONST xx_parameter_type IDENTIFIER ASSIGN xx_literal_expr | CONST xx_parameter_type BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | xx_parameter_type NOT IDENTIFIER ASSIGN xx_literal_expr | xx_parameter_type NOT BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | CONST xx_parameter_type NOT IDENTIFIER ASSIGN xx_literal_expr | CONST xx_parameter_type NOT BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | xx_parameter_cast IDENTIFIER ASSIGN xx_literal_expr | xx_parameter_cast BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr | CONST xx_parameter_cast IDENTIFIER ASSIGN xx_literal_expr | CONST xx_parameter_cast BITWISE_AND IDENTIFIER ASSIGN xx_literal_expr xx_statement ::= xx_cblock | xx_let_statement | xx_if_statement | xx_loop_statement | xx_echo_statement | xx_return_statement | xx_require_statement | xx_fetch_statement | xx_fcall_statement | xx_mcall_statement | xx_scall_statement | xx_unset_statement | xx_throw_statement | xx_declare_statement | xx_break_statement | xx_continue_statement | xx_while_statement | xx_do_while_statement | xx_try_catch_statement | xx_switch_statement | xx_for_statement | xx_comment | xx_empty_statement xx_let_statement ::= LET xx_let_assignments DOTCOMMA xx_if_statement ::= IF xx_eval_expr BRACKET_OPEN BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN BRACKET_CLOSE xx_elseif_statements | IF xx_eval_expr BRACKET_OPEN BRACKET_CLOSE ELSE BRACKET_OPEN BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN BRACKET_CLOSE xx_elseif_statements ELSE BRACKET_OPEN BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_elseif_statements | IF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE ELSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_elseif_statements ELSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE ELSE BRACKET_OPEN BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_elseif_statements ELSE BRACKET_OPEN BRACKET_CLOSE | IF xx_eval_expr BRACKET_OPEN BRACKET_CLOSE ELSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_loop_statement ::= LOOP BRACKET_OPEN BRACKET_CLOSE | LOOP BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_echo_statement ::= ECHO xx_echo_expressions DOTCOMMA xx_return_statement ::= RETURN xx_common_expr DOTCOMMA | RETURN DOTCOMMA xx_require_statement ::= REQUIRE xx_common_expr DOTCOMMA xx_fetch_statement ::= xx_fetch_expr DOTCOMMA xx_fcall_statement ::= xx_fcall_expr DOTCOMMA xx_mcall_statement ::= xx_mcall_expr DOTCOMMA xx_scall_statement ::= xx_scall_expr DOTCOMMA xx_unset_statement ::= UNSET xx_common_expr DOTCOMMA xx_throw_statement ::= THROW xx_common_expr DOTCOMMA xx_declare_statement ::= TYPE_INTEGER xx_declare_variable_list DOTCOMMA | TYPE_UINTEGER xx_declare_variable_list DOTCOMMA | TYPE_CHAR xx_declare_variable_list DOTCOMMA | TYPE_UCHAR xx_declare_variable_list DOTCOMMA | TYPE_LONG xx_declare_variable_list DOTCOMMA | TYPE_ULONG xx_declare_variable_list DOTCOMMA | TYPE_DOUBLE xx_declare_variable_list DOTCOMMA | TYPE_STRING xx_declare_variable_list DOTCOMMA | TYPE_BOOL xx_declare_variable_list DOTCOMMA | TYPE_VAR xx_declare_variable_list DOTCOMMA | TYPE_ARRAY xx_declare_variable_list DOTCOMMA xx_break_statement ::= BREAK DOTCOMMA xx_continue_statement ::= CONTINUE DOTCOMMA xx_while_statement ::= WHILE xx_eval_expr BRACKET_OPEN BRACKET_CLOSE | WHILE xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_do_while_statement ::= DO BRACKET_OPEN BRACKET_CLOSE WHILE xx_eval_expr DOTCOMMA | DO BRACKET_OPEN xx_statement_list BRACKET_CLOSE WHILE xx_eval_expr DOTCOMMA xx_try_catch_statement ::= TRY BRACKET_OPEN BRACKET_CLOSE | TRY BRACKET_OPEN xx_statement_list BRACKET_CLOSE | TRY BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_catch_statement_list xx_switch_statement ::= SWITCH xx_eval_expr BRACKET_OPEN BRACKET_CLOSE | SWITCH xx_eval_expr BRACKET_OPEN xx_case_clauses BRACKET_CLOSE xx_for_statement ::= FOR IDENTIFIER IN xx_common_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR IDENTIFIER IN xx_common_expr BRACKET_OPEN BRACKET_CLOSE | FOR IDENTIFIER IN REVERSE xx_common_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR IDENTIFIER IN REVERSE xx_common_expr BRACKET_OPEN BRACKET_CLOSE | FOR IDENTIFIER COMMA IDENTIFIER IN xx_common_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR IDENTIFIER COMMA IDENTIFIER IN xx_common_expr BRACKET_OPEN BRACKET_CLOSE | FOR IDENTIFIER COMMA IDENTIFIER IN REVERSE xx_common_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR PARENTHESES_OPEN IDENTIFIER IN xx_common_expr PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR PARENTHESES_OPEN IDENTIFIER IN xx_common_expr PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FOR PARENTHESES_OPEN IDENTIFIER IN REVERSE xx_common_expr PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR PARENTHESES_OPEN IDENTIFIER COMMA IDENTIFIER IN xx_common_expr PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FOR PARENTHESES_OPEN IDENTIFIER COMMA IDENTIFIER IN xx_common_expr PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FOR PARENTHESES_OPEN IDENTIFIER COMMA IDENTIFIER IN REVERSE xx_common_expr PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_empty_statement ::= DOTCOMMA xx_eval_expr ::= xx_common_expr xx_elseif_statements ::= xx_elseif_statements xx_elseif_statement | xx_elseif_statement xx_elseif_statement ::= ELSEIF xx_eval_expr BRACKET_OPEN BRACKET_CLOSE | ELSEIF xx_eval_expr BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_case_clauses ::= xx_case_clauses xx_case_clause | xx_case_clause xx_case_clause ::= CASE xx_eval_expr COLON | CASE xx_eval_expr COLON xx_statement_list | DEFAULT COLON xx_statement_list xx_catch_statement_list ::= xx_catch_statement_list xx_catch_statement | xx_catch_statement xx_catch_statement ::= CATCH xx_catch_classes_list BRACKET_OPEN xx_statement_list BRACKET_CLOSE | CATCH xx_catch_classes_list BRACKET_OPEN BRACKET_CLOSE | CATCH xx_catch_classes_list COMMA IDENTIFIER BRACKET_OPEN BRACKET_CLOSE | CATCH xx_catch_classes_list COMMA IDENTIFIER BRACKET_OPEN xx_statement_list BRACKET_CLOSE xx_catch_classes_list ::= xx_catch_classes_list BITWISE_OR xx_catch_class | xx_catch_class xx_catch_class ::= IDENTIFIER xx_common_expr ::= BITWISE_AND xx_common_expr | NOT xx_common_expr | BITWISE_NOT xx_common_expr | SUB xx_common_expr | PLUS xx_common_expr | ISSET xx_common_expr | REQUIRE xx_common_expr | CLONE xx_common_expr | EMPTY xx_common_expr | LIKELY xx_common_expr | UNLIKELY xx_common_expr | xx_common_expr EQUALS xx_common_expr | xx_common_expr NOTEQUALS xx_common_expr | xx_common_expr IDENTICAL xx_common_expr | xx_common_expr NOTIDENTICAL xx_common_expr | xx_common_expr LESS xx_common_expr | xx_common_expr GREATER xx_common_expr | xx_common_expr LESSEQUAL xx_common_expr | xx_common_expr GREATEREQUAL xx_common_expr | PARENTHESES_OPEN xx_common_expr PARENTHESES_CLOSE | PARENTHESES_OPEN xx_parameter_type PARENTHESES_CLOSE xx_common_expr | LESS IDENTIFIER GREATER xx_common_expr | xx_common_expr ARROW IDENTIFIER | xx_common_expr ARROW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE | xx_common_expr ARROW BRACKET_OPEN STRING BRACKET_CLOSE | IDENTIFIER DOUBLECOLON IDENTIFIER | IDENTIFIER DOUBLECOLON CONSTANT | xx_common_expr SBRACKET_OPEN xx_common_expr SBRACKET_CLOSE | xx_common_expr ADD xx_common_expr | xx_common_expr SUB xx_common_expr | xx_common_expr MUL xx_common_expr | xx_common_expr DIV xx_common_expr | xx_common_expr MOD xx_common_expr | xx_common_expr CONCAT xx_common_expr | xx_common_expr AND xx_common_expr | xx_common_expr OR xx_common_expr | xx_common_expr BITWISE_OR xx_common_expr | xx_common_expr BITWISE_AND xx_common_expr | xx_common_expr BITWISE_XOR xx_common_expr | xx_common_expr BITWISE_SHIFTLEFT xx_common_expr | xx_common_expr BITWISE_SHIFTRIGHT xx_common_expr | xx_common_expr INSTANCEOF xx_common_expr | xx_common_expr INCLUSIVE_RANGE xx_common_expr | xx_common_expr EXCLUSIVE_RANGE xx_common_expr | xx_fetch_expr | TYPEOF xx_common_expr | IDENTIFIER | INTEGER | STRING | ISTRING | CHAR | DOUBLE | NULL | TRUE | FALSE | CONSTANT | SBRACKET_OPEN SBRACKET_CLOSE | SBRACKET_OPEN xx_array_list SBRACKET_CLOSE | NEW STATIC | NEW STATIC PARENTHESES_OPEN PARENTHESES_CLOSE | NEW STATIC PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | NEW IDENTIFIER | NEW IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE | NEW IDENTIFIER PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | NEW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE | NEW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN PARENTHESES_CLOSE | NEW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | NEW xx_parameter_type PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | xx_mcall_expr | xx_scall_expr | xx_fcall_expr | xx_common_expr QUESTION xx_common_expr COLON xx_common_expr | xx_common_expr QUESTION COLON xx_common_expr | FUNCTION PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN PARENTHESES_CLOSE USE PARENTHESES_OPEN xx_use_parameter_list PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN PARENTHESES_CLOSE USE PARENTHESES_OPEN xx_use_parameter_list PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE USE PARENTHESES_OPEN xx_use_parameter_list PARENTHESES_CLOSE BRACKET_OPEN BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | FUNCTION PARENTHESES_OPEN xx_parameter_list PARENTHESES_CLOSE USE PARENTHESES_OPEN xx_use_parameter_list PARENTHESES_CLOSE BRACKET_OPEN xx_statement_list BRACKET_CLOSE | IDENTIFIER DOUBLEARROW xx_common_expr xx_let_assignments ::= xx_let_assignments COMMA xx_let_assignment | xx_let_assignment xx_let_assignment ::= IDENTIFIER xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW IDENTIFIER xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW BRACKET_OPEN STRING BRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW IDENTIFIER SBRACKET_OPEN SBRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW IDENTIFIER xx_array_offset_list xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW IDENTIFIER xx_array_offset_list SBRACKET_OPEN SBRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER DOUBLECOLON IDENTIFIER xx_assignment_operator xx_assign_expr | IDENTIFIER DOUBLECOLON IDENTIFIER SBRACKET_OPEN SBRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER DOUBLECOLON IDENTIFIER xx_array_offset_list xx_assignment_operator xx_assign_expr | IDENTIFIER DOUBLECOLON IDENTIFIER xx_array_offset_list SBRACKET_OPEN SBRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER SBRACKET_OPEN SBRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER xx_array_offset_list xx_assignment_operator xx_assign_expr | IDENTIFIER xx_array_offset_list SBRACKET_OPEN SBRACKET_CLOSE xx_assignment_operator xx_assign_expr | IDENTIFIER ARROW IDENTIFIER INCR | IDENTIFIER ARROW IDENTIFIER DECR | IDENTIFIER INCR | IDENTIFIER DECR | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE xx_assignment_operator xx_assign_expr | BRACKET_OPEN STRING BRACKET_CLOSE xx_assignment_operator xx_assign_expr xx_assignment_operator ::= ASSIGN | ASSIGN_ADD | ASSIGN_SUB | ASSIGN_MUL | ASSIGN_DIV | ASSIGN_CONCAT | ASSIGN_MOD | ASSIGN_BITWISE_AND | ASSIGN_BITWISE_OR | ASSIGN_BITWISE_XOR | ASSIGN_BITWISE_SHIFTLEFT | ASSIGN_BITWISE_SHIFTRIGHT xx_assign_expr ::= xx_common_expr xx_array_offset_list ::= xx_array_offset_list xx_array_offset | xx_array_offset xx_array_offset ::= SBRACKET_OPEN xx_index_expr SBRACKET_CLOSE xx_index_expr ::= xx_common_expr xx_echo_expressions ::= xx_echo_expressions COMMA xx_echo_expression | xx_echo_expression xx_echo_expression ::= xx_common_expr xx_mcall_expr ::= xx_common_expr ARROW IDENTIFIER PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | xx_common_expr ARROW IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE | xx_common_expr ARROW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | xx_common_expr ARROW BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN PARENTHESES_CLOSE | xx_common_expr ARROW BRACKET_OPEN STRING BRACKET_CLOSE PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | xx_common_expr ARROW BRACKET_OPEN STRING BRACKET_CLOSE PARENTHESES_OPEN PARENTHESES_CLOSE xx_fcall_expr ::= IDENTIFIER PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN PARENTHESES_CLOSE xx_scall_expr ::= IDENTIFIER DOUBLECOLON IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE | IDENTIFIER DOUBLECOLON IDENTIFIER PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | STATIC DOUBLECOLON IDENTIFIER PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | STATIC DOUBLECOLON IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE DOUBLECOLON IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE DOUBLECOLON IDENTIFIER PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE DOUBLECOLON BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN PARENTHESES_CLOSE | BRACKET_OPEN IDENTIFIER BRACKET_CLOSE DOUBLECOLON BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE | IDENTIFIER DOUBLECOLON BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN PARENTHESES_CLOSE | IDENTIFIER DOUBLECOLON BRACKET_OPEN IDENTIFIER BRACKET_CLOSE PARENTHESES_OPEN xx_call_parameters PARENTHESES_CLOSE xx_fetch_expr ::= FETCH IDENTIFIER COMMA xx_common_expr xx_declare_variable_list ::= xx_declare_variable_list COMMA xx_declare_variable | xx_declare_variable xx_declare_variable ::= IDENTIFIER | IDENTIFIER ASSIGN xx_common_expr xx_array_list ::= xx_array_list COMMA xx_array_item | xx_array_item xx_call_parameters ::= xx_call_parameters COMMA xx_call_parameter | xx_call_parameter xx_call_parameter ::= xx_common_expr | IDENTIFIER COLON xx_common_expr xx_use_parameter_list ::= xx_use_parameter_list COMMA xx_use_parameter | xx_use_parameter xx_use_parameter ::= IDENTIFIER | BITWISE_AND IDENTIFIER | CONST IDENTIFIER | CONST BITWISE_AND IDENTIFIER xx_array_item ::= xx_array_key COLON xx_array_value | xx_array_value xx_array_key ::= xx_common_expr xx_array_value ::= xx_common_expr xx_literal_array_list ::= xx_literal_array_list COMMA xx_literal_array_item | xx_literal_array_item xx_literal_array_item ::= xx_literal_array_key COLON xx_literal_array_value | xx_literal_array_value xx_literal_array_key ::= IDENTIFIER | STRING | INTEGER xx_literal_array_value ::= xx_literal_expr // Tokens NULL ::= "null" FALSE ::= "false" TRUE ::= "true" NAMESPACE ::= "namespace" USE ::= "use" AS ::= "as" INTERFACE ::= "interface" CLASS ::= "class" EXTENDS ::= "extends" IMPLEMENTS ::= "implements" INTERNAL ::= "internal" PUBLIC ::= "public" PROTECTED ::= "protected" PRIVATE ::= "private" STATIC ::= "static" INLINE ::= "inline" DEPRECATED ::= "deprecated" FINAL ::= "final" ABSTRACT ::= "abstract" FUNCTION ::= "function" FUNCTION ::= "fn" LET ::= "let" ECHO ::= "echo" CONST ::= "const" TYPE_INTEGER ::= "int" TYPE_UINTEGER ::= "uint" TYPE_LONG ::= "long" TYPE_ULONG ::= "ulong" TYPE_CHAR ::= "char" TYPE_UCHAR ::= "uchar" TYPE_DOUBLE ::= "double" TYPE_DOUBLE ::= "float" TYPE_BOOL ::= "bool" TYPE_BOOL ::= "boolean" TYPE_STRING ::= "string" TYPE_ARRAY ::= "array" TYPE_VAR ::= "var" TYPE_OBJECT ::= "object" TYPE_CALLABLE ::= "callable" TYPE_RESOURCE ::= "resource" IF ::= "if" ELSE ::= "else" ELSEIF ::= "elseif" DO ::= "do" WHILE ::= "while" FOR ::= "for" IN ::= "in" NEW ::= "new" RETURN ::= "return" REQUIRE ::= "require" CLONE ::= "clone" EMPTY ::= "empty" VOID ::= "void" LOOP ::= "loop" BREAK ::= "break" CONTINUE ::= "continue" TYPEOF ::= "typeof" INSTANCEOF ::= "instanceof" LIKELY ::= "likely" UNLIKELY ::= "unlikely" ISSET ::= "isset" UNSET ::= "unset" THROW ::= "throw" FETCH ::= "fetch" SWITCH ::= "switch" CASE ::= "case" DEFAULT ::= "default" REVERSE ::= "reverse" TRY ::= "try" CATCH ::= "catch" PARENTHESES_OPEN ::= "(" PARENTHESES_CLOSE ::= ")" BRACKET_OPEN ::= "{" BRACKET_CLOSE ::= "}" SBRACKET_OPEN ::= "[" SBRACKET_CLOSE ::= "]" AT ::= "@" NOT ::= "!" BITWISE_NOT ::= "~" AND ::= "&&" OR ::= "||" BITWISE_AND ::= "&" BITWISE_OR ::= "|" BITWISE_XOR ::= "^" BITWISE_SHIFTLEFT ::= "<<" BITWISE_SHIFTRIGHT ::= ">>" ASSIGN ::= "=" ASSIGN_ADD ::= "+=" ASSIGN_SUB ::= "-=" ASSIGN_MUL ::= "*=" ASSIGN_DIV ::= "/=" ASSIGN_MOD ::= "%=" ASSIGN_BITWISE_AND ::= "&=" ASSIGN_BITWISE_OR ::= "|=" ASSIGN_BITWISE_XOR ::= "^=" ASSIGN_BITWISE_SHIFTLEFT ::= "<<=" ASSIGN_BITWISE_SHIFTRIGHT ::= ">>=" ASSIGN_CONCAT ::= ".=" EQUALS ::= "==" NOTEQUALS ::= "!=" NOTEQUALS ::= "<>" IDENTICAL ::= "===" NOTIDENTICAL ::= "!==" LESSEQUAL ::= "<=" GREATEREQUAL ::= ">=" LESS ::= "<" GREATER ::= ">" ARROW ::= "->" DOUBLEARROW ::= "=>" DOUBLECOLON ::= "::" DOT ::= "." ADD ::= "+" SUB ::= "-" MUL ::= "*" DIV ::= "/" MOD ::= "%" INCR ::= "++" DECR ::= "--" INCLUSIVE_RANGE ::= ".." EXCLUSIVE_RANGE ::= "..." COLON ::= ":" DOTCOMMA ::= ";" COMMA ::= "," QUESTION ::= "?" 

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions