Пример #1
0
        public override Verb CreateVerb(string[] tokens)
        {
            Color(position, tokens[1].Length, KeyWords);
            var index = NextPosition;

            if (GetExpressionThenBlock(source, index).If(out var conditionExpression, out var resultBlock, out var newIndex))
            {
                index = newIndex;
                var _if          = new If(conditionExpression, resultBlock);
                var sourceLength = source.Length;
                var currentIf    = _if;
                while (index < sourceLength && parser.Scan(source, index, "^ /(|tabs| 'elseif') /b"))
                {
                    parser.ColorAll(KeyWords);
                    index = parser.Position;
                    if (GetExpressionThenBlock(source, index).If(out conditionExpression, out resultBlock, out newIndex))
                    {
                        index = newIndex;
                        var elseIf = new If(conditionExpression, resultBlock);
                        currentIf.Next = elseIf;
                        currentIf      = elseIf;
                    }
                }

                if (parser.Scan(source, index, "^ /(|tabs| 'else') (/r /n | /r | /n) "))
                {
                    parser.ColorAll(KeyWords);
                    index = parser.Position;
                    if (GetBlock(source, index, true).If(out resultBlock, out newIndex))
                    {
                        _if.ElseBlock = resultBlock;
                        index         = newIndex;
                    }
                    else
                    {
                        _if.ElseBlock = null;
                    }
                }

                var endParser = new EndParser();
                if (endParser.Scan(source, index))
                {
                    index = endParser.Position;
                }

                overridePosition = index;
                return(new IfExecute(_if)
                {
                    Index = position
                });
            }

            return(null);
        }
Пример #2
0
        public override Verb CreateVerb(string[] tokens)
        {
            Color(position, tokens[1].Length, Whitespaces);
            Color(tokens[2].Length, KeyWords);

            if (GetExpression(source, NextPosition, Stop.IfThen()).If(out var condition, out var i) &&
                GetExpression(source, i, Stop.IfElse()).If(out var ifTrue, out var j) &&
                GetExpression(source, j, Stop.IfEnd()).If(out var ifFalse, out var k))
            {
                overridePosition = k;
                var ifResult = new If(condition, ifTrue)
                {
                    ElseBlock = ifFalse
                };
                return(new IfExecute(ifResult, VerbPresidenceType.Push));
            }

            return(null);
        }
Пример #3
0
        public override Verb CreateVerb(string[] tokens)
        {
            Color(position, length, Operators);

            var blocks =
                from e1 in GetExpression(source, NextPosition, FuncThen())
                from e2 in GetExpression(source, e1.position, FuncThen())
                from e3 in GetExpression(source, e2.position, FuncEnd())
                select(e1.block, e2.block, e3.block, e3.position);

            if (blocks.If(out var condition, out var thenExpression, out var elseExpression, out var newPosition))
            {
                overridePosition = newPosition;
                var _if = new If(condition, thenExpression)
                {
                    ElseBlock = elseExpression
                };
                return(new IfExecute(_if, VerbPrecedenceType.Push));
            }

            return(null);
        }
Пример #4
0
        public override Verb CreateVerb(string[] tokens)
        {
            Color(position, tokens[1].Length, Whitespaces);
            Color(tokens[2].Length, KeyWords);

            var expressions =
                from e1 in GetExpression(source, NextPosition, Stop.IfThen())
                from e2 in GetExpression(source, e1.position, Stop.IfElse())
                from e3 in GetExpression(source, e2.position, Stop.IfEnd())
                select(e1.block, e2.block, e3.block, e3.position);

            if (expressions.If(out var condition, out var ifTrue, out var ifFalse, out var newPosition))
            {
                overridePosition = newPosition;
                var ifResult = new If(condition, ifTrue)
                {
                    ElseBlock = ifFalse
                };
                return(new IfExecute(ifResult, VerbPrecedenceType.Push));
            }

            return(null);
        }