⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.java

📁 RESIN 3.2 最新源码
💻 JAVA
字号:
package example;import com.caucho.util.L10N;import java.util.logging.Logger;import java.util.logging.Level;import com.caucho.vfs.ReadStream;import java.io.IOException;import java.util.HashMap;/** * Parse a request made using the magic8ball protocol, returning * appropriate objects that are instances of AbstractCommand. * * This class is both a parser and a command factory. */public class Parser {  static protected final Logger log =     Logger.getLogger(Parser.class.getName());  static final L10N L = new L10N(Parser.class);  // set in init() for each new parse  private ReadStream _readStream;  String _error;  // parsing buffer  private StringBuffer _buffer = new StringBuffer();  // commands  private HashMap _commands = new HashMap();  public Parser()  {    _commands.put("set-prophet",new SetProphetCommand());    _commands.put("ask",new AskCommand());  }  public void init(ReadStream readStream)  {    _readStream = readStream;    _error = null;  }  /**   * Parse one command out of the ReadStream.   * Once the last command is encountered, null is returned.    *   * @return null if there were no more commands to parse, or there is a parse   * error.   */   public AbstractCommand nextCommand()    throws IOException  {    String cmd = parseToken();    if (cmd == null) {      return null;    }    AbstractCommand command = (AbstractCommand) _commands.get(cmd.toLowerCase());    if (command == null) {      _error = "Unknown command `" + cmd + "'";    } else {      command.parse(this);      if (command.isError()) {        _error = command.getError();        command = null;      }    }    return command;  }  public boolean isError()  {    return _error != null;  }  public String getError()  {    return _error;  }  /**   * @return true if ch is an indication that the end-of-stream was reached   */  boolean isEOS(int ch)  {    return ch < 0;  }  /**   * @return true if ch is a whitespace character or end-of-stream indicator   */  boolean isWhitespace(int ch)  {    return isEOS(ch) || Character.isWhitespace((char) ch);  }  /**   * Eat whitespace characters out of readStream   *   * @return the first non-whitespace character (which   * is still in the _readStream), or -1 if end of stream encountered.   */  int eatWhitespace()    throws IOException  {    int ch;    while (!isEOS(ch = _readStream.read())) {      if (!isWhitespace(ch)) {        _readStream.unread();        break;      }    }    return ch;  }  /**   * Parse optional whitespace then a token containing no whitespace.   *   * @return the token, or null if there are no tokens left on the stream   */  String parseToken()    throws IOException  {    String token = null;    int ch = eatWhitespace();    if (ch >= 0) {      _buffer.setLength(0);      while (!isEOS(ch = _readStream.read())) {        if (isWhitespace(ch)) {          _readStream.unread();          break;        }        _buffer.append((char)ch);      }      token = _buffer.toString();    }    return token;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -