// Parse a postfix expr. // // postfix-expr ::= applicaiton-expr Tree* parse_postfix_expr(Parser& p) { if (Tree* t1 = parse_primary_expr(p)) { while (t1) { if (Tree* t2 = parse_dot_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_application_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_and_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_or_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_eq_comp_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_less_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_union(p, t1)) t1 = t2; else if (Tree* t2 = parse_intersect(p, t1)) t1 = t2; else if (Tree* t2 = parse_except(p, t1)) t1 = t2; else if (Tree* t2 = parse_join(p, t1)) t1 = t2; else if (Tree* t2 = parse_as(p, t1)) t1 = t2; else break; } return t1; } return parse_primary_expr(p); }
// Parse a postfix expr. // // postfix-expr ::= applicaiton-expr Tree* parse_postfix_expr(Parser& p) { if (Tree* t1 = parse_primary_expr(p)) { while (t1) { if (Tree* t2 = parse_dot_expr(p, t1)) t1 = t2; else if (Tree* t2 = parse_application_expr(p, t1)) t1 = t2; else break; } return t1; } return parse_primary_expr(p); }