示例#1
0
        //------------------------------------------------------------
        /// <summary>
        /// IdentityExpression:
        ///   EqualityExpression (IdentityOperator EqualityExpression )*
        /// </summary>
        /// <returns></returns>
        IExpression parseIdentityExpression()
        {
            // 第1式
            IExpression firstExpr = parseEqualityExpression();

            if (firstExpr == null)
            {// エラー
                return(null);
            }
            for (BinaryOpExpression.OpKind opKind = parseIdentityOperator();
                 opKind != BinaryOpExpression.OpKind.Unknnown;
                 opKind = parseEqualityOperator()
                 )
            {
                // トークンをメモ
                Token opToken = currentToken();

                // 次のトークンへ
                nextToken();

                // 第2式
                IExpression secondExpr = parseEqualityExpression();
                if (secondExpr == null)
                {// エラー
                    return(null);
                }

                // 第1式を更新
                firstExpr = new BinaryOpExpression(opToken, opKind, firstExpr, secondExpr);
            }
            return(firstExpr);
        }
示例#2
0
        //------------------------------------------------------------
        /// <summary>
        /// BitwiseOrExpression:
        ///   BitwiseXorExpression (BitwiseOrOperator BitwiseXorExpression)*
        /// </summary>
        /// <returns></returns>
        IExpression parseBitwiseOrExpression()
        {
            // 第1式
            IExpression firstExpr = parseBitwiseXorExpression();

            if (firstExpr == null)
            {// エラー
                return(null);
            }
            while (currentToken().Value == Token.Kind.OpOr)
            {
                // トークンをメモ
                Token opToken = currentToken();

                // 次のトークンへ
                nextToken();

                // 第2式
                IExpression secondExpr = parseBitwiseXorExpression();
                if (secondExpr == null)
                {// エラー
                    return(null);
                }

                // 第1式を更新
                firstExpr = new BinaryOpExpression(opToken, BinaryOpExpression.OpKind.BitwiseOr, firstExpr, secondExpr);
            }
            return(firstExpr);
        }
示例#3
0
 //------------------------------------------------------------
 // コンストラクタ。
 public EvaluateNode(BinaryOpExpression aExpr)
 {
     mExpr       = aExpr;
     mFirstNode  = mExpr.mFirst.CreateEvaluateNode();
     mSecondNode = mExpr.mSecond.CreateEvaluateNode();
 }