コード例 #1
0
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return(parser.CurrentToken.Type == HlTokenType.OpPlus &&
            parser.Reader.PeekNext().Type == HlTokenType.OpPlus ||
            parser.CurrentToken.Type == HlTokenType.OpMinus &&
            parser.Reader.PeekNext().Type == HlTokenType.OpMinus);
 }
コード例 #2
0
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return(parser.CurrentToken.Type == HlTokenType.OpLessThan &&
            parser.Reader.PeekNext().Type == HlTokenType.OpLessThan ||
            parser.CurrentToken.Type == HlTokenType.OpGreaterThan &&
            parser.Reader.PeekNext().Type == HlTokenType.OpGreaterThan);
 }
コード例 #3
0
ファイル: MulDivModOperators.cs プロジェクト: ByteChkR/VisCPU
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return((parser.CurrentToken.Type == HlTokenType.OpAsterisk ||
             parser.CurrentToken.Type == HlTokenType.OpFwdSlash ||
             parser.CurrentToken.Type == HlTokenType.OpPercent) &&
            parser.Reader.PeekNext().Type != HlTokenType.OpEquality);
 }
コード例 #4
0
ファイル: UnaryOperators.cs プロジェクト: ByteChkR/VisCPU
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return(parser.CurrentToken.Type == HlTokenType.OpMinus &&
            parser.Reader.PeekNext().Type == HlTokenType.OpMinus ||
            parser.CurrentToken.Type == HlTokenType.OpBang &&
            parser.Reader.PeekNext().Type != HlTokenType.OpEquality ||
            parser.CurrentToken.Type == HlTokenType.OpTilde &&
            parser.Reader.PeekNext().Type != HlTokenType.OpEquality);
 }
コード例 #5
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            parser.Eat(HlTokenType.OpCap);

            return(new HlBinaryOp(
                       currentNode,
                       HlTokenType.OpCap,
                       parser.ParseExpr(PrecedenceLevel)
                       ));
        }
コード例 #6
0
ファイル: UnaryOperators.cs プロジェクト: ByteChkR/VisCPU
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            HlTokenType type = parser.CurrentToken.Type;

            parser.Eat(type);

            HlExpression token = new HlUnaryOp(parser.ParseExpr(PrecedenceLevel), type);

            return(token);
        }
コード例 #7
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            HlTokenType tt = parser.CurrentToken.Type == HlTokenType.OpPlus
                                 ? HlTokenType.OpUnaryPostfixIncrement
                                 : HlTokenType.OpUnaryPostfixDecrement;

            parser.Eat(parser.CurrentToken.Type);
            parser.Eat(parser.CurrentToken.Type);

            HlExpression token =
                new HlUnaryOp(currentNode, tt);

            return(token);
        }
コード例 #8
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            parser.Eat(HlTokenType.OpBang);
            parser.Eat(HlTokenType.OpEquality);

            return(new HlUnaryOp(
                       new HlBinaryOp(
                           currentNode,
                           HlTokenType.OpComparison,
                           parser.ParseExpr(PrecedenceLevel)
                           ),
                       HlTokenType.OpBang
                       ));
        }
コード例 #9
0
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return((parser.CurrentToken.Type == HlTokenType.OpPlus ||
             parser.CurrentToken.Type == HlTokenType.OpMinus ||
             parser.CurrentToken.Type == HlTokenType.OpAsterisk ||
             parser.CurrentToken.Type == HlTokenType.OpFwdSlash ||
             parser.CurrentToken.Type == HlTokenType.OpPercent ||
             parser.CurrentToken.Type == HlTokenType.OpAnd ||
             parser.CurrentToken.Type == HlTokenType.OpPipe ||
             parser.CurrentToken.Type == HlTokenType.OpCap) &&
            parser.Reader.PeekNext().Type == HlTokenType.OpEquality ||
            parser.CurrentToken.Type == HlTokenType.OpLessThan &&
            parser.Reader.PeekNext().Type == HlTokenType.OpLessThan &&
            parser.Reader.PeekNext(2).Type == HlTokenType.OpLessThan ||
            parser.CurrentToken.Type == HlTokenType.OpGreaterThan &&
            parser.Reader.PeekNext().Type == HlTokenType.OpGreaterThan &&
            parser.Reader.PeekNext(2).Type == HlTokenType.OpLessThan);
 }
コード例 #10
0
ファイル: RelationOperators.cs プロジェクト: ByteChkR/VisCPU
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            HlTokenType type = parser.CurrentToken.Type;

            parser.Eat(parser.CurrentToken.Type);
            HlExpression node = null;

            if (type == HlTokenType.OpLessThan)
            {
                if (parser.CurrentToken.Type == HlTokenType.OpEquality)
                {
                    parser.Eat(HlTokenType.OpEquality);

                    node = new HlBinaryOp(
                        currentNode,
                        HlTokenType.OpLessOrEqual,
                        parser.ParseExpr(PrecedenceLevel)
                        );
                }
                else
                {
                    node = new HlBinaryOp(currentNode, type, parser.ParseExpr(PrecedenceLevel));
                }
            }
            else if (type == HlTokenType.OpGreaterThan)
            {
                if (parser.CurrentToken.Type == HlTokenType.OpEquality)
                {
                    parser.Eat(HlTokenType.OpEquality);

                    node = new HlBinaryOp(
                        currentNode,
                        HlTokenType.OpGreaterOrEqual,
                        parser.ParseExpr(PrecedenceLevel)
                        );
                }
                else
                {
                    node = new HlBinaryOp(currentNode, type, parser.ParseExpr(PrecedenceLevel));
                }
            }

            return(node);
        }
コード例 #11
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            HlTokenType type = parser.CurrentToken.Type;

            parser.Eat(type);
            parser.Eat(type);

            if (type == HlTokenType.OpLessThan)
            {
                type = HlTokenType.OpShiftLeft;
            }
            else if (type == HlTokenType.OpGreaterThan)
            {
                type = HlTokenType.OpShiftRight;
            }

            return(new HlBinaryOp(
                       currentNode,
                       type,
                       parser.ParseExpr(PrecedenceLevel)
                       ));
        }
コード例 #12
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            parser.Eat(HlTokenType.OpIndexerBracketOpen);
            List <HlExpression> parameterList = new List <HlExpression>();
            bool comma = false;

            while (parser.CurrentToken.Type != HlTokenType.OpIndexerBracketClose)
            {
                if (comma)
                {
                    parser.Eat(HlTokenType.OpComma);
                }
                else
                {
                    parameterList.Add(parser.ParseExpr());
                    comma = true;
                }
            }

            parser.Eat(HlTokenType.OpIndexerBracketClose);

            return(new HlArrayAccessorOp(currentNode, parameterList));
        }
コード例 #13
0
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return(parser.CurrentToken.Type == HlTokenType.OpIndexerBracketOpen);
 }
コード例 #14
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            parser.Eat(HlTokenType.OpDot);

            return(new HlMemberAccessOp(currentNode, parser.ParseExpr(PrecedenceLevel)));
        }
コード例 #15
0
 /// <summary>
 ///     Returns true if the parser is in a state that allows the creation of an implemented operator
 /// </summary>
 /// <param name="parser">Parser</param>
 /// <param name="currentNode">Current Expression Node</param>
 /// <returns>True if this Expression operator can create an expression</returns>
 public override bool CanCreate(HlExpressionParser parser, HlExpression currentNode)
 {
     return(parser.CurrentToken.Type == HlTokenType.OpDot);
 }
コード例 #16
0
        /// <summary>
        ///     Creates an implemented expression
        /// </summary>
        /// <param name="parser">XLExpressionParser</param>
        /// <param name="currentNode">Current Expression Node</param>
        /// <returns></returns>
        public override HlExpression Create(HlExpressionParser parser, HlExpression currentNode)
        {
            IHlToken token = parser.CurrentToken;

            HlTokenType tt;

            switch (parser.CurrentToken.Type)
            {
            case HlTokenType.OpPlus:
                tt = HlTokenType.OpSumAssign;

                break;

            case HlTokenType.OpMinus:
                tt = HlTokenType.OpDifAssign;

                break;

            case HlTokenType.OpAsterisk:
                tt = HlTokenType.OpProdAssign;

                break;

            case HlTokenType.OpFwdSlash:
                tt = HlTokenType.OpQuotAssign;

                break;

            case HlTokenType.OpPercent:
                tt = HlTokenType.OpRemAssign;

                break;

            case HlTokenType.OpPipe:
                tt = HlTokenType.OpOrAssign;

                break;

            case HlTokenType.OpAnd:
                tt = HlTokenType.OpAndAssign;

                break;

            case HlTokenType.OpCap:
                tt = HlTokenType.OpXOrAssign;

                break;

            case HlTokenType.OpGreaterThan:
                tt = HlTokenType.OpShiftRightAssign;
                parser.Eat(token.Type);

                break;

            case HlTokenType.OpLessThan:
                tt = HlTokenType.OpShiftLeftAssign;
                parser.Eat(token.Type);

                break;

            default:
                EventManager <ErrorEvent> .SendEvent(
                    new HlTokenReadEvent(
                        HlTokenType.Any,
                        parser.CurrentToken.Type
                        )
                    );

                tt = HlTokenType.Unknown;

                break;
            }

            parser.Eat(token.Type);
            parser.Eat(HlTokenType.OpEquality);

            return(new HlBinaryOp(currentNode, tt, parser.ParseExpr(PrecedenceLevel)));
        }