public override void Visit(AndNode node) { if (!(node.Parent is L1Expression)) { throw new NotSupportedException(String.Format( "Not a CNF or fatal error: '{0}", node.Parent)); } }
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; }
public virtual void Visit(AndNode node){}
protected virtual IAstTreeNode Xform(AndNode node) { return null; }
public sealed override void Visit(AndNode node) { VisitAndXform(node, Xform(node)); }