示例#1
0
 public override void Visit(OrNode node)
 {
     if (!(node.Parent is L1Expression) && !(node.Parent is AndNode))
     {
         throw new NotSupportedException(String.Format(
             "Not a CNF or fatal error: '{0}", node.Parent));
     }
 }
示例#2
0
        protected override IAstTreeNode Xform(OrNode node)
        {
            foreach(var child in node.Children)
            {
                if (child is AndNode)
                {
                    var restOfDisjunction = (IAstTreeNode)node.Clone();
                    restOfDisjunction.Children.RemoveAll(cchild => cchild.Id == child.Id);

                    var result = new AndNode();
                    foreach(var conjunct in child.Children.Snapshot())
                    {
                        var disjunction = new OrNode();
                        disjunction.Children.Add(conjunct);
                        disjunction.Children.AddRange(restOfDisjunction.Children);
                        result.Children.Add(disjunction);
                    }

                    return result;
                }
            }

            return null;
        }
示例#3
0
 public virtual void Visit(OrNode node){}
示例#4
0
 protected virtual IAstTreeNode Xform(OrNode node) { return null; }
示例#5
0
 public sealed override void Visit(OrNode node) { VisitAndXform(node, Xform(node)); }