Example #1
0
stmt_t parse_comp_stmt(tokenizer_t t) {
    char * filename = cur_tok(t).filename;
    int line = cur_tok(t).line_num;
    eat_it(t, TOK_LBRACE);
    stmt_list_t c = mk_stmt_list();
    var_decl_list_t d = parse_var_decl(t);
    stmt_t x;
    while(cur_tok(t).kind != TOK_RBRACE) {
        x = parse_stmt(t);
        stmt_list_add(c, x);
    }
    eat_it(t, TOK_RBRACE);
    return mk_stmt_compound(filename, line, d, c);
}
Example #2
0
stmt_t parse_stmt_compound(tokenizer_t t){
    stmt_list_t list = mk_stmt_list();
    var_decl_list_t decls = mk_var_decl_list();

    eat_it(t, TOK_LBRACE);
    // printf("var_decl_list_add begin\n");
    // printf("call: parse_stmt_compound\n");

    while(1){
        // 型宣言じゃなかったら修了
        if(cur_tok(t).kind != TOK_INT){
            break;
        }else{
            // printf("var_decl_list_add\n");
            var_decl_list_add(decls, parse_decl(t));
        }
    }

    while(1){
        if(cur_tok(t).kind != TOK_RBRACE){
            // printf("stmt_list_add\n");
            stmt_t s = parse_stmt(t);
            stmt_list_add(list, s);
            // printf("s->kind: %d\n", s->kind);
        }else{
            // } でリスト終了
            break;
        }
    }

    eat_it(t, TOK_RBRACE);

    stmt_t comp = mk_stmt_compound(t->filename, t->line, decls, list);

    return comp;

}