docs: @Override
      protected AstNode parseDropStatement( DdlTokenStream tokens,
                                            AstNode parentNode ) throws ParsingException {
          assert tokens != null;
          assert parentNode != null;
  
          AstNode dropNode = null;
  
          String name = null;
  
          if (tokens.matches(STMT_DROP_FUNCTION)) {
              markStartOfStatement(tokens);
              tokens.consume(STMT_DROP_FUNCTION);
              name = parseName(tokens);
              dropNode = nodeFactory().node(name, parentNode, TYPE_DROP_FUNCTION_STATEMENT);
          } else if (tokens.matches(STMT_DROP_INDEX)) {
              markStartOfStatement(tokens);
              tokens.consume(STMT_DROP_INDEX);
              name = parseName(tokens);
              dropNode = nodeFactory().node(name, parentNode, TYPE_DROP_INDEX_STATEMENT);
          } else if (tokens.matches(STMT_DROP_PROCEDURE)) {
              markStartOfStatement(tokens);
              tokens.consume(STMT_DROP_PROCEDURE);
              name = parseName(tokens);
              dropNode = nodeFactory().node(name, parentNode, TYPE_DROP_PROCEDURE_STATEMENT);
          } else if (tokens.matches(STMT_DROP_ROLE)) {
              markStartOfStatement(tokens);
              tokens.consume(STMT_DROP_ROLE);
              name = parseName(tokens);
              dropNode = nodeFactory().node(name, parentNode, TYPE_DROP_ROLE_STATEMENT);
          } else if (tokens.matches(STMT_DROP_SYNONYM)) {
              markStartOfStatement(tokens);
              tokens.consume(STMT_DROP_SYNONYM);
              name = parseName(tokens);
              dropNode = nodeFactory().node(name, parentNode, TYPE_DROP_SYNONYM_STATEMENT);
          } else if (tokens.matches(STMT_DROP_TRIGGER)) {
              markStartOfStatement(tokens);
              tokens.consume(STMT_DROP_TRIGGER);
              name = parseName(tokens);
              dropNode = nodeFactory().node(name, parentNode, TYPE_DROP_TRIGGER_STATEMENT);
          }
  
          if (dropNode != null) {
              markEndOfStatement(tokens, dropNode);
          }
  
          if (dropNode == null) {
              dropNode = super.parseDropStatement(tokens, parentNode);
          }
  
          return dropNode;
      }