Exemplo n.º 1
0
/* 2項演算式の式ノードを作る  */
expr_t mk_expr_bin_op(char * filename, int line, op_kind_t op, expr_t e0, expr_t e1)
{
  expr_t e = alloc_expr(filename, line, expr_kind_app);
  expr_list_t args = mk_expr_list();
  expr_list_add(args, e0);
  expr_list_add(args, e1);
  e->u.a.o = op;
  e->u.a.f = NULL;
  e->u.a.args = args;
  return e;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}