Ejemplo n.º 1
0
// Parse a primary expression.
//
//    primary-term ::= primary-lambda-term | grouped-term
Tree*
parse_primary_expr(Parser& p) {
  if (Tree* t = parse_literal_expr(p))
    return t;
  if (Tree* t = parse_lambda_expr(p))
    return t;
  if (Tree* t = parse_id_expr(p))
    return t;
  if (Tree* t = parse_tuple_expr(p))
    return t;
  if (Tree* t = parse_list_expr(p))
    return t;
  if (Tree* t = parse_variant_expr(p))
    return t;
  if (Tree* t = parse_grouped_expr(p))
    return t;
  return nullptr;
}
Ejemplo n.º 2
0
expr_t parse_unary_expr(tokenizer_t t)
{
  struct token tok = cur_tok(t);
  switch(tok.kind){
    case TOK_INT_LITERAL:
      return parse_intlit_expr(t);
      break;
    case TOK_ID:
      return parse_id_expr(t);
      break;
    case TOK_LPAREN:
      return parse_paren_expr(t);
      break;
    case TOK_PLUS:
    case TOK_MINUS:
    case TOK_BANG:
      return parse_op_expr(t);
      break;
    default:
      syntax_error(t, "parse_expr error (expected TOK_INT_LITERAL, TOK_ID, TOK_LPAREN, TOK_PLUS, TOK_MINUS, TOK_BANG)");
      break;
  }
  return NULL;
}