code: StringBuilder scanPara(String id) {
  		char quotes = '"';
  		int localState = 0;
  		int parenDepth = 1;	// 指令后面参数的第一个 '(' 深度为 1
  		next();
  		int paraStart = forward;
  		while (true) {
  			switch (localState) {
  			case 0:
  				for (char c=peek(); true; c=next()) {
  					if (c == ')') {
  						parenDepth--;
  						if (parenDepth == 0) {	// parenDepth 不可能小于0，因为初始值为 1
  							next();
  							return subBuf(paraStart, forward - 2);
  						}
  						continue ;
  					}
  					
  					if (c == '(') {
  						parenDepth++;
  						continue ;
  					}
  					
  					if (c == '"' || c == '\'') {
  						quotes = c;
  						localState = 1;
  						break ;
  					}
  					
  					if (CharTable.isExprChar(c)) {
  						continue ;
  					}
  					
  					if (c == EOF) {
  						throw new ParseException("#" + id + " parameter can not match the end char ')'", new Location(fileName, beginRow));
  					}
  					
  					throw new ParseException("#" + id + " parameter exists illegal char: '" + c + "'", new Location(fileName, beginRow));
  				}
  				break ;
  			case 1:
  				for (char c=next(); true; c=next()) {
  					if (c == quotes) {
  						if (buf[forward - 1] != '\\') {	// 前一个字符不是转义字符
  							next();
  							localState = 0;
  							break ;
  						} else {
  							continue ;
  						}
  					}
  					
  					if (c == EOF) {
  						throw new ParseException("#" + id + " parameter error, the string parameter not ending", new Location(fileName, beginRow));
  					}
  				}
  				break ;
  			}
  		}
  	}
docs: 扫描指令参数，成功则返回，否则抛出词法分析异常