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

📄 jmparse.java

📁 类javaScript脚本解释器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  {

    StringBuffer Token = new StringBuffer(25);
    int symbolType = 0; //0 还未取任何字符 5 已取出元素但未确定 10 已结束Token
    SkipLess33Char(Script);
    char ckey = Script[CurrPos];
    while (ckey != 0) {

      if (ckey < 33) {
        if (ckey == 13)
          CurrLine++;
        ckey = Script[++CurrPos];
        continue;
      }

      if ((ckey > 64 && ckey < 91) || (ckey > 96 && ckey < 123)) {
        if (symbolType == 0)
          symbolType = 5;
        Token.append(ckey);
        ckey = Script[++JMParse.CurrPos];
        continue;
      }

      if (ckey == '#') {
        SkipRemark(Script);
        ckey = Script[Owner.CurrPos];
        continue;
      }

      if (symbolType == 5  && (ckey < 33 || ckey == '(')) {
        if (Token.toString().equals("if")){
          KeyWordParse.SkipIf(Script);
          return;
        }

        if (Token.toString().equals("for")){
          //add skip for
          return;
        }
      }

      while(Script[CurrPos] != 0) {

        if (Script[CurrPos] < 33) {
          if (Script[CurrPos] == '\n') CurrLine++;
          CurrPos++;
          continue;
        }

        if(Script[CurrPos] == ';') {
          CurrPos++; //跳过语句末尾的“;”
          return;
        }

        CurrPos++;
      }

      ckey = Script[CurrPos];
    }
  }

  public void StartFunction(String Function, ArrayList Params)
  throws JMParseException
  {
    FunctionParse.ExecFunction(Function, Script, Params);
  }

  private void AllocateInit(StringBuffer key)  throws JMParseException
  {
    String k = key.toString();

    if (k.equals("function"))
      FunctionParse.AddFunction(Script);
    else
      this.ParseVar(k, GlobVarList);
  }

  public int Initial(URL toInitial)

      throws IOException, JMParseException
  {
    int symbolType = 0; //0 还未取任何字符 5 已取出元素但未确定 10 已结束Token
    StringBuffer key = new StringBuffer(25);
    int len = 0;
    int rlen = 0;
    String FileName = CurrFile.toString();
    int    Line = CurrLine;
    int    End = 0;


    //取出Include的文件名

    if (toInitial == null) {
      ckey = Script[CurrPos];

      while (ckey != 0) {
        if (ckey == ';') {
          break;
        }

        if (ckey == '#'){
          SkipRemark(Script);
          ckey = Script[++CurrPos];
          continue;
        }

        if (ckey < 33) {
          if (ckey == 13)
            CurrLine++;
          if (symbolType != 0) {
            break;
          }
          ckey = Script[++CurrPos];
          continue;
        }

        if (ckey == '/' || ckey == '.') {
          key.append(ckey);
          ckey = Script[++JMParse.CurrPos];
          continue;
        }

        if ( (ckey > 47) && (ckey < 58)) {
          if (symbolType == 0)
            throw new JMParseException(new StringBuffer("不正确的标志符表示法 ").
                                       append(key).toString());
          key.append(ckey);
          ckey = Script[++JMParse.CurrPos];
          continue;
        }

        if ( (ckey == 95) || (ckey > 64 && ckey < 91) ||
            (ckey > 96 && ckey < 123)) {
          if (symbolType == 0)
            symbolType = 5;
          key.append(ckey);
          ckey = Script[++JMParse.CurrPos];
          continue;
        }

        key.append(ckey);
        throw new JMParseException(new StringBuffer("不正确的标志符字符 ").
                                   append(key).toString());
      } //取出Include的文件名

      SkipLess33Char(Script);

      if (Script[CurrPos] != ';')
        LoseEndSymbol();

      toInitial = new URL(mainPath, key.toString());

      CurrPos++;

      CurrFile.delete(0, FileName.length());
      CurrFile.append(key);
      CurrLine = 1;
    }

    try {
      char[] buf = new char[BUFLEN - Length];
      InputStream is = toInitial.openConnection().getInputStream();
      InputStreamReader ir = new InputStreamReader(is);
      len = ir.read(buf);
      Length += len;
      End = CurrPos + len - 1;
      if (is.available() > 0) throw new JMParseException("脚本文件过大");
      System.arraycopy(Script, CurrPos, Script, CurrPos + len, Length - CurrPos);
      System.arraycopy(buf, 0, Script, CurrPos, len);
    } catch (IOException e) {
      CurrLine = Line;
      CurrFile.delete(0, CurrFile.length());
      CurrFile.append(FileName);
      throw new JMParseException(e.getMessage());
    }

    key.delete(0, 25);
    symbolType = 0;
    ckey = Script[CurrPos];

    while (ckey != 0) {

      if (ckey == ';') {
        if (symbolType != 0) {
          if (key.toString().equals("include")) {
            rlen = Initial(null);
            End += rlen;
            len += rlen;
          } else AllocateInit(key);
          key.delete(0, 25);
          symbolType = 0;
        }
        ckey = Script[++CurrPos];
        continue;
      }

      if (ckey == '#') {
        SkipRemark(Script);
        ckey = Script[++CurrPos];
        continue;
      }

      if (CurrPos >= End) {
        //CurrPos++; //跳过文件结束后的最后一个字符
        break;
      }

      if (ckey < 33) {
        if (ckey == '\n')
          CurrLine++;
        if (symbolType != 0) {
          if (key.toString().equals("include")){
            rlen = Initial(null);
            End += rlen;
            len += rlen;
          } else AllocateInit(key);
          key.delete(0, 25);
          symbolType = 0;
          continue;
        }
        ckey = Script[++CurrPos];
        continue;
      }

      if (ckey == '=') {
        if (symbolType == 0)
          throw new JMParseException(new StringBuffer("不正确的标志符表示法 ").
                                     append(key).toString());
        AllocateInit(key);
        key.delete(0, 25);
        symbolType = 0;
        ckey = Script[++CurrPos];
        continue;
      }

      if ( (ckey > 47) && (ckey < 58)) {
        if (symbolType == 0)
          throw new JMParseException(new StringBuffer("不正确的标志符表示法 ").
                                     append(key).toString());
        key.append(ckey);
        ckey = Script[++JMParse.CurrPos];
        continue;
      }

      if ( (ckey == 95) || (ckey > 64 && ckey < 91) ||
          (ckey > 96 && ckey < 123)) {
        if (symbolType == 0)
          symbolType = 5;
        key.append(ckey);
        ckey = Script[++JMParse.CurrPos];
        continue;
      }

      key.append(ckey);

      throw new JMParseException(new StringBuffer("不正确的标志符字符 ").
                                 append(key).toString());
    }

    if (symbolType != 0)
      if (key.toString().equals("include")){
        rlen = Initial(null);
        End += rlen;
        len += rlen;
      } else AllocateInit(key);

    CurrLine = Line;
    CurrFile.delete(0, CurrFile.length());
    CurrFile.append(FileName);

    return len;
  }

  public boolean AddObjectLink(char[] Name, int NameStartPos, int Namelength, Object o) {
    return objParse.AddObjectLink(Name, NameStartPos, Namelength, o);
  }

  public boolean AddObjectLink(String Name, Object o) {
    return objParse.AddObjectLink(Name, o);
  }

}

⌨️ 快捷键说明

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