public static boolean expression(PsiBuilder b, int l, int g) {
    if (!recursion_guard_(b, l, "expression")) return false;
    addVariant(b, "<expression>");
    boolean r, p;
    Marker m = enter_section_(b, l, _NONE_, "<expression>");
    r = tuple_assignment_expression(b, l + 1);
    if (!r) r = switch_expression(b, l + 1);
    if (!r) r = prefix_unary_expression(b, l + 1);
    if (!r) r = not_expression(b, l + 1);
    if (!r) r = cast_expression(b, l + 1);
    if (!r) r = lazy_closure(b, l + 1);
    if (!r) r = lambda_expression(b, l + 1);
    if (!r) r = single_parameter_lambda_expression(b, l + 1);
    if (!r) r = list_or_map(b, l + 1);
    if (!r) r = new_anonymous_expression(b, l + 1);
    if (!r) r = new_expression(b, l + 1);
    if (!r) r = unqualified_reference_expression(b, l + 1);
    if (!r) r = built_in_type_expression(b, l + 1);
    if (!r) r = literal(b, l + 1);
    if (!r) r = gstring(b, l + 1);
    if (!r) r = regex(b, l + 1);
    if (!r) r = parenthesized_expression(b, l + 1);
    p = r;
    r = r && expression_0(b, l + 1, g);
    exit_section_(b, l, m, null, r, p, null);
    return r || p;
  }
public static boolean expression(PsiBuilder b, int l, int g)