stmt_t parse_stmt(tokenizer_t t) { char * filename = cur_tok(t).filename; int line = cur_tok(t).line_num; expr_t e; switch(cur_tok(t).kind) { case TOK_SEMICOLON: eat_it(t, TOK_SEMICOLON); return mk_stmt_empty(filename, line); break; case TOK_CONTINUE: eat_it(t, TOK_CONTINUE); eat_it(t, TOK_SEMICOLON); return mk_stmt_continue(filename, line); break; case TOK_BREAK: eat_it(t, TOK_BREAK); eat_it(t, TOK_SEMICOLON); return mk_stmt_break(filename, line); break; case TOK_RETURN: eat_it(t, TOK_RETURN); e = parse_expr(t); eat_it(t, TOK_SEMICOLON); return mk_stmt_return(filename, line, e); break; case TOK_IF: return parse_stmt_if(t); break; case TOK_WHILE: return parse_stmt_while(t); break; case TOK_LBRACE: return parse_comp_stmt(t); break; default: e = parse_expr(t); eat_it(t, TOK_SEMICOLON); return mk_stmt_expr(filename, line, e); break; } }
stmt_t parse_stmt_continue(tokenizer_t t) { eat_it(t, TOK_CONTINUE); eat_it(t, TOK_SEMICOLON); return mk_stmt_continue(t->filename, t->line); }