private void VisitChildren(QLNode node)
 {
     foreach (var child in node.Children)
     {
         child.Accept(this);
     }
 }
        public bool Analyse(QLNode node)
        {
            var result     = true;
            var expression = GetExpression(node);

            if (expression != null && AnalyseExpression(expression) == StatementType.Unknown)
            {
                Analyser.AddMessage(string.Format("{0} - This expression isn't valid.", node.Location), Language.QL, MessageType.ERROR);
                return(false);
            }

            switch (node)
            {
            case QLCollectionNode collectionNode:
                foreach (QLNode child in collectionNode.Children)
                {
                    if (!Analyse(child))
                    {
                        result = false;
                    }
                }
                break;

            default:
                return(true);
            }

            return(result);
        }
Пример #3
0
        /// <summary>
        /// A recursive function to find out if the AST contains multiple FormNode
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public bool Analyse(QLNode node)
        {
            //Reset the formNodeCount
            formNodeCount = 0;
            if (node.Type == NodeType.Form)
            {
                this.Visit(node as FormNode);
            }
            else
            {
                this.Visit(node);
            }

            this.Visit(node);

            if (formNodeCount == 0)
            {
                Analyser.AddMessage("There has no form been defined", Language.QL, MessageType.ERROR);
            }
            else if (formNodeCount > 1)
            {
                Analyser.AddMessage("There can only be one form", Language.QL, MessageType.ERROR);
            }

            return(formNodeCount == 1);
        }
        public bool Analyse(QLNode node)
        {
            this._isValid = true;
            this.Visit((dynamic)node);

            return(this._isValid);
        }
        /// <summary>
        /// Parses Node recursively
        /// </summary>
        /// <param name="node">Node to parse</param>
        /// <param name="condition">Base condition, optional</param>
        /// <returns>Collection of widgets</returns>
        public static ElementManager ParseChildNode(QLNode node, ElementManagerController elementManagerController, ElementManagerCollection parent, ExpressionBool condition = null)
        {
            ExpressionFactory expressionFactory = new ExpressionFactory(elementManagerController);

            switch (node)
            {
            case ConditionalNode conditionalNode:
                // Parse condition
                ExpressionBool newCondition = expressionFactory.GetCondition(conditionalNode);

                newCondition = (condition == null) ? newCondition : condition.Combine(newCondition, ExpressionOperator.And) as ExpressionBool;

                // Add children with new condition
                parent.AddChildren(conditionalNode.Children.Select(o => ParseChildNode(o, elementManagerController, parent, newCondition)).Where(o => o != null));
                return(null);

            case QuestionNode questionNode:
                return(CreateElementManager(questionNode, condition, parent, elementManagerController, null));

            case ComputedNode computedNode:
                ExpressionValue expression = expressionFactory.ParseExpressionNode(computedNode.Expression);
                return(CreateElementManager(computedNode, condition, parent, elementManagerController, expression));
            }

            throw new NotImplementedException();
        }
Пример #6
0
        /// <summary>
        /// This function will return true if it doesn't encounter any problems.
        /// </summary>
        public bool Analyse(QLNode node)
        {
            // Reset the Analyser
            this.VisitedIDs.Clear();

            // This visit discovers all the identifiers.
            this.Visit((dynamic)node);
            return(VisitedIDs.Count == VisitedIDs.Distinct().Count());
        }
Пример #7
0
        public static bool Analyse(QLNode qlNode, QLSNode qlsNode)
        {
            Reset();

            if (qlNode == null || qlsNode == null)
            {
                return(false);
            }

            // Analyse QL and QLS.
            var result = true;

            result = Analyse(qlNode) && result;
            result = Analyse(qlsNode) && result;

            return(result);
        }
Пример #8
0
        public static bool Analyse(QLNode node)
        {
            Reset();

            if (node == null)
            {
                return(false);
            }

            var result = true;

            foreach (IQLAnalyser analyser in Instance._qlAnalysers)
            {
                if (!analyser.Analyse(node) && result)
                {
                    result = false;
                }
            }

            return(result);
        }
        /// <summary>
        /// This function gets the expresion from several type of nodes.
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        private IExpressionNode GetExpression(QLNode node)
        {
            switch (node.GetNodeType())
            {
            case NodeType.Conditional:
                var conditional = (ConditionalNode)node;
                return(conditional.Expression);

            case NodeType.Computed:
                var computed = (ComputedNode)node;
                return(computed.Expression);

            case NodeType.ArthimetricExpression:
            case NodeType.ComparisonExpression:
            case NodeType.LogicalExpression:
                return(node as IExpressionNode);

            default:
                return(null);
            }
        }
 public void Visit(QLNode node)
 {
     VisitChildren(node);
 }
 public bool Analyse(QLNode node)
 {
     isValid = true;
     this.Visit(node);
     return(isValid);
 }
Пример #12
0
 public void Visit(QLNode node)
 {
     return;
 }