diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index 54c3d4b..e3e9c2d 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -98,6 +98,7 @@ statement_list = { statement* } statement = _{ expr_stmt + | match_stmt | var_decl_statement | assign_statement | if_stmt @@ -144,6 +145,12 @@ for_stmt = { "for" ~ "(" ~ identifier ~ "in" ~ expr ~ ")" ~ statement } +match_item = { pattern ~ "=>" ~ block } + +match_stmt = { + "match" ~ "(" ~ expr ~ ")" ~ match_item* +} + // ================= EXPRESSIONS ================= tuple_type = { "(" ~ (type_expr ~ ("," ~ type_expr)*)? ~ ")" } path_type = { static_path ~ ("<" ~ (type_expr ~ ("," ~ type_expr)*)? ~ ">")? } diff --git a/test/src/main.mist b/test/src/main.mist index 59a3194..43b0343 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -1,9 +1,10 @@ mod my_class; use ; +use ; void main() { var my_class = new MyClass("World"); my_class.greet(); - var (x, y) = (10, 20); + match (MyEnum::Tuple(10)) {} }