// 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; }
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; }