@@ -28,6 +28,7 @@ reserved_non_modifiers:
2828 | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
2929 | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
3030 | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
31+ | T_MATCH
3132;
3233
3334semi_reserved :
@@ -399,6 +400,25 @@ case_separator:
399400 | ' ;'
400401;
401402
403+ match :
404+ T_MATCH ' (' expr ' )' ' {' match_arm_list ' }' { $$ = Expr\Match_[$3 , $6 ]; }
405+ ;
406+
407+ match_arm_list :
408+ /* empty */ { $$ = []; }
409+ | non_empty_match_arm_list optional_comma { $$ = $1 ; }
410+ ;
411+
412+ non_empty_match_arm_list :
413+ match_arm { init($1 ); }
414+ | non_empty_match_arm_list ' ,' match_arm { push($1 , $3 ); }
415+ ;
416+
417+ match_arm :
418+ expr_list_allow_comma T_DOUBLE_ARROW expr { $$ = Node\MatchArm[$1 , $3 ]; }
419+ | T_DEFAULT optional_comma T_DOUBLE_ARROW expr { $$ = Node\MatchArm[null, $4 ]; }
420+ ;
421+
402422while_statement :
403423 statement { $$ = toArray($1 ); }
404424 | ' :' inner_statement_list T_ENDWHILE ' ;' { $$ = $2 ; }
@@ -666,6 +686,7 @@ expr:
666686 | variable ' =' expr { $$ = Expr\Assign[$1 , $3 ]; }
667687 | variable ' =' ' &' variable { $$ = Expr\AssignRef[$1 , $4 ]; }
668688 | new_expr { $$ = $1 ; }
689+ | match { $$ = $1 ; }
669690 | T_CLONE expr { $$ = Expr\Clone_[$2 ]; }
670691 | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1 , $3 ]; }
671692 | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1 , $3 ]; }
@@ -967,14 +988,14 @@ new_variable:
967988
968989member_name :
969990 identifier_ex { $$ = $1 ; }
970- | ' {' expr ' }' { $$ = $2 ; }
971- | simple_variable { $$ = Expr\Variable[$1 ]; }
991+ | ' {' expr ' }' { $$ = $2 ; }
992+ | simple_variable { $$ = Expr\Variable[$1 ]; }
972993;
973994
974995property_name :
975996 identifier { $$ = $1 ; }
976- | ' {' expr ' }' { $$ = $2 ; }
977- | simple_variable { $$ = Expr\Variable[$1 ]; }
997+ | ' {' expr ' }' { $$ = $2 ; }
998+ | simple_variable { $$ = Expr\Variable[$1 ]; }
978999 | error { $$ = Expr\Error[]; $this- >errorState = 2 ; }
9791000;
9801001
0 commit comments