예제 #1
0
        /// <summary>
        /// visit LogicalExpression
        /// </summary>
        /// <param name="expression"></param>
        public void Visit(SelectionRule rule)
        {
            VisitorEventArgs <T> args = new VisitorEventArgs <T>(currentNode: rule, stack: _stack);

            // call the event
            VisitingSelectionRule(this, args);

            // visit subnodes from left to right
            Visit(rule.Result);
            Visit(rule.Selection);

            // call the event
            VisitedSelectionRule(this, args);
        }
예제 #2
0
        /// <summary>
        /// visit operation Selection
        /// </summary>
        /// <param name="expression"></param>
        public void Visit(FunctionCall call)
        {
            VisitorEventArgs <T> args = new VisitorEventArgs <T>(currentNode: call, stack: _stack);

            // call the event
            VisitingFunctionCall(this, args);

            // visit subnodes
            foreach (INode node in call.Nodes)
            {
                Visit(node);
            }

            // call the event
            VisitedFunctionCall(this, args);
        }
예제 #3
0
        /// <summary>
        /// visit operation Selection
        /// </summary>
        /// <param name="expression"></param>
        public void Visit(OperationExpression expression)
        {
            VisitorEventArgs <T> args = new VisitorEventArgs <T>(currentNode: expression, stack: _stack);

            // call the event
            VisitingOperationExpression(this, args);

            // visit subnodes from left to right
            if (expression.Operator.Arguments >= 1)
            {
                Visit(expression.LeftOperand);
            }
            if (expression.Operator.Arguments >= 2)
            {
                Visit(expression.RightOperand);
            }

            // call the event
            VisitedOperationExpression(this, args);
        }
예제 #4
0
        /// <summary>
        /// visit the variable
        /// </summary>
        /// <param name="literal"></param>
        public void Visit(DataObjectEntrySymbol symbol)
        {
            VisitorEventArgs <T> args = new VisitorEventArgs <T>(currentNode: symbol, stack: _stack);

            VisitingDataObjectSymbol(this, args);
        }
예제 #5
0
        /// <summary>
        /// visit the variable
        /// </summary>
        /// <param name="literal"></param>
        public void Visit(Variable variable)
        {
            VisitorEventArgs <T> args = new VisitorEventArgs <T>(currentNode: variable, stack: _stack);

            VisitingVariable(this, args);
        }
예제 #6
0
        /// <summary>
        /// visit the literal
        /// </summary>
        /// <param name="literal"></param>
        public void Visit(Literal literal)
        {
            VisitorEventArgs <T> args = new VisitorEventArgs <T>(currentNode: literal, stack: _stack);

            VisitingLiteral(this, args);
        }