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

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

?? evaluator.java

?? 外國人寫的c#語法解析器
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
   *          short and long Long is returned.
   */
  private static Object processMinus(Object leftValue, Object rightValue)
  {
    checkNumber(leftValue);
    checkNumber(rightValue);
    
    // Float types.
    if (isFloat(leftValue) || isFloat(rightValue))
      return new Double(((Number)leftValue).doubleValue() - ((Number)rightValue).doubleValue());
    else
      // Integer values.
      return new Long(((Number)leftValue).longValue() - ((Number)rightValue).longValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Computes the modulo of both input values.
   * 
   * @param leftValue Any integer value.
   * @param rightValue Any integer value.
   * @return The result is a Long value.
   */
  private static Object processMod(Object leftValue, Object rightValue)
  {
    checkInteger(leftValue);
    checkInteger(rightValue);
    
    // Integer values.
    return new Long(((Number)leftValue).longValue() % ((Number)rightValue).longValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Computes the multiplication of both input values.
   * 
   * @param leftValue Any number value.
   * @param rightValue Any number value.
   * @return The result is a double value if any of the values is a float value. For byte, int, 
   *          short and long Long is returned.
   */
  private static Object processMultiply(Object leftValue, Object rightValue)
  {
    checkNumber(leftValue);
    checkNumber(rightValue);
    
    // Float types.
    if (isFloat(leftValue) || isFloat(rightValue))
      return new Double(((Number)leftValue).doubleValue() * ((Number)rightValue).doubleValue());
    else
      // Integer values.
      return new Long(((Number)leftValue).longValue() * ((Number)rightValue).longValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Computes the sum or concatenation of both input values.
   * 
   * @param leftValue Any number or string/char value.
   * @param rightValue Any number or string/char value.
   * @return The result is a double value if any of the values is a float value (but the other must 
   *          not be a string). For byte, int, short and long Long is returned and for string 
   *          and character input a string output is genererated.
   */
  private static Object processPlus(Object leftValue, Object rightValue)
  {
    // Start with string concatenation. No automatic conversion takes place. Both values must be
    // strings or characters.
    if (isString(leftValue) || isString(rightValue))
    {
      checkString(leftValue);
      checkString(rightValue);
      
      String left = (leftValue instanceof String) ? (String)leftValue : ((Character)leftValue).toString();
      String right = (rightValue instanceof String) ? (String)rightValue : ((Character)rightValue).toString();
      
      return (left + right);
    }
    else
    {
      checkNumber(leftValue);
      checkNumber(rightValue);
      
      // Float types.
      if (isFloat(leftValue) || isFloat(rightValue))
        return new Double(((Number)leftValue).doubleValue() + ((Number)rightValue).doubleValue());
      else
        // Integer values.
        return new Long(((Number)leftValue).longValue() + ((Number)rightValue).longValue());
    }
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Evaluates both values with regard to the given logical operation. String types cannot be compared.
   * 
   * @param leftValue Any number value.
   * @param rightValue Any number value.
   * @param operation The logical operation to perform.
   * @return <b>true</b> if the relation turns out to be true, otherwise <b>false</b>.
   */
  private static Object processRelation(Object leftValue, Object rightValue, int operation)
  {
    checkNumber(leftValue);
    checkNumber(rightValue);
    
    boolean useDouble = (leftValue instanceof Float) || (leftValue instanceof Double) ||
      (rightValue instanceof Float) || (rightValue instanceof Double);

    if (useDouble)
    {
      switch (operation)
      {
        case ExpressionLexerTokenTypes.EQUAL:
          return new Boolean(((Number)leftValue).doubleValue() == ((Number)rightValue).doubleValue());
        case ExpressionLexerTokenTypes.UNEQUAL:
          return new Boolean(((Number)leftValue).doubleValue() != ((Number)rightValue).doubleValue());
        case ExpressionLexerTokenTypes.LESS_THAN:
          return new Boolean(((Number)leftValue).doubleValue() < ((Number)rightValue).doubleValue());
        case ExpressionLexerTokenTypes.GREATER_THAN:
          return new Boolean(((Number)leftValue).doubleValue() > ((Number)rightValue).doubleValue());
        case ExpressionLexerTokenTypes.LESS_THAN_EQUAL:
          return new Boolean(((Number)leftValue).doubleValue() <= ((Number)rightValue).doubleValue());
        case ExpressionLexerTokenTypes.GREATER_THAN_EQUAL:
          return new Boolean(((Number)leftValue).doubleValue() >= ((Number)rightValue).doubleValue());
        default:
          return new Boolean(false);
      }
    }
    else
    {
      switch (operation)
      {
        case ExpressionLexerTokenTypes.EQUAL:
          return new Boolean(((Number)leftValue).intValue() == ((Number)rightValue).intValue());
        case ExpressionLexerTokenTypes.UNEQUAL:
          return new Boolean(((Number)leftValue).intValue() != ((Number)rightValue).intValue());
        case ExpressionLexerTokenTypes.LESS_THAN:
          return new Boolean(((Number)leftValue).intValue() < ((Number)rightValue).intValue());
        case ExpressionLexerTokenTypes.GREATER_THAN:
          return new Boolean(((Number)leftValue).intValue() > ((Number)rightValue).intValue());
        case ExpressionLexerTokenTypes.LESS_THAN_EQUAL:
          return new Boolean(((Number)leftValue).intValue() <= ((Number)rightValue).intValue());
        case ExpressionLexerTokenTypes.GREATER_THAN_EQUAL:
          return new Boolean(((Number)leftValue).intValue() >= ((Number)rightValue).intValue());
        default:
          return new Boolean(false);
      }
    }
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Shifts the left value by the number of digits given by the right value to the left.
   * 
   * @param leftValue Any integer value.
   * @param rightValue Any integer value.
   * @return The result is a Long value.
   */
  private static Object processShiftLeft(Object leftValue, Object rightValue)
  {
    checkInteger(leftValue);
    checkInteger(rightValue);
    
    // Integer values.
    return new Long(((Number)leftValue).longValue() << ((Number)rightValue).longValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Shifts the left value by the number of digits given by the right value to the right.
   * 
   * @param leftValue Any integer value.
   * @param rightValue Any integer value.
   * @return The result is a Long value.
   */
  private static Object processShiftRight(Object leftValue, Object rightValue)
  {
    checkInteger(leftValue);
    checkInteger(rightValue);
    
    // Integer values.
    return new Long(((Number)leftValue).longValue() >> ((Number)rightValue).longValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Computes the negation of the input value.
   * 
   * @param leftValue An numerical value.
   * @return -leftValue.
   */
  private static Object processUnaryMinus(Object leftValue)
  {
    checkNumber(leftValue);
    
    Number value = (Number)leftValue;
    if (value instanceof Byte)
      return new Byte((byte)-value.byteValue());
    else
      if (value instanceof Integer)
        return new Integer(-value.intValue());
      else
        if (value instanceof Long)
          return new Long(-value.longValue());
        else
          if (value instanceof Short)
            return new Short((short)(-value.shortValue()));
          else
            if (value instanceof Float)
              return new Float(-value.floatValue());
            else
              return new Double(-value.doubleValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Computes the eclusive or between both values.
   * 
   * @param leftValue An integer value.
   * @param rightValue A second integer value.
   * @return The result of the computation. It is always of type Integer.
   */
  private static Object processXor(Object leftValue, Object rightValue)
  {
    checkInteger(leftValue);
    checkInteger(rightValue);
    
    Number leftNumber = (Number)leftValue;
    Number rightNumber = (Number)rightValue;
    
    return new Integer(leftNumber.intValue() ^ rightNumber.intValue());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Throws an exception with the given message.
   * 
   * @param message The message.
   */
  private static void showError(String message)
  {
    throw new EvaluationException(message);
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Takes the given abstract syntax tree and tries to evaluate it to one single value.
   * The result will be a scalar type (Integer, String, Float etc.) or null if either expression
   * is null or an error occured. Evaluation order is left to right.
   * 
   * @param expression The abstract syntax tree into which the expression must be parsed.
   * @param resolver An interface able to provide support for macro substitution.
   * @param useImplicitSymbols When <b>true</b> then unresolvable symbols are considered as integers
   *         with a value of 0.
   * 
   * @return An object, which encapsulates a scalar value.
   */
  public static Object evaluate(AST expression, ISymbolTable symbolTable, boolean useImplicitSymbols)
  {
    symbols = symbolTable;
    implicitSymbols = useImplicitSymbols;
    
    Object result = null;
    
    // The root node (the expression itself) is always a simple node without sibling and must be
    // of type EXPR.
    if (expression != null)
      if (expression.getType() == ExpressionLexerTokenTypes.EXPR)
        result = process(expression.getFirstChild());
      else
        result = process(expression);
    
    return result;
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Takes the given abstract syntax tree and tries to evaluate it to a boolean value.
   * 
   * @param expression The abstract syntax tree into which the expression must be parsed.
   * @param resolver An interface able to provide support for macro substitution.
   * @param useImplicitSymbols When <b>true</b> then unresolvable symbols are considered as integers
   *         with a value of 0.
   * 
   * @return <b>true</b>, if the expression either itself evaluates to true or to a non-zero 
   *          numerical value, otherwise <b>false</b>. <b>false</b> is also returned if 
   *          <b>expression</b> is null or an error occured.
   */
  public static boolean evaluateToBoolean(AST expression, ISymbolTable symbolTable, 
    boolean useImplicitSymbols)
  {
    boolean evaluation = false;

    if (expression != null)
    {    
      Object result = evaluate(expression, symbolTable, useImplicitSymbols);
      if (result instanceof Boolean)
        evaluation = ((Boolean)result).booleanValue();
      else
        if (result instanceof Number)
          evaluation = ((Number)result).floatValue() != 0;
    }
    
    return evaluation;
  }
  
  //------------------------------------------------------------------------------------------------
  
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品理论片a级按摩| 欧美午夜精品免费| 久久久久9999亚洲精品| 日本少妇一区二区| 91麻豆精品国产91久久久更新时间| 亚洲男帅同性gay1069| 成人黄色软件下载| 18欧美乱大交hd1984| 北条麻妃一区二区三区| 国产精品九色蝌蚪自拍| 99久久久精品| 亚洲欧美日韩国产综合| 91首页免费视频| 亚洲免费av观看| 欧美系列在线观看| 亚洲mv大片欧洲mv大片精品| 欧美午夜精品一区| 强制捆绑调教一区二区| 日韩午夜电影av| 激情久久五月天| 久久久精品天堂| 成人免费毛片片v| 亚洲欧美在线视频观看| 91激情在线视频| 午夜影视日本亚洲欧洲精品| 欧美美女激情18p| 日本不卡视频在线观看| 久久久影视传媒| 99久免费精品视频在线观看| 一区二区三区在线观看视频| 欧美日韩一区二区三区四区五区| 亚洲国产裸拍裸体视频在线观看乱了 | 成人免费看视频| 亚洲免费三区一区二区| 欧美精品 日韩| 精品在线播放免费| 日本一区二区电影| 色综合天天狠狠| 日韩综合在线视频| 精品久久久久久久久久久久包黑料 | 激情另类小说区图片区视频区| 国产欧美视频在线观看| 91免费观看在线| 免费在线观看精品| 国产精品天天看| 欧美性xxxxxx少妇| 国产一区二区久久| 亚洲人成电影网站色mp4| 欧美精品日日鲁夜夜添| 国产一区二区视频在线播放| 亚洲视频狠狠干| 欧美一区三区四区| 国产suv精品一区二区6| 亚洲综合激情另类小说区| 日韩精品专区在线影院重磅| 成人精品国产一区二区4080| 亚洲成人免费视频| 精品久久久久久久人人人人传媒| 91在线免费视频观看| 日韩中文欧美在线| 中文字幕乱码一区二区免费| 欧美日韩国产精选| 国产成人久久精品77777最新版本| 亚洲综合丝袜美腿| 久久久久久久综合狠狠综合| 色偷偷一区二区三区| 激情综合五月天| 亚洲综合激情小说| 国产欧美一区二区三区在线看蜜臀| 91福利在线导航| 国产另类ts人妖一区二区| 亚洲综合在线观看视频| 久久综合狠狠综合| 欧美视频自拍偷拍| 丁香亚洲综合激情啪啪综合| 日韩有码一区二区三区| 18涩涩午夜精品.www| 久久综合久久鬼色| 欧美亚洲国产怡红院影院| 国产精品一二三| 日日夜夜精品视频天天综合网| 国产精品盗摄一区二区三区| 日韩欧美精品在线视频| 欧美熟乱第一页| 波多野结衣中文字幕一区 | 亚洲综合小说图片| 国产嫩草影院久久久久| 56国语精品自产拍在线观看| 99精品桃花视频在线观看| 九九在线精品视频| 午夜久久电影网| 亚洲视频一区二区在线| 26uuu精品一区二区三区四区在线| 欧美性xxxxxxxx| 99在线精品免费| 国产精品一区二区无线| 免费观看91视频大全| 亚洲一区二区在线观看视频| 中文字幕一区二区三区蜜月| 久久丝袜美腿综合| 日韩色在线观看| 欧美日韩国产综合草草| 色吊一区二区三区| 9久草视频在线视频精品| 国产成人亚洲综合a∨婷婷图片| 卡一卡二国产精品 | 免费看欧美美女黄的网站| 亚洲一区二区在线观看视频| 亚洲摸摸操操av| 国产精品美女久久久久aⅴ| 久久蜜桃香蕉精品一区二区三区| 日韩欧美一卡二卡| 日韩欧美精品三级| 日韩欧美成人一区二区| 91.成人天堂一区| 欧美日韩国产精品自在自线| 欧美日韩精品一区二区三区 | 欧美高清在线视频| 久久久久久久久久看片| 欧美精品一区二区不卡| 日韩欧美电影一二三| 欧美电视剧免费观看| 欧美一级理论片| 欧美一级理论片| 日韩区在线观看| 日韩美女视频在线| 精品剧情在线观看| 精品国产一区二区三区av性色 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产成人精品综合在线观看| 国产一区二区精品久久99| 国内久久婷婷综合| 国产精品亚洲а∨天堂免在线| 国产老女人精品毛片久久| 国产99久久久久| 成人免费观看视频| av一区二区不卡| aaa欧美色吧激情视频| 日本乱人伦一区| 精品污污网站免费看| 欧美电影在线免费观看| 欧美丰满少妇xxxxx高潮对白| 欧美二区乱c少妇| 精品国产乱码久久久久久影片| 精品国产区一区| 欧美激情一区二区| 亚洲人成网站色在线观看| 亚洲一区二区三区自拍| 亚洲成av人片一区二区| 免费久久精品视频| 国产成人精品一区二区三区网站观看| 丁香啪啪综合成人亚洲小说| 9人人澡人人爽人人精品| 在线亚洲+欧美+日本专区| 4438x成人网最大色成网站| 精品少妇一区二区三区视频免付费| 久久久久亚洲蜜桃| 亚洲欧洲日韩在线| 亚洲国产精品久久久久秋霞影院| 日本亚洲最大的色成网站www| 极品美女销魂一区二区三区 | 日韩丝袜美女视频| 久久久久国产一区二区三区四区| 国产精品久久久久久久久久久免费看 | 日本欧美一区二区三区乱码| 精品亚洲成a人在线观看| 丁香婷婷综合网| 欧美视频一区二区三区| 欧美一区二区久久| 国产校园另类小说区| 亚洲视频狠狠干| 免费成人在线播放| 国产成人在线网站| 欧美吻胸吃奶大尺度电影| 欧美大片顶级少妇| 中文字幕一区二区在线播放| 亚洲国产精品久久久男人的天堂| 日本免费在线视频不卡一不卡二| 国产不卡高清在线观看视频| 在线免费视频一区二区| 日韩欧美国产三级电影视频| 亚洲国产成人私人影院tom| 亚洲线精品一区二区三区| 极品尤物av久久免费看| 色婷婷综合五月| 日韩精品中文字幕在线不卡尤物 | 亚洲伊人色欲综合网| 精品一区二区日韩| 在线看国产一区二区| 久久久青草青青国产亚洲免观| 亚洲综合久久久久| 国产成人99久久亚洲综合精品| 欧美日韩亚洲高清一区二区| 久久久三级国产网站| 午夜精品一区二区三区电影天堂| 国产69精品一区二区亚洲孕妇| 欧美日韩一区小说| 国产精品久久午夜| 麻豆成人免费电影| 色偷偷成人一区二区三区91|