diff --git a/src/parser/grammar.pest b/src/parser/grammar.pest index 4723880..a91c38d 100644 --- a/src/parser/grammar.pest +++ b/src/parser/grammar.pest @@ -37,15 +37,15 @@ block = { "{" ~ statement_list ~ "}" } statement_list = { statement* } statement = _{ - expr_stmt - | var_decl - | if_stmt - | while_stmt - | for_stmt - | return_stmt - | break_stmt - | continue_stmt - | block + expr_stmt + | var_decl + | if_stmt + | while_stmt + | for_stmt + | return_stmt + | break_stmt + | continue_stmt + | block } // --- basic statements --- @@ -75,10 +75,7 @@ while_stmt = { } for_stmt = { - "for" ~ "(" ~ (var_decl_no_semicolon | expr_stmt | ";") - ~ expr? ~ ";" - ~ expr? ~ ")" - ~ statement + "for" ~ "(" ~ (var_decl_no_semicolon | expr_stmt | ";") ~ expr? ~ ";" ~ expr? ~ ")" ~ statement } // helper (same as var_decl but no trailing ;) @@ -100,6 +97,9 @@ primary = { postfix = { ("." ~ identifier) | ("(" ~ (expr ~ ("," ~ expr)*)? ~ ")") + | ("[" ~ expr ~ "]") + | ("++" | "--") + | (("+" | "-" | "*" | "/" | "%") ~ primary) } expr = { diff --git a/test/src/main.ms b/test/src/main.ms index 77c55b6..2e358b8 100644 --- a/test/src/main.ms +++ b/test/src/main.ms @@ -1,12 +1,3 @@ -import "fmt"; - -struct Point { - x: int, - y: int -} - function add(a: int, b: int): int { - if (x) { - if (y) return 1; - } + itm.a + itm.b(); }