예제 #1
0
        private static Scripts.Logic.Conditional CreateConditionalSubStep(XmlNode node)
        {
            switch (node.Name)
            {
            case "equals": {
                /// must have two attributes. their names are unimportants
                string A = node.Attributes[0].Value;
                string B = node.Attributes[1].Value;
                return(new Scripts.EqualityConditional(A, B));
            }

            case "and":
            {
                Scripts.Logic.Conjunction conjunction = new SNAP.Scripts.Logic.Conjunction();
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    conjunction.SubTerms.Add(CreateConditionalSubStep(childNode));
                }

                return(conjunction);
            }

            case "or":
            {
                Scripts.Logic.Conjunction conjunction = new SNAP.Scripts.Logic.Conjunction();
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    conjunction.SubTerms.Add(CreateConditionalSubStep(childNode));
                }

                return(conjunction);
            }

            case "not":
                System.Diagnostics.Debug.Assert(node.ChildNodes.Count == 1);
                return(new Scripts.Logic.Negation(CreateConditionalSubStep(node.FirstChild)));
            }

            throw new System.ArgumentException("The conditional type " + node.Name + " is invalid");
        }
        private static Scripts.Logic.Conditional CreateConditionalSubStep(XmlNode node)
        {
            switch (node.Name)
            {
                case "equals": {
                        /// must have two attributes. their names are unimportants
                        string A = node.Attributes[0].Value;
                        string B = node.Attributes[1].Value;
                        return new Scripts.EqualityConditional(A, B);
                    }

                case "and":
                    {
                        Scripts.Logic.Conjunction conjunction = new SNAP.Scripts.Logic.Conjunction();
                        foreach (XmlNode childNode in node.ChildNodes)
                        {
                            conjunction.SubTerms.Add(CreateConditionalSubStep(childNode));
                        }

                        return conjunction;
                    }

                case "or":
                    {
                        Scripts.Logic.Conjunction conjunction = new SNAP.Scripts.Logic.Conjunction();
                        foreach (XmlNode childNode in node.ChildNodes)
                        {
                            conjunction.SubTerms.Add(CreateConditionalSubStep(childNode));
                        }

                        return conjunction;
                    }

                case "not":
                    System.Diagnostics.Debug.Assert(node.ChildNodes.Count == 1);
                    return new Scripts.Logic.Negation(CreateConditionalSubStep(node.FirstChild));
            }

            throw new System.ArgumentException("The conditional type " + node.Name + " is invalid");
        }