private void ProcessConceptLeaf()
        {
            _lastIsOperator = null;

            var value = NameHelper.CreateName(_currToken.Content);

            var kindOfName = value.KindOfName;

            switch (kindOfName)
            {
            case KindOfName.Concept:
            case KindOfName.Channel:
            case KindOfName.Entity:
            {
                var node = new ConstValueAstExpression();
                node.Value = value;

                var intermediateNode = new IntermediateAstNode(node);

                AstNodesLinker.SetNode(intermediateNode, _nodePoint);

                _state = State.GotName;
            }
            break;

            default:
                throw new ArgumentOutOfRangeException(nameof(kindOfName), kindOfName, null);
            }
        }
        private void ProcessCallingFunction()
        {
            _lastIsOperator = null;

            _context.Recovery(_currToken);

            var parser = new CallingFunctionExpressionParser(_context);

            parser.Run();

            var node = parser.Result;

#if DEBUG
            //Log($"node = {node}");
#endif

            var priority = OperatorsHelper.GetPriority(KindOfOperator.CallFunction);

#if DEBUG
            //Log($"priority = {priority}");
#endif

            var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.UnaryOperator, priority);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);

            _state = State.Init;
        }
        private void ProcessStringToken()
        {
            _lastIsOperator = null;

            var node  = new ConstValueAstExpression();
            var value = new StringValue(_currToken.Content);

            node.Value = value;

            var intermediateNode = new IntermediateAstNode(node);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);
        }
Esempio n. 4
0
        private void RunAssignBinaryOperator(BinaryOperatorAstExpression expression)
        {
#if DEBUG
            //Log($"expression = {expression}");
#endif

            var rightBranch = expression.Right;

#if DEBUG
            //Log($"rightBranch = {rightBranch}");
#endif

            if (rightBranch.Kind == KindOfAstExpression.ConstValue)
            {
                var rightNode = new ExpressionNode(_context);
                rightNode.Run(rightBranch);
                AddCommands(rightNode.Result);
            }
            else
            {
                var command = new IntermediateScriptCommand();
                command.OperationCode = OperationCode.PushValToVar;
                command.Value         = (rightBranch as VarAstExpression).Name;

                AddCommand(command);
            }

            var leftBranch = expression.Left;

#if DEBUG
            //Log($"leftBranch = {leftBranch}");
#endif

            if (leftBranch.Kind == KindOfAstExpression.Var)
            {
                var command = new IntermediateScriptCommand();
                command.OperationCode = OperationCode.PushValToVar;
                command.Value         = (leftBranch as VarAstExpression).Name;

                AddCommand(command);
            }
            else
            {
                var rightNode = new ExpressionNode(_context);
                rightNode.Run(leftBranch);
                AddCommands(rightNode.Result);
            }
        }
        private void ProcessIsOperator()
        {
            var node = new BinaryOperatorAstExpression();

            node.KindOfOperator = KindOfOperator.Is;

            _lastIsOperator = node;

            var priority = OperatorsHelper.GetPriority(node.KindOfOperator);

            var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.BinaryOperator, priority);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);

            _state = State.Init;
        }
        private void ProcessVar()
        {
            _lastIsOperator = null;

            var value = NameHelper.CreateName(_currToken.Content);

            var node = new VarAstExpression();

            node.Name = value;

            var intermediateNode = new IntermediateAstNode(node);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);

            _state = State.GotName;
        }
        private void ProcessChannel()
        {
            _lastIsOperator = null;

            var name = NameHelper.CreateName(_currToken.Content);

#if DEBUG
            //Log($"name = {name}");
#endif

            var node = new ConstValueAstExpression();
            node.Value = name;

            var intermediateNode = new IntermediateAstNode(node);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);
        }
Esempio n. 8
0
        public void Run(BinaryOperatorAstExpression expression)
        {
#if DEBUG
            //Log($"expression = {expression}");
#endif

            var kindOfOperator = expression.KindOfOperator;

            switch (kindOfOperator)
            {
            case KindOfOperator.Assign:
                RunAssignBinaryOperator(expression);
                break;

            default:
                RunUsualBinaryOperator(expression);
                break;
            }
        }
        private void ProcessUsualBinaryOperator(KindOfOperator kindOfOperator)
        {
            _lastIsOperator = null;

            var node = new BinaryOperatorAstExpression();

            node.KindOfOperator = kindOfOperator;

            var priority = OperatorsHelper.GetPriority(kindOfOperator);

#if DEBUG
            //Log($"priority = {priority}");
#endif

            var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.BinaryOperator, priority);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);

            _state = State.Init;
        }
Esempio n. 10
0
        private void RunUsualBinaryOperator(BinaryOperatorAstExpression expression)
        {
            var leftNode = new ExpressionNode(_context);

            leftNode.Run(expression.Left);
            AddCommands(leftNode.Result);

            var rightNode = new ExpressionNode(_context);

            rightNode.Run(expression.Right);
            AddCommands(rightNode.Result);

            CompilePushAnnotation(expression);

            var command = new IntermediateScriptCommand();

            command.OperationCode  = OperationCode.CallBinOp;
            command.KindOfOperator = expression.KindOfOperator;

            AddCommand(command);
        }
        private void ProcessNot()
        {
#if DEBUG
            //Log($"_lastIsOperator = {_lastIsOperator}");
#endif

            if (_lastIsOperator == null)
            {
                ProcessConceptLeaf();
                return;
            }

            if (_lastIsOperator.KindOfOperator == KindOfOperator.Is)
            {
                _lastIsOperator.KindOfOperator = KindOfOperator.IsNot;
                _lastIsOperator = null;
                return;
            }

            throw new UnexpectedTokenException(_currToken);
        }
        private void ProcessLogicalQueryOperator()
        {
            _lastIsOperator = null;

            //_context.Recovery(_currToken);
            var parser = new LogicalQueryOperationParser(_context);

            parser.Run();

            var resultItem = parser.Result;

#if DEBUG
            //Log($"resultItem = {resultItem}");
#endif

            var node = new UnaryOperatorAstExpression();
            node.KindOfOperator = KindOfOperator.CallLogicalQuery;

            var priority = OperatorsHelper.GetPriority(node.KindOfOperator);

#if DEBUG
            //Log($"priority = {priority}");
#endif

            var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.UnaryOperator, priority);

            AstNodesLinker.SetNode(intermediateNode, _nodePoint);

            var valueNode = new ConstValueAstExpression();
            valueNode.Value = resultItem;

            var valueIntermediateNode = new IntermediateAstNode(valueNode);

            AstNodesLinker.SetNode(valueIntermediateNode, _nodePoint);

            _state = State.GotCallLogicalQueryOperator;
        }