Mercurial > hg > Applications > JavaLite
changeset 9:e17ffe9025d3
first try
author | kono |
---|---|
date | Wed, 26 Dec 2007 16:09:16 +0900 |
parents | 18dbdc0321b9 |
children | 7657225552a8 |
files | src/lite/AndSolver.java src/lite/Continuation.java src/lite/ExistsSolver.java src/lite/FalseSolver.java src/lite/ITLSatisfier.java src/lite/ITLSolver.java src/lite/ITLSolverTest.java src/lite/MacroSolver.java src/lite/Next.java src/lite/NotSolver.java src/lite/OrSolver.java src/lite/PredicateSolver.java src/lite/TrueSolver.java src/lite/VariableSolver.java |
diffstat | 14 files changed, 426 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/AndSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,39 @@ +package lite; + +import verifier.Backtrack; + + +public class AndSolver extends ITLSolver { + + ITLSolver left; + ITLSolver right; + + public AndSolver(ITLSolver _left,ITLSolver _right) { + left = _left; + right = _right; + } + public boolean value() { + return left.value() && right.value(); + } + + public String toString() { + return "("+left+" and "+right+")"; + } + + + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + + return left.sat(sat, new Continuation(sat,next,this)); + } + + @Override + public ITLSolver next(ITLSatisfier sat,Continuation next, ITLSolver value) throws Backtrack { + if (value!=null) { + return right.sat(sat, next); + } else { + return next.sat(null); + } + } + + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/Continuation.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,21 @@ +package lite; + +import verifier.Backtrack; + +public class Continuation { + + public ITLSatisfier sat; + public Continuation next; + public ITLSolver solver; + + public Continuation(ITLSatisfier sat, Continuation next, ITLSolver solver) { + + // keep next and our boss's state (solver) + this.sat = sat; this.next = next; this.solver = solver; + } + + public ITLSolver sat(ITLSolver value) throws Backtrack { + // We've gotten the value, pass it to our boss with next execution point + return solver.next(sat,next,value); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/ExistsSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,43 @@ +package lite; + +import verifier.Backtrack; + +public class ExistsSolver extends ITLSolver { + + ITLSolver node; + ITLSolver var; + + public ExistsSolver(ITLSolver var, ITLSolver node) { + this.node = node; + this.var = var; + } + + public boolean value() { + boolean v; + var.setValue(this); + v = node.value(); + if (v) return v; + var.setValue(null); + return node.value(); + } + + public String toString() { + return "exists("+var+","+node+")"; + } + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + var.setValue(this); + return node.sat(sat, new Continuation(sat,next,this)); + } + + public ITLSolver next(ITLSatisfier sat,Continuation next, ITLSolver value) throws Backtrack { + if (value == null) { + var.setValue(null); + return node.sat(sat, next); + } else { + return next.sat(sat.true_()); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/FalseSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,18 @@ +package lite; + +import verifier.Backtrack; + +public class FalseSolver extends ITLSolver { + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + return next.sat(null); + } + + public boolean value() { return false; } + + public String toString() { + return "false"; + } + +}
--- a/src/lite/ITLSatisfier.java Wed Dec 26 12:29:31 2007 +0900 +++ b/src/lite/ITLSatisfier.java Wed Dec 26 16:09:16 2007 +0900 @@ -9,6 +9,8 @@ public class ITLSatisfier implements ChoicePointList<ITLSolver>, Next { + static public final ITLSolver true_ = new TrueSolver(); + public ITLSatisfier(ITLSolver true_) { // TODO Auto-generated constructor stub } @@ -37,4 +39,8 @@ // TODO Auto-generated method stub return null; } + + public ITLSolver true_() { + return true_; + } }
--- a/src/lite/ITLSolver.java Wed Dec 26 12:29:31 2007 +0900 +++ b/src/lite/ITLSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -1,14 +1,13 @@ package lite; +import java.util.LinkedList; + import verifier.Backtrack; -import verifier.Continuation; -import verifier.LogicSolver; -import verifier.Satisfier; + +public class ITLSolver implements Next { -public class ITLSolver extends LogicSolver { - @Override - public ITLSolver sat(Satisfier sat, Continuation next) throws Backtrack { + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { // TODO Auto-generated method stub return null; } @@ -19,10 +18,30 @@ return null; } - @Override + public ITLSolver next(ITLSatisfier sat, lite.Continuation next, ITLSolver value) throws Backtrack { + // TODO Auto-generated method stub + return null; + } + public boolean value() { - // TODO Auto-generated method stub return false; } + public void setValue(ITLSolver solver) { + + } + + public boolean isMacro() { + return false; + } + + + public LinkedList<ITLSolver> arguments() { + return null; + } + + public ITLSolver eval(LinkedList<ITLSolver> args) { + return this; + } + }
--- a/src/lite/ITLSolverTest.java Wed Dec 26 12:29:31 2007 +0900 +++ b/src/lite/ITLSolverTest.java Wed Dec 26 16:09:16 2007 +0900 @@ -11,6 +11,16 @@ true_= lf.trueNode(); p = new ITLNodeParser<ITLSolver>(lf); + + System.out.println(p.parse("p & q")); + System.out.println(p.parse("p & @q")); + System.out.println(p.parse("<>(p)")); + System.out.println(p.parse("[](p)")); + System.out.println(p.parse("empty & q")); + System.out.println(p.parse("fin(p)=[](<>(p))")); + System.out.println(p.parse("length(3)")); + System.out.println(p.parse("[](more)")); + sat("false"); sat("true"); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/MacroSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,59 @@ +package lite; + +import java.util.LinkedList; + +import verifier.Backtrack; + +public class MacroSolver extends ITLSolver { + + + private ITLSolver predicate; + private String body; + private ITLNodeParser<ITLSolver> parser; + + + public MacroSolver(ITLSolver macro, String body, ITLNodeParser<ITLSolver> parser) { + this.predicate = macro; + this.body = body; + this.parser = parser; + } + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + // TODO Auto-generated method stub + return null; + } + + @Override + public String toString() { + return predicate.toString(); + } + + @Override + public boolean value() { + // TODO Auto-generated method stub + return false; + } + + + @Override + public boolean isMacro() { + return true; + } + + @Override + public LinkedList<ITLSolver> arguments() { + return predicate.arguments(); + } + + /* + * Macro Expansion + * locally define parameters by given arguments + */ + @Override + public ITLSolver eval(LinkedList<ITLSolver> args) { + return parser.eval(args, predicate, body,predicate.arguments()); + } + + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/Next.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,9 @@ +package lite; + +import verifier.Backtrack; + +public interface Next { + + public ITLSolver next(ITLSatisfier sat,Continuation next, ITLSolver value) throws Backtrack; + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/NotSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,35 @@ +package lite; + +import verifier.Backtrack; + + + + +public class NotSolver extends ITLSolver { + + ITLSolver node; + + public NotSolver(ITLSolver node) { + this.node = node; + } + + public boolean value() { + return ! node.value() ; + } + + public String toString() { + return "(not "+node+")"; + } + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + + return node.sat(sat, new Continuation(sat,next,this)); + } + + @Override + public ITLSolver next(ITLSatisfier sat,Continuation next, ITLSolver value) throws Backtrack { + return next.sat(value==null?ITLSatisfier.true_:null); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/OrSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,40 @@ +package lite; + +import verifier.Backtrack; + + + +public class OrSolver extends ITLSolver { + + ITLSolver left; + ITLSolver right; + public OrSolver(ITLSolver left, ITLSolver right) { + this.left = left; + this.right = right; + } + public boolean value() { + return left.value() || right.value(); + } + + public String toString() { + return "("+left+" or "+right+")"; + } + + + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + + return left.sat(sat, new Continuation(sat,next,this)); + } + + public ITLSolver next(ITLSatisfier sat,Continuation next, ITLSolver value) throws Backtrack { + if (value!=null) { + return right.sat(sat, next); + } else { + return next.sat(ITLSatisfier.true_); + } + } + + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/PredicateSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,43 @@ +package lite; + +import java.util.LinkedList; + +import verifier.Backtrack; + + + +public class PredicateSolver extends ITLSolver { + + private LinkedList<ITLSolver> arg; + private ITLSolver predicate; + + public PredicateSolver(ITLSolver predicate, LinkedList<ITLSolver> arg) { + this.predicate = predicate; + this.arg = arg; + } + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + // TODO Auto-generated method stub + return null; + } + + @Override + public String toString() { + return predicate.toString(); + } + + @Override + public boolean value() { + // TODO Auto-generated method stub + return false; + } + + @Override + public LinkedList<ITLSolver> arguments() { + return arg; + } + + + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/TrueSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,22 @@ +package lite; + +import verifier.Backtrack; + +public class TrueSolver extends ITLSolver { + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + return next.sat(ITLSatisfier.true_); + } + + + public String toString() { + return "true"; + } + + + @Override + public boolean value() { + return true; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lite/VariableSolver.java Wed Dec 26 16:09:16 2007 +0900 @@ -0,0 +1,54 @@ +package lite; + +import verifier.Backtrack; + +public class VariableSolver extends ITLSolver { + + public String name; + public boolean value; + + public VariableSolver(String _name0, boolean _value0) { + name = _name0; + value = _value0; + } + + public String name() { + return name; + } + public boolean value() { + return value; + } + + public String toString() { + // return name+"."+this.hashCode(); + return name; + } + + public void setValue(ITLSolver b) { + value = b!=null; + } + + @Override + public ITLSolver sat(ITLSatisfier sat, Continuation next) throws Backtrack { + if (sat.hasChoicePoint(this)) { + // choice point is already made, use it + return next.sat(value?ITLSatisfier.true_:null); + } + sat.addChoicePoint(this); + value = true; // the first choice + try { + return next.sat(ITLSatisfier.true_); + } catch (Backtrack e) { + value = false; // the second choice + try { + return next.sat(null); + } catch (Backtrack e1) { + // no more choices, remove this choice and + // request backtrack to the previous choice or + // top level terminator + sat.deleteChoicePoint(this); + throw e1; + } + } + } +}