亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? macrotable.java

?? 外國人寫的c#語法解析器
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
      if (result == null)
        return null;
      else
        return result.toString();
    }

    //----------------------------------------------------------------------------------------------

    /**
     * Determines if this macro has got replacement text or is just a defined symbol.
     * 
     * @return <b>true</b> if there is replacement text, <b>false</b> if it is only a symbol.
     */
    public boolean isEmpty()
    {
      return (substitution != null && substitution.length() > 0);
    }

    //----------------------------------------------------------------------------------------------

  }

  //------------------------------------------------------------------------------------------------

  /**
   * This private class serves as convenience class for setting up a tokenizer.
   */
  private class MacroTokenizer
  {
    private Reader reader;
    private StreamTokenizer tokenizer;
    
    //----------------------------------------------------------------------------------------------

    /**
     * Constructor for the tokenizer that takes a string as input.
     * 
     * @param input The input.
     * @param numberSignSeparate Determines if number signs (#) are treated separately or as part
     *                            of an identifier.
     */
    public MacroTokenizer(String input, boolean numberSignSeparate)
    {
      reader = new StringReader(input);
      tokenizer = new StreamTokenizer(reader);
      tokenizer.resetSyntax();
      tokenizer.lowerCaseMode(false);
      tokenizer.slashSlashComments(true);
      tokenizer.slashStarComments(true);
      tokenizer.wordChars('a', 'z');
      tokenizer.wordChars('A', 'Z');
      tokenizer.wordChars('_', '_');
      tokenizer.wordChars('0', '9');

      // Add the number sign as word char too. In our context it can only appear as part of
      // a preprocessor definition, which never can be a macro.
      if (!numberSignSeparate)
        tokenizer.wordChars('#', '#');
    }

    //----------------------------------------------------------------------------------------------

    /**
     * Scans the characters between two quote chars and returns them (without the quotes).
     * 
     * @param quoteChar The character to use for end recognition.
     * @return The scanned string literal.
     */
    private String readString(char quoteChar)
    {
      StringBuffer buffer = new StringBuffer();
      boolean skipNext = false;
      do
      {
        char c = 0;
        try
        {
          c = (char)reader.read();
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
        if (c == '\uFFFF')
          break;
        if (skipNext)
        {
          skipNext = false;
          buffer.append(c);
          continue;
        }
        if (c == '\\')
          skipNext = true;
        else
          if (c == quoteChar)
            break;
        buffer.append(c);
      }
      while (true);
      
      return buffer.toString();
    }

    //----------------------------------------------------------------------------------------------

    /**
     * This method extracts text between two parentheses (also with nesting) and must only be
     * called if the current token is an opening parenthesis. In this process no token retrieval
     * takes place but instead characters are read directly from the input.
     * 
     * @return The text between the parentheses.
     */
    public String getInnerText()
    {
      int level = 1;
      StringBuffer buffer = new StringBuffer();
      do
      {
        char c = 0;
        try
        {
          c = (char) reader.read();
        }
        catch (IOException e)
        {
          // Since we are reading from a string there can never be an IOException.
          // However rules are to have code for the exception, regardless of whether it appears or not.
          e.printStackTrace();
        }
        if (c == '\uFFFF')
          reportError("Unexpected end of input.");
        
        if (c == '(')
          level++;
        else
          if (c == ')')
            level--;
        // The level tracker becomes 0 when the end of the list was found.
        if (level == 0)
          break;
        buffer.append(c);
      }
      while (true);

      return buffer.toString();
    }
    
    //----------------------------------------------------------------------------------------------

    /**
     * Returns the current token as numeric value. This is only valid if the current token
     * is TT_NUMERAL.
     * 
     * @return The numeric value.
     */
    public double getNumericValue()
    {
      return tokenizer.nval;
    }

    //----------------------------------------------------------------------------------------------

    /**
     * Reads from the current input position up to count characters without tokenizing them and
     * returns the substring. Escape sequences are converted, too.
     * 
     * @param count The number of characters to read. This can also be a very high value to indicate
     *               that everything remaining on the input should be returned.
     * @return The substring with a length of either <b>count</b> or the remaining number of input
     *          characters, whichever is smaller.
     */
    public String getRawInput(int count)
    {
      StringBuffer buffer = new StringBuffer();
      while (count > 0)
      {
        char c = 0;
        try
        {
          c = (char) reader.read();
          
          // Convert escape sequence.
          if (c == '\\')
          {
            c = (char) reader.read();
            if(c == 'u')
            {
              // Read the xxxx.
              int value = 0;
              for (int i = 0; i < 4; i++)
              {
                c = (char) reader.read();
                switch (c)
                {
                  case '0': case '1': case '2': case '3': case '4':case '5':
                  case '6': case '7': case '8': case '9':
                  {
                    value = (value << 4) + c - '0';
                    break;
                  }
                  case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                  {
                    value = (value << 4) + 10 + c - 'a';
                    break;
                  }
                  case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                  {
                    value = (value << 4) + 10 + c - 'A';
                    break;
                  }
                  default:
                  {
                    throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
                  }
                }
              }
              c = (char) value;
            }
            else
            {
              switch (c)
              {
                case 'a':
                {
                  c = 0x7;
                  break;
                }
                case 'b':
                {
                  c = '\b';
                  break;
                }
                case 'f':
                {
                  c = 0xC;
                  break;
                }
                case 'n':
                {
                  c = '\n';
                  break;
                }
                case 'r':
                {
                  c = '\r';
                  break;
                }
                case 't':
                {
                  c = '\t';
                  break;
                }
                case 'v':
                {
                  c = 0xB;
                  break;
                }
              }
            }
          }
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
        if (c == '\uFFFF')
          break;
        buffer.append(c);
      }
      return buffer.toString();
    }
    
    //----------------------------------------------------------------------------------------------

    /**
     * Returns the current token as string value. If the current token is a quote char then
     * the text included in the quotes is returned instead.
     * 
     * @return The string value.
     */
    public String getStringValue()
    {
      String result = "";
      switch (tokenizer.ttype)
      {
        case StreamTokenizer.TT_WORD:
        {
          result = tokenizer.sval;
          break;
        }
        case '"':
        {
          // Note: we cannot use the built-in feature of StreamTokenizer for strings as it
          //       tries to be too smart and converts all escape sequences to characters.
          //       This conflicts however with the following parser stage. Hence we do a raw scan
          //       on the underlying input stream.
          result = readString('"');
          break;
        }
        case '\'':
        {
          // See note for double quote case.
          result = readString('\'');
          break;
        }
      }
      return result;
    }

    //----------------------------------------------------------------------------------------------

    /**
     * Returns the next token from the internal tokenizer.
     * 
     * @return The next token.
     */
    public int nextToken()
    {
      try
      {
        return tokenizer.nextToken();
      }
      catch (IOException e)
      {
        // Since we are reading from a string there can never be an IOException.
        // However rules are to have code for the exception, regardless of whether it appears or not.
        e.printStackTrace();
        return StreamTokenizer.TT_EOF;
      }
    }

    //----------------------------------------------------------------------------------------------

    /**
     * Helper method to undo the last nextToken() call.
     */
    public void pushBack()
    {
      tokenizer.pushBack();
    }

    //----------------------------------------------------------------------------------------------

  }

  //------------------------------------------------------------------------------------------------

  protected void doEvent(int event, String message)
  {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜乳av一区二区三区| 日韩二区三区四区| 亚洲欧美日韩一区二区| 一区二区三区欧美日| 日韩影院免费视频| 国产一区二区在线观看视频| 懂色av一区二区夜夜嗨| 91黄视频在线观看| 精品欧美黑人一区二区三区| 亚洲国产成人在线| 午夜精品视频在线观看| 久久99国产精品久久| 99久久久国产精品免费蜜臀| 色狠狠色狠狠综合| 国产亚洲制服色| 亚洲午夜视频在线| 高清beeg欧美| 欧美日韩精品一区二区天天拍小说| 欧美亚洲综合在线| 亚洲国产精品成人综合色在线婷婷| 一区二区三区不卡在线观看 | 丝袜a∨在线一区二区三区不卡| 日产精品久久久久久久性色| 黄色日韩三级电影| 欧美性大战久久久久久久蜜臀| 久久久美女艺术照精彩视频福利播放| 亚洲精品日日夜夜| 91精品国产综合久久精品性色| 国产日韩欧美一区二区三区乱码 | 日韩一区二区三区高清免费看看 | 国模娜娜一区二区三区| 欧美亚洲国产怡红院影院| 中文字幕免费不卡| 精品一区二区三区在线播放视频| 日本高清免费不卡视频| 亚洲国产高清不卡| 国产一区美女在线| 日韩欧美电影在线| 亚洲老司机在线| 不卡的电影网站| 国产日产欧美精品一区二区三区| 日韩av一区二区三区| 欧美色成人综合| 一区二区在线观看av| 国产.精品.日韩.另类.中文.在线.播放 | 国产精品白丝jk白祙喷水网站 | 久久久久高清精品| 国产综合色精品一区二区三区| 欧美一区二区三区精品| 夜夜嗨av一区二区三区网页 | 激情文学综合插| 日韩一二在线观看| 美女久久久精品| 日韩欧美视频一区| 韩国精品在线观看| 久久婷婷国产综合国色天香| 精品在线亚洲视频| 欧美r级电影在线观看| 久久精品99国产精品| 精品国产欧美一区二区| 蜜臀va亚洲va欧美va天堂| 欧美大片国产精品| 国产乱人伦偷精品视频不卡 | 国产日韩v精品一区二区| 久99久精品视频免费观看| 精品免费99久久| 国产一区激情在线| 国产精品夫妻自拍| 欧美综合一区二区| 日本强好片久久久久久aaa| 日韩视频免费观看高清完整版 | 亚洲美女电影在线| 欧美日韩精品一区二区三区| 免费看欧美美女黄的网站| 精品国产凹凸成av人网站| 国产成人精品一区二区三区网站观看| 国产日韩欧美精品一区| 色综合中文字幕国产 | 91一区一区三区| 亚洲va欧美va人人爽午夜| 91精品国产免费| 粉嫩aⅴ一区二区三区四区五区 | 一区二区三区产品免费精品久久75 | 成人高清伦理免费影院在线观看| 久久伊人蜜桃av一区二区| 99久久777色| 视频一区视频二区在线观看| 久久久青草青青国产亚洲免观| 91女厕偷拍女厕偷拍高清| 日韩电影在线看| 欧美激情艳妇裸体舞| 欧美日本国产一区| 岛国av在线一区| 日韩成人伦理电影在线观看| 国产精品美日韩| 欧美一级一区二区| 97久久久精品综合88久久| 亚洲尤物在线视频观看| 欧美日韩精品专区| 国产一区二区三区蝌蚪| 亚洲国产成人tv| 国产精品久久网站| 欧美大片顶级少妇| 欧美欧美午夜aⅴ在线观看| 不卡高清视频专区| 国模套图日韩精品一区二区| 亚洲成av人片一区二区梦乃| 中文字幕日韩精品一区| 欧美电影免费观看完整版| 欧美日韩一区在线观看| 国产精品亚洲一区二区三区在线| 日韩精品1区2区3区| 亚洲精选视频免费看| 91精品国产乱码| 91一区一区三区| 不卡视频在线看| 国产永久精品大片wwwapp | 国产精品日韩成人| 精品国产免费人成电影在线观看四季| 在线一区二区三区四区五区| 成人av手机在线观看| 韩国女主播成人在线观看| 日本美女一区二区三区| 亚洲欧美日韩国产综合在线| 精品欧美一区二区三区精品久久| 欧美日韩久久久| 欧美日韩一区精品| 在线免费观看一区| 在线视频亚洲一区| 在线观看日韩国产| 国产99精品国产| 高清日韩电视剧大全免费| 国产一二精品视频| 国产91在线|亚洲| 国产美女精品一区二区三区| 精品亚洲国内自在自线福利| 蜜臀av一区二区在线观看 | 亚洲欧洲中文日韩久久av乱码| 欧美高清在线视频| 日韩亚洲欧美一区二区三区| 在线综合亚洲欧美在线视频 | 成人avav影音| 91视频国产资源| 91豆麻精品91久久久久久| 欧美在线观看一二区| 欧美日韩精品久久久| 91精品国产一区二区三区香蕉 | 一区二区三区资源| 亚洲高清免费在线| 蓝色福利精品导航| 国产精品亚洲а∨天堂免在线| 成人精品免费看| 欧亚洲嫩模精品一区三区| 欧美一区二区精品久久911| 日韩视频免费观看高清完整版 | 亚洲国产精品久久久男人的天堂| 国产精品高潮呻吟| 中文字幕一区视频| 无吗不卡中文字幕| 国产一区二区0| 日本精品裸体写真集在线观看| 在线观看亚洲成人| 久久久午夜电影| 日本欧美一区二区在线观看| 一本色道a无线码一区v| 精品国内二区三区| 亚洲国产成人va在线观看天堂| 国产精品亚洲视频| 欧美一区二区三区婷婷月色| 亚洲免费在线观看| 国产风韵犹存在线视精品| 欧美精品成人一区二区三区四区| 国产精品麻豆网站| 国产在线看一区| 91精品国产综合久久福利| 亚洲男帅同性gay1069| 国产精品一区二区久久不卡| 欧美精品1区2区| 怡红院av一区二区三区| 成人激情视频网站| 久久人人爽爽爽人久久久| 毛片一区二区三区| 欧美精三区欧美精三区| 亚洲一二三四区| av一二三不卡影片| 国产精品三级在线观看| 国产一区欧美二区| 久久久欧美精品sm网站| 精品在线一区二区| 精品国产不卡一区二区三区| 美女视频一区在线观看| 欧美精选一区二区| 日本亚洲电影天堂| 欧美一级二级三级乱码| 午夜成人免费视频| 欧美老女人在线| 日韩中文字幕av电影| 欧美一区二区视频在线观看2022| 亚洲国产另类av| 欧美一区二区三区四区在线观看|