code: protected AstNode parseNextStatement( DdlTokenStream tokens,
                                            AstNode node ) {
          assert tokens != null;
          assert node != null;
  
          AstNode stmtNode = null;
  
          if (tokens.matches(CREATE)) {
              stmtNode = parseCreateStatement(tokens, node);
          } else if (tokens.matches(ALTER)) {
              stmtNode = parseAlterStatement(tokens, node);
          } else if (tokens.matches(DROP)) {
              stmtNode = parseDropStatement(tokens, node);
          } else if (tokens.matches(INSERT)) {
              stmtNode = parseInsertStatement(tokens, node);
          } else if (tokens.matches(SET)) {
              stmtNode = parseSetStatement(tokens, node);
          } else if (tokens.matches(GRANT)) {
              stmtNode = parseGrantStatement(tokens, node);
          } else if (tokens.matches(REVOKE)) {
              stmtNode = parseRevokeStatement(tokens, node);
          }
  
          if (stmtNode == null) {
              stmtNode = parseCustomStatement(tokens, node);
          }
  
          return stmtNode;
      }
docs: Performs token match checks for initial statement type and delegates to specific parser methods. If no specific statement
  is found, then a call is made to parse a custom statement type. Subclasses may override this method, but the
  {@link StandardDdlParser}.parseCustomStatement() method is designed to allow for parsing db-specific statement types.
  
  @param tokens the tokenized {@link DdlTokenStream} of the DDL input content; may not be null
  @param node the top level {@link AstNode}; may not be null
  @return node the new statement node