/* 単項演算式の式ノードを作る */ expr_t mk_expr_un_op(char * filename, int line, op_kind_t op, expr_t a) { expr_t e = alloc_expr(filename, line, expr_kind_app); expr_list_t args = mk_expr_list(); expr_list_add(args, a); e->u.a.o = op; e->u.a.f = NULL; e->u.a.args = args; return e; }
expr_list_t parse_arg_expr_list(tokenizer_t t) { expr_list_t l = mk_expr_list(); expr_t x; if(cur_tok(t).kind != TOK_RPAREN) { x = parse_expr(t); expr_list_add(l, x); while(cur_tok(t).kind != TOK_RPAREN) { eat_it(t, TOK_COMMA); x = parse_expr(t); expr_list_add(l, x); } } return l; }
expr_list_t parse_arg_expr(tokenizer_t t){ expr_list_t list = mk_expr_list(t); while(1){ if(cur_tok(t).kind == TOK_RPAREN){ break; }else{ expr_list_add(list, parse_expr(t)); if(cur_tok(t).kind == TOK_COMMA){ eat_it(t, TOK_COMMA); continue; }else{ break; } } } return list; }