# Parses a superset of C1 statements @lexer lexer @include "./expression.ne" Statement -> Annos Simple _ ";" | Annos "if" _ "(" _ Expression _ ")" _ Statement (_ "else" _ Statement):? | Annos "while" _ "(" _ Expression _ ")" _ Statement | Annos "for" _ "(" _ Simple _ ";" _ Expression _ ";" _ Expression _ ")" _ Annos Statement | Annos "return" _ (Expression _):? ";" | Annos StatementBlock Simple -> Tp _ Identifier (_ "=" _ Expression):? | Expression {% id %} StatementBlock -> "{" _ (Statement _):* Annos "}" Anno -> ("loop_invariant" | "assert" | "requires" | "ensures") _ Expression _ ";" Annos -> (%anno_start _ Anno:* _ %anno_end _):*