Exemplo n.º 1
0
        //------------------------------------------------------------
        /// <summary>
        /// AdditiveExpression:
        ///   MultiplicativeExpression (AdditiveOperator MultiplicativeExpression)*
        /// </summary>
        /// <returns></returns>
        IExpression parseAdditiveExpression()
        {
            // 第1式
            IExpression firstExpr = parseMultiplicativeExpression();

            if (firstExpr == null)
            {// エラー
                return(null);
            }
            for (BinaryOpExpression.OpKind opKind = parseAdditiveOperator();
                 opKind != BinaryOpExpression.OpKind.Unknnown;
                 opKind = parseAdditiveOperator()
                 )
            {
                nextToken();

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

                // 第1式を更新
                firstExpr = new BinaryOpExpression(opKind, firstExpr, secondExpr);
            }
            return(firstExpr);
        }
Exemplo n.º 2
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()
                 )
            {
                nextToken();

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

                // 第1式を更新
                firstExpr = new BinaryOpExpression(opKind, firstExpr, secondExpr);
            }
            return(firstExpr);
        }
Exemplo n.º 3
0
        //------------------------------------------------------------
        /// <summary>
        /// EqualityExpression:
        ///   RelationalExpression (EqulityOperator RelationalExpression)*
        /// </summary>
        /// <returns></returns>
        IExpression parseEqualityExpression()
        {
            // 第1式
            IExpression firstExpr = parseRelationalExpression();

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

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

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

                // 第1式を更新
                firstExpr = new BinaryOpExpression(opToken, opKind, firstExpr, secondExpr);
            }
            return(firstExpr);
        }