Пример #1
0
stmt_t parse_stmt_return(tokenizer_t t)
{
    eat_it(t, TOK_RETURN);
    expr_t e = parse_expr(t);
    eat_it(t, TOK_SEMICOLON);
    return mk_stmt_return(t->filename, t->line, e);
}
Пример #2
0
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;
    }
}