public void parseStatement() {

    while (myBuilder.getTokenType() == PyTokenTypes.STATEMENT_BREAK) {
      myBuilder.advanceLexer();
    }

    final IElementType firstToken;
    firstToken = myBuilder.getTokenType();

    if (firstToken == null) return;

    if (firstToken == PyTokenTypes.WHILE_KEYWORD) {
      parseWhileStatement();
      return;
    }
    if (firstToken == PyTokenTypes.IF_KEYWORD) {
      parseIfStatement(PyTokenTypes.IF_KEYWORD, PyTokenTypes.ELIF_KEYWORD, PyTokenTypes.ELSE_KEYWORD, PyElementTypes.IF_STATEMENT);
      return;
    }
    if (firstToken == PyTokenTypes.FOR_KEYWORD) {
      parseForStatement(myBuilder.mark());
      return;
    }
    if (firstToken == PyTokenTypes.TRY_KEYWORD) {
      parseTryStatement();
      return;
    }
    if (firstToken == PyTokenTypes.DEF_KEYWORD) {
      getFunctionParser().parseFunctionDeclaration(myBuilder.mark(), false);
      return;
    }
    if (firstToken == PyTokenTypes.AT) {
      getFunctionParser().parseDecoratedDeclaration();
      return;
    }
    if (firstToken == PyTokenTypes.CLASS_KEYWORD) {
      parseClassDeclaration();
      return;
    }
    if (firstToken == PyTokenTypes.WITH_KEYWORD) {
      parseWithStatement(myBuilder.mark());
      return;
    }
    if (firstToken == PyTokenTypes.ASYNC_KEYWORD) {
      parseAsyncStatement(false);
      return;
    }
    if (atToken(PyTokenTypes.IDENTIFIER, TOK_TYPE)) {
      if (parseTypeAliasStatement()) {
        return;
      }
    }

    if (atToken(PyTokenTypes.IDENTIFIER, TOK_ASYNC)) {
      if (parseAsyncStatement(true)) {
        return;
      }
    }
    if (atToken(PyTokenTypes.IDENTIFIER, TOK_MATCH)) {
      if (parseMatchStatement()) {
        return;
      }
    }

    parseSimpleStatement();
  }
public void parseStatement()