private void parseComprehension(SyntaxTreeBuilder.Marker expr,
                                  final @Nullable IElementType endToken,
                                  final IElementType exprType) {
    assertCurrentToken(PyTokenTypes.FOR_KEYWORD);
    while (true) {
      myBuilder.advanceLexer();
      parseStarTargets();
      parseComprehensionRange(exprType == PyElementTypes.GENERATOR_EXPRESSION);
      while (myBuilder.getTokenType() == PyTokenTypes.IF_KEYWORD) {
        myBuilder.advanceLexer();
        if (!parseOldExpression()) {
          myBuilder.error(message("PARSE.expected.expression"));
        }
      }
      if (atForOrAsyncFor()) {
        continue;
      }
      if (endToken == null || matchToken(endToken)) {
        break;
      }
      myBuilder.error(message("PARSE.expected.for.or.bracket"));
      break;
    }
    expr.done(exprType);
  }
private void parseComprehension(SyntaxTreeBuilder.Marker expr,
                                  final @Nullable IElementType endToken,
                                  final IElementType exprType)