예제 #1
0
        public override void Visit(TermNode node)
        {
            Term term;
            IAstTreeNode clauseRoot;

            if (node.Parent is NegationNode)
            {
                term = new Term(node, false);
                clauseRoot = node.Parent.Parent;
            }
            else if (node.Parent is OrNode || node.Parent is L1Expression)
            {
                term = new Term(node, true);
                clauseRoot = node.Parent;
            }
            else if (node.Parent is AndNode)
            {
                term = new Term(node, true);
                clauseRoot = node;
            }
            else
            {
                throw new NotSupportedException(String.Format(
                    "Not a CNF or fatal error: '{0}", node.Parent));
            }

            if (!_clauses.ContainsKey(clauseRoot)) _clauses[clauseRoot] = new Clause();
            _clauses[clauseRoot].Terms.Add(term);
        }
예제 #2
0
 public virtual void Visit(TermNode node){}
예제 #3
0
파일: TreeDumper.cs 프로젝트: xeno-by/rapt
        public override void Visit(TermNode node)
        {
            writer.WriteLine(node.ToString());
//            writer.WriteLine(node.Token);
        }
예제 #4
0
파일: Term.cs 프로젝트: xeno-by/rapt
 public Term(TermNode node, bool polarity)
 {
     Polarity = polarity;
     TermNode = node;
 }
예제 #5
0
파일: Term.cs 프로젝트: xeno-by/rapt
 public Term(TermNode node)
     :this(node, node.Parent == null ? true : !(node.Parent is NegationNode))
 {
 }
예제 #6
0
 protected virtual IAstTreeNode Xform(TermNode node) { return null; }
예제 #7
0
 public sealed override void Visit(TermNode node) { VisitAndXform(node, Xform(node)); }