code: protected void parseSql() {
  		int commentStartPos = sql.indexOf("/*", position);
  		int lineCommentStartPos = sql.indexOf("--", position);
  		int bindVariableStartPos = sql.indexOf("?", position);
  		int elseCommentStartPos = -1;
  		if (lineCommentStartPos >= 0) {
  			int skipPos = skipWhitespace(lineCommentStartPos + 2);
  			if (skipPos + 4 < sql.length() && "ELSE".equals(sql.substring(skipPos, skipPos + 4))) {
  				elseCommentStartPos = lineCommentStartPos;
  			}
  		}
  		int nextStartPos = getNextStartPos(commentStartPos, elseCommentStartPos, bindVariableStartPos);
  		if (nextStartPos < 0) {
  			token = sql.substring(position);
  			nextTokenType = TokenType.EOF;
  			position = sql.length();
  			tokenType = TokenType.SQL;
  		} else {
  			token = sql.substring(position, nextStartPos);
  			tokenType = TokenType.SQL;
  			boolean needNext = nextStartPos == position;
  			if (nextStartPos == commentStartPos) {
  				nextTokenType = TokenType.COMMENT;
  				position = commentStartPos + 2;
  			} else if (nextStartPos == elseCommentStartPos) {
  				nextTokenType = TokenType.ELSE;
  				position = elseCommentStartPos + 2;
  			} else if (nextStartPos == bindVariableStartPos) {
  				nextTokenType = TokenType.BIND_VARIABLE;
  				position = bindVariableStartPos;
  			}
  			if (needNext) {
  				next();
  			}
  		}
  	}
docs: SQL文解析