|
From: <jom...@us...> - 2008-09-27 12:49:07
|
Revision: 1380
http://jason.svn.sourceforge.net/jason/?rev=1380&view=rev
Author: jomifred
Date: 2008-09-27 12:48:55 +0000 (Sat, 27 Sep 2008)
Log Message:
-----------
Add annotations in the java classes to help the generation of UML diagrams in the apidoc (using UMLGraph)
Implement the new hierarchy of classes related to Literal and Atom -- as discussed in the jason-developers
list.
To create a new literal, the previous
method
Literal.parseLiteral(....)
still works, but the constructor
new Literal(...)
has to be used as
new LiteralImpl(....)
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/asunit/TestArch.java
trunk/applications/jason-moise/src/jmoise/OrgAgent.java
trunk/applications/jason-team/src/java/arch/ACProxy.java
trunk/applications/jason-team/src/java/arch/CowboyArch.java
trunk/build.xml
trunk/demos/sync-environment/EnvSync.java
trunk/examples/game-of-life/LifeEnvironment.java
trunk/examples/gold-miners-II/arch/MinerArch.java
trunk/examples/gold-miners-II/env/MiningEnvironment.java
trunk/examples/sniffer/comm/SnifferCentralised.java
trunk/release-notes.txt
trunk/src/jason/JasonException.java
trunk/src/jason/asSemantics/ActionExec.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/ArithExpr.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/BinaryStructure.java
trunk/src/jason/asSyntax/InternalActionLiteral.java
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/LogExpr.java
trunk/src/jason/asSyntax/NumberTermImpl.java
trunk/src/jason/asSyntax/Plan.java
trunk/src/jason/asSyntax/PlanBodyImpl.java
trunk/src/jason/asSyntax/PlanLibrary.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/RelExpr.java
trunk/src/jason/asSyntax/Rule.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/Trigger.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/asSyntax/patterns/goal/BC.java
trunk/src/jason/asSyntax/patterns/goal/EBDG.java
trunk/src/jason/asSyntax/patterns/goal/MG.java
trunk/src/jason/asSyntax/patterns/goal/OMC.java
trunk/src/jason/asSyntax/patterns/goal/RC.java
trunk/src/jason/asSyntax/patterns/goal/SMC.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/jason/bb/JDBCPersistentBB.java
trunk/src/jason/functions/RuleToFunction.java
trunk/src/jason/stdlib/add_annot.java
trunk/src/jason/stdlib/add_nested_source.java
trunk/src/jason/stdlib/add_plan.java
trunk/src/jason/stdlib/desire.java
trunk/src/jason/stdlib/remove_plan.java
trunk/src/test/BeliefBaseTest.java
trunk/src/test/ExprTermTest.java
trunk/src/test/PlanTest.java
trunk/src/test/TermTest.java
trunk/src/test/VarTermTest.java
Added Paths:
-----------
trunk/src/jason/stdlib/package.html
Removed Paths:
-------------
trunk/src/jason/stdlib/package.dox
Modified: trunk/applications/as-unit-test/src/jason/asunit/TestArch.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/asunit/TestArch.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/applications/as-unit-test/src/jason/asunit/TestArch.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -4,7 +4,6 @@
import jason.architecture.AgArch;
import jason.asSemantics.ActionExec;
import jason.asSyntax.Literal;
-import jason.asSyntax.Structure;
import jason.environment.Environment;
import jason.infra.centralised.CentralisedAgArch;
import jason.infra.centralised.CentralisedEnvironment;
@@ -20,7 +19,7 @@
private Condition condition;
private int cycle = 0;
- private List<Structure> actions = new ArrayList<Structure>();
+ private List<Literal> actions = new ArrayList<Literal>();
StringBuilder output = new StringBuilder();
@@ -40,7 +39,7 @@
return cycle;
}
- public List<Structure> getActions() {
+ public List<Literal> getActions() {
return actions;
}
Modified: trunk/applications/jason-moise/src/jmoise/OrgAgent.java
===================================================================
--- trunk/applications/jason-moise/src/jmoise/OrgAgent.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/applications/jason-moise/src/jmoise/OrgAgent.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -13,6 +13,7 @@
import jason.asSyntax.DefaultTerm;
import jason.asSyntax.InternalActionLiteral;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.PlanBody;
import jason.asSyntax.PlanBodyImpl;
import jason.asSyntax.Pred;
@@ -216,7 +217,7 @@
}
- private void generateObligationPermissionEvents(Pred m) throws RevisionFailedException {
+ private void generateObligationPermissionEvents(Literal m) throws RevisionFailedException {
// computes this agent obligations in the scheme
String schId = m.getTerm(0).toString();
String grId = m.getTerm(1).toString();
@@ -255,7 +256,7 @@
Structure giAnnot = new Structure("group");
giAnnot.addTerm(gr);
- Literal obl = new Literal(type);
+ Literal obl = new LiteralImpl(type);
obl.addTerms(sch,new UnnamedVar());
obl.addAnnot(giAnnot);
@@ -367,7 +368,7 @@
}
private Literal buildLiteralToCleanBB(Atom aSchId, PredicateIndicator pred, boolean schInEnd) {
- Literal l = new Literal(pred.getFunctor());
+ Literal l = new LiteralImpl(pred.getFunctor());
if (!schInEnd) {
l.addTerm(aSchId);
}
@@ -434,7 +435,7 @@
// create the literal to be added
VarTerm S = new VarTerm("S");
- Literal gil = new Literal("goal_state");
+ Literal gil = new LiteralImpl("goal_state");
gil.addTerms(new Atom(gi.getScheme().getId()), gap, S);
gil.addAnnot(managerSource);
Modified: trunk/applications/jason-team/src/java/arch/ACProxy.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/ACProxy.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/applications/jason-team/src/java/arch/ACProxy.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -1,6 +1,7 @@
package arch;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.Structure;
import jason.environment.grid.Location;
@@ -151,7 +152,7 @@
arq.setScore(score);
// add location in perception
- Literal lpos = new Literal("pos");
+ Literal lpos = new LiteralImpl("pos");
lpos.addTerms(new NumberTermImpl(agx), new NumberTermImpl(agy), new NumberTermImpl(step));
percepts.add(lpos);
@@ -188,7 +189,7 @@
// ignore cows in the border, they complicate all :-)
if (absx < arq.getModel().getWidth()-1 && absx != 0 && absy != 00 && absy < arq.getModel().getHeight()-1) {
int cowId = Integer.parseInt(type.getAttribute("ID"));
- Literal lc = new Literal("cow");
+ Literal lc = new LiteralImpl("cow");
lc.addTerms(new NumberTermImpl( cowId ), new NumberTermImpl( absx), new NumberTermImpl(absy));
Structure stepannot = new Structure("step",1);
stepannot.addTerm(new NumberTermImpl(step));
Modified: trunk/applications/jason-team/src/java/arch/CowboyArch.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/CowboyArch.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/applications/jason-team/src/java/arch/CowboyArch.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -7,6 +7,7 @@
import jason.asSemantics.Message;
import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTerm;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.Term;
@@ -18,7 +19,6 @@
import java.util.logging.Level;
import java.util.logging.Logger;
-import jmoise.OrgAgent;
import agent.SelectEvent;
import env.ACViewer;
import env.WorldModel;
@@ -235,7 +235,7 @@
try {
logger.info("** Arch adding restart for "+getAgName());
//getTS().getC().create(); // it is terrible for pending intentions of cowboys!
- getTS().getC().addAchvGoal(new Literal("restart"), Intention.EmptyInt);
+ getTS().getC().addAchvGoal(new LiteralImpl("restart"), Intention.EmptyInt);
lo2 = new Location(-1,-1); // to not restart again in the next cycle
} catch (Exception e) {
logger.info("Error in restart!"+ e);
@@ -243,7 +243,7 @@
}
public static Literal createCellPerception(int x, int y, Term obj) {
- Literal l = new Literal("cell");
+ Literal l = new LiteralImpl("cell");
l.addTerms(new NumberTermImpl(x),
new NumberTermImpl(y),
obj);
@@ -358,7 +358,7 @@
if (acView != null) acView.getModel().setAgPos(agid, x, y);
model.incVisited(x, y);
//getTS().getAg().getLogger().info("ag pos "+getMinerId(m.getSender())+" = "+x+","+y);
- Literal tAlly = new Literal("ally_pos");
+ Literal tAlly = new LiteralImpl("ally_pos");
tAlly.addTerms(new Atom(m.getSender()), new NumberTermImpl(x), new NumberTermImpl(y));
getTS().getAg().addBel( tAlly );
} catch (Exception e) {
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/build.xml 2008-09-27 12:48:55 UTC (rev 1380)
@@ -15,7 +15,7 @@
<property name="dist.properties" value="${basedir}/bin/dist.properties" />
<property name="version" value="1" />
- <property name="release" value="1.3" />
+ <property name="release" value="2.0" />
<property name="distDir" value="${env.HOME}/tmp/x/Jason-${version}.${release}" />
<property name="distFile" value="${env.HOME}/Jason-${version}.${release}" />
Modified: trunk/demos/sync-environment/EnvSync.java
===================================================================
--- trunk/demos/sync-environment/EnvSync.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/demos/sync-environment/EnvSync.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -1,6 +1,7 @@
// Environment code for project act-sync.mas2j
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.Structure;
import jason.environment.SteppedEnvironment;
@@ -24,7 +25,7 @@
@Override
public boolean executeAction(String agName, Structure action) {
actionCount++;
- Literal p = new Literal("executed_actions");
+ Literal p = new LiteralImpl("executed_actions");
p.addTerm(new NumberTermImpl(actionCount));
clearPercepts();
addPercept(p);
Modified: trunk/examples/game-of-life/LifeEnvironment.java
===================================================================
--- trunk/examples/game-of-life/LifeEnvironment.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/examples/game-of-life/LifeEnvironment.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -1,6 +1,7 @@
// Environment code for project game-of-life.mas2j
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.Structure;
import jason.environment.grid.Location;
@@ -43,7 +44,7 @@
@Override
protected void stepStarted(int step) {
//logger.info("start step "+step);
- lstep = new Literal("step");
+ lstep = new LiteralImpl("step");
lstep.addTerm(new NumberTermImpl(step+1));
}
@@ -109,7 +110,7 @@
if (model.isAlive(l.x + 1, l.y - 1)) alive++;
if (model.isAlive(l.x + 1, l.y)) alive++;
if (model.isAlive(l.x + 1, l.y + 1)) alive++;
- Literal lAlive = new Literal("alive_neighbors");
+ Literal lAlive = new LiteralImpl("alive_neighbors");
lAlive.addTerm(new NumberTermImpl(alive));
addPercept(agName, lAlive);
Modified: trunk/examples/gold-miners-II/arch/MinerArch.java
===================================================================
--- trunk/examples/gold-miners-II/arch/MinerArch.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/examples/gold-miners-II/arch/MinerArch.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -5,6 +5,7 @@
import jason.architecture.AgArch;
import jason.asSemantics.Message;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTerm;
import jason.asSyntax.PredicateIndicator;
import jason.environment.grid.Location;
@@ -151,9 +152,9 @@
//logger.info("** Arch adding restart for "+getAgName()+", TS="+getTS().getCurrentTask()+", "+getTS().getC());
getTS().getC().create();
- getTS().getAg().getBB().abolish(new Literal("restart").getPredicateIndicator());
+ getTS().getAg().getBB().abolish(new LiteralImpl("restart").getPredicateIndicator());
getTS().getAg().getBB().abolish(new PredicateIndicator("gold",2)); // tira os ouros
- getTS().getAg().addBel(new Literal("restart"));
+ getTS().getAg().addBel(new LiteralImpl("restart"));
lo2 = new Location(-1,-1); // to not restart again in the next cycle
//getTS().stopCycle();
Modified: trunk/examples/gold-miners-II/env/MiningEnvironment.java
===================================================================
--- trunk/examples/gold-miners-II/env/MiningEnvironment.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/examples/gold-miners-II/env/MiningEnvironment.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -3,6 +3,7 @@
import jason.asSyntax.Atom;
import jason.asSyntax.DefaultTerm;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.Structure;
import jason.asSyntax.Term;
@@ -179,7 +180,7 @@
logger.warning("Error creating world "+e);
}
}
- public static Literal aCAP = new Literal("container_has_space");
+ public static Atom aCAP = new LiteralImpl("container_has_space");
public static Atom aOBSTACLE = new Atom("obstacle");
public static Atom aGOLD = new Atom("gold");
@@ -202,11 +203,11 @@
clearPercepts(agName);
// its location
Location l = model.getAgPos(ag);
- Literal p = new Literal("pos");
+ Literal p = new LiteralImpl("pos");
p.addTerms(new NumberTermImpl(l.x), new NumberTermImpl(l.y), new NumberTermImpl(getStep()));
addPercept(agName, p);
- Literal cg = new Literal("carrying_gold");
+ Literal cg = new LiteralImpl("carrying_gold");
cg.addTerm(new NumberTermImpl(model.getGoldsWithAg(ag)));
addPercept(agName, cg);
@@ -255,7 +256,7 @@
}
public static Literal createCellPerception(int x, int y, Atom obj) {
- Literal l = new Literal("cell");
+ Literal l = new LiteralImpl("cell");
l.addTerms(new NumberTermImpl(x),
new NumberTermImpl(y),
obj);
Modified: trunk/examples/sniffer/comm/SnifferCentralised.java
===================================================================
--- trunk/examples/sniffer/comm/SnifferCentralised.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/examples/sniffer/comm/SnifferCentralised.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -6,6 +6,7 @@
import jason.asSemantics.Message;
import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.StringTermImpl;
import jason.asSyntax.Structure;
@@ -39,7 +40,7 @@
// add a belief in the agent mind
// format: msgSent(time(YY,MM,DD,HH,MM,SS),id,irt,ilf,sender,receiver,content)
- Literal e = new Literal("msg_sent");
+ Literal e = new LiteralImpl("msg_sent");
Calendar now = new GregorianCalendar();
Structure p = new Structure("time");
Modified: trunk/release-notes.txt
===================================================================
--- trunk/release-notes.txt 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/release-notes.txt 2008-09-27 12:48:55 UTC (rev 1380)
@@ -1,5 +1,5 @@
-------------
-version 1.1.3
+version 1.2.0
-------------
New features
@@ -38,6 +38,18 @@
. .math.average: returns the average of a list of numbers
+API changes
+. the most significant change is in the Literal class, that
+ is abstract now. To create a new literal, the previous
+ method
+ Literal.parseLiteral(....)
+ still works, but
+ new Literal(...)
+ have to be written as
+ new LiteralImpl(....)
+ see API doc for more details.
+ see discussion about the Literal class in the
+ jason-developers list.
-------------
version 1.1.2
Modified: trunk/src/jason/JasonException.java
===================================================================
--- trunk/src/jason/JasonException.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/JasonException.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -38,7 +38,8 @@
private static final long serialVersionUID = 1L;
- public static final Term WRONG_ARGS = new Atom("wrong_arguments");
+ public static final Term WRONG_ARGS = new Atom("wrong_arguments");
+ public static final Term UNKNOW_ERROR = new Atom("unknown");
private static final Term defaultError = new Atom("internal_action");
private Term error = defaultError;
Modified: trunk/src/jason/asSemantics/ActionExec.java
===================================================================
--- trunk/src/jason/asSemantics/ActionExec.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSemantics/ActionExec.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -24,6 +24,7 @@
package jason.asSemantics;
+import jason.asSyntax.Literal;
import jason.asSyntax.Pred;
import jason.asSyntax.Structure;
@@ -37,11 +38,11 @@
private static final long serialVersionUID = 1L;
- private Structure action;
+ private Literal action;
private Intention intention;
private boolean result;
- public ActionExec(Pred ac, Intention i) {
+ public ActionExec(Literal ac, Intention i) {
action = ac;
intention = i;
result = false;
@@ -61,7 +62,10 @@
}
public Structure getActionTerm() {
- return action;
+ if (action.isAtom())
+ return new Structure(action.getFunctor());
+ else
+ return (Structure)action;
}
public Intention getIntention() {
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -31,6 +31,7 @@
import jason.asSyntax.InternalActionLiteral;
import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.LogicalFormula;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.Plan;
@@ -186,7 +187,7 @@
} else if (conf.ag.socAcc(m)) {
// generate an event
- Literal received = new Literal("kqml_received");
+ Literal received = new LiteralImpl("kqml_received");
received.addTerms(
new Atom(m.getSender()),
new Atom(m.getIlForce()),
@@ -863,10 +864,11 @@
return null;
}
+ private static final Term aNOCODE = new Atom("no_code");
private static void setDefaultFailureAnnots(Event failEvent, Term body, List<Term> failAnnots) {
// add default failure annots
if (failAnnots == null)
- failAnnots = JasonException.createBasicErrorAnnots("unknown", "");
+ failAnnots = JasonException.createBasicErrorAnnots( JasonException.UNKNOW_ERROR, "");
// add failure annots in the event related to the code source
Literal bodyterm = null;
@@ -878,9 +880,8 @@
codeline = new NumberTermImpl(bodyterm.getSrcLine());
} else {
bodyterm = new Atom("no_code");
- codesrc = new Atom("no_code");
- codeline = new Atom("no_code");
-
+ codesrc = aNOCODE;
+ codeline = aNOCODE;
}
// code
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSemantics/Unifier.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -23,6 +23,7 @@
package jason.asSemantics;
+import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
import jason.asSyntax.Pred;
import jason.asSyntax.Structure;
@@ -214,6 +215,14 @@
// both terms are not vars
+ // if the first is an Atom and the second pred, they must have the same functor
+ // and no terms in the pred
+ if (t1g.isAtom() && t2g.isPred()) {
+ Atom t1a = (Atom)t1g;
+ Pred t2p = (Pred)t2g;
+ return t2p.getArity() == 0 && t1a.getFunctor().equals(t2p.getFunctor());
+ }
+
// if any of the terms is not a structure (is a number or a
// string), they must be equal
if (!t1g.isStructure() || !t2g.isStructure())
@@ -249,7 +258,7 @@
return false;
// different functor
- if (t1s.getFunctor() != null && !t1s.getFunctor().equals(t2s.getFunctor()))
+ if (!t1s.getFunctor().equals(t2s.getFunctor())) // t1a.getFunctor() != null &&
return false;
// unify inner terms
Modified: trunk/src/jason/asSyntax/ArithExpr.java
===================================================================
--- trunk/src/jason/asSyntax/ArithExpr.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/ArithExpr.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -34,14 +34,16 @@
import org.w3c.dom.Element;
/**
- * Represents and solve arithmetic expressions like "10 + 30".
+ Represents and solve arithmetic expressions like "10 + 30".
+
+ @navassoc - op - ArithmeticOp
*/
public class ArithExpr extends ArithFunctionTerm implements NumberTerm {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(ArithExpr.class.getName());
-
- public enum ArithmeticOp {
+
+ public enum ArithmeticOp {
none {
double eval(double x, double y) {
return 0;
@@ -121,23 +123,23 @@
private ArithmeticOp op = ArithmeticOp.none;
public ArithExpr(NumberTerm t1, ArithmeticOp oper, NumberTerm t2) {
- super(oper.toString(),2);
- addTerms(t1, t2);
+ super(oper.toString(),2);
+ addTerms(t1, t2);
op = oper;
- if (t1 instanceof SourceInfo) setSrc((SourceInfo)t1);
- else if (t2 instanceof SourceInfo) setSrc((SourceInfo)t2);
+ if (t1 instanceof SourceInfo) setSrc((SourceInfo)t1);
+ else if (t2 instanceof SourceInfo) setSrc((SourceInfo)t2);
}
public ArithExpr(ArithmeticOp oper, NumberTerm t1) {
- super(oper.toString(),1);
- addTerm(t1);
+ super(oper.toString(),1);
+ addTerm(t1);
op = oper;
- setSrc(t1);
+ setSrc(t1);
}
private ArithExpr(ArithExpr ae) { // for clone
- super(ae);
- op = ae.op;
+ super(ae);
+ op = ae.op;
}
/** returns some Term that can be evaluated as Number */
@@ -170,9 +172,9 @@
}
@Override
- public boolean checkArity(int a) {
+ public boolean checkArity(int a) {
return a == 1 || a == 2;
- }
+ }
/** make a hard copy of the terms */
public NumberTerm clone() {
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/Atom.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -23,142 +23,102 @@
package jason.asSyntax;
-import jason.JasonException;
-import jason.asSemantics.Unifier;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
/**
- * Represents an atom (a structure with no arguments, e.g. "tell", "a"), it is an
- * immutable object. It extends Literal, so can be used in place of a
- * Literal, but does not allow operations on terms/annots and can not be negated.
+ * Represents an atom (a positive literal with no arguments and no annotations, e.g. "tell", "a").
*/
-public final class Atom extends Literal {
+public class Atom extends Literal {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(Atom.class.getName());
+ private final String functor; // immutable field
+
public Atom(String functor) {
- super(functor, 0);
+ if (functor == null)
+ logger.log(Level.WARNING, "A structure functor should not be null!", new Exception());
+ this.functor = functor;
}
- public Atom clone() {
- return this; // since this object is immutable
+ public Atom(Literal l) {
+ this.functor = l.getFunctor();
+ predicateIndicatorCache = l.predicateIndicatorCache;
+ hashCodeCache = l.hashCodeCache;
+ setSrc(l);
}
-
- @Override
- public boolean apply(Unifier u) {
- return false;
- }
- //
- // override structure methods
- //
-
- @Override
- public void addTerm(Term t) {
- logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!"));
+ public String getFunctor() {
+ return functor;
}
-
- @Override
- public void addTerms(List<Term> l) {
- logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!"));
+
+ public Term clone() {
+ return this; // since this object is immutable
}
@Override
- public void setTerms(List<Term> l) {
- logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!"));
- }
-
- @Override
- public void setTerm(int i, Term t) {
- logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!"));
- }
-
- @Override
- public int getArity() {
- return 0;
- }
-
- @Override
public boolean isAtom() {
return true;
}
- @Override
- public boolean isGround() {
- return true;
- }
-
- @Override
- public boolean hasTerm() {
- return false;
- }
-
- @Override
- public boolean hasVar(VarTerm t) {
- return false;
- }
-
- @Override
- public void countVars(Map<VarTerm, Integer> c) {}
-
- @Override
- protected List<Term> getDeepCopyOfTerms() {
- // this method exists to make the Structure(Structure) constructor to work with
- // an Atom as parameter
- return new ArrayList<Term>(2);
- }
-
- @Override
- public List<Term> getTerms() {
- return emptyTermList;
- }
-
- @Override
- public Term[] getTermsArray() {
- return emptyTermArray;
- }
-
- @Override
- public void setNegated(boolean b) {
- logger.log(Level.SEVERE, "You should not negate the atom "+this+"\n",new Exception());
- super.setNegated(b);
- }
-
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (o == this) return true;
- if (o instanceof Structure) {
- Structure s = (Structure)o;
- return s.isAtom() && getFunctor().equals(s.getFunctor());
+ if (o instanceof Atom) {
+ Atom a = (Atom)o;
+ //System.out.println(getFunctor() +" ==== " + a.getFunctor() + " is "+ (a.isAtom())); // && getFunctor().equals(a.getFunctor())));
+ return a.isAtom() && getFunctor().equals(a.getFunctor());
}
return false;
}
- @Override
- public boolean addAnnot(Term t) {
- logger.log(Level.SEVERE, "You should not add annot '"+t+"' in atom "+this+"\n",new Exception());
- return super.addAnnot(t);
+ public int compareTo(Term t) {
+ if (t.isNumeric()) return 1;
+
+ // this is a list and the other not
+ if (isList() && !t.isList()) return 1;
+
+ // this is not a list and the other is
+ if (!isList() && t.isList()) return -1;
+
+ // both are lists, check the size
+ if (isList() && t.isList()) {
+ ListTerm l1 = (ListTerm)this;
+ ListTerm l2 = (ListTerm)t;
+ final int l1s = l1.size();
+ final int l2s = l2.size();
+ if (l1s > l2s) return 1;
+ if (l2s > l1s) return -1;
+ return 0; // need to check elements (in Structure class)
+ }
+
+ if (t instanceof Atom) {
+ Atom tAsAtom = (Atom)t;
+ return getFunctor().compareTo(tAsAtom.getFunctor());
+ }
+
+ return super.compareTo(t);
}
@Override
- public void addAnnots(List<Term> l) {
- logger.log(Level.SEVERE, "You should not add annots '"+l+"' in atom "+this+"\n",new Exception());
- super.addAnnots(l);
+ protected int calcHashCode() {
+ return getFunctor().hashCode();
}
- @Override public void makeTermsAnnon() { }
- @Override public void makeVarsAnnon() { }
- @Override public void makeVarsAnnon(Unifier un) { }
-
@Override
- protected int calcHashCode() {
- return getFunctor().hashCode();
+ public String toString() {
+ return functor;
}
+
+ /** get as XML */
+ public Element getAsDOM(Document document) {
+ Element u = (Element) document.createElement("structure");
+ u.setAttribute("functor",getFunctor());
+ return u;
+ }
}
Modified: trunk/src/jason/asSyntax/BinaryStructure.java
===================================================================
--- trunk/src/jason/asSyntax/BinaryStructure.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/BinaryStructure.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -28,7 +28,11 @@
/**
- * Represents a binary/unary logical/relational operator.
+ Represents a binary/unary logical/relational operator.
+
+ @navassoc - left - Term
+ @navassoc - right - Term
+
*/
public abstract class BinaryStructure extends Structure {
Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java
===================================================================
--- trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -39,38 +39,41 @@
/**
- * A particular type of literal used to represent internal actions (has a "." in the functor).
+ A particular type of literal used to represent internal actions (has a "." in the functor).
+
+ @navassoc - ia - InternalAction
+
*/
-public class InternalActionLiteral extends Literal {
+public class InternalActionLiteral extends LiteralImpl {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(InternalActionLiteral.class.getName());
private InternalAction ia = null; // reference to the object that implements the internal action
- public InternalActionLiteral(String functor) {
- super(functor);
- }
+ public InternalActionLiteral(String functor) {
+ super(functor);
+ }
- // used by clone
- public InternalActionLiteral(InternalActionLiteral l) {
- super((Literal) l);
- this.ia = l.ia;
- predicateIndicatorCache = l.predicateIndicatorCache;
+ // used by clone
+ public InternalActionLiteral(InternalActionLiteral l) {
+ super((LiteralImpl) l);
+ this.ia = l.ia;
+ predicateIndicatorCache = l.predicateIndicatorCache;
hashCodeCache = l.hashCodeCache;
- }
+ }
- // used by the parser
- public InternalActionLiteral(Pred p, Agent ag) throws Exception {
+ // used by the parser
+ public InternalActionLiteral(Pred p, Agent ag) throws Exception {
super(true,p);
if (ag != null)
ia = ag.getIA(getFunctor());
}
-
+
@Override
- public boolean isInternalAction() {
- return true;
- }
+ public boolean isInternalAction() {
+ return true;
+ }
@Override
public boolean isAtom() {
@@ -79,15 +82,15 @@
@Override
public boolean canBeAddedInBB() {
- return false;
- }
+ return false;
+ }
@Override
public boolean apply(Unifier u) {
- if (this.ia != null && (this.ia instanceof loop || this.ia instanceof foreach))
- return false;
- else
- return super.apply(u);
+ if (this.ia != null && (this.ia instanceof loop || this.ia instanceof foreach))
+ return false;
+ else
+ return super.apply(u);
}
@Override
@@ -110,14 +113,14 @@
public Iterator<Unifier> logicalConsequence(Agent ag, Unifier un) {
if (ag.getTS().getUserAgArch().isRunning()) {
try {
- // clone terms array
+ // clone terms array
Term[] clone = getTermsArray();
for (int i=0; i<clone.length; i++) {
clone[i] = clone[i].clone();
clone[i].apply(un);
}
- // calls IA's execute method
+ // calls IA's execute method
Object oresult = getIA(ag).execute(ag.getTS(), un, clone);
if (oresult instanceof Boolean && (Boolean)oresult) {
return LogExpr.createUnifIterator(un);
@@ -125,7 +128,7 @@
return ((Iterator<Unifier>)oresult);
}
} catch (Exception e) {
- logger.log(Level.SEVERE, getErrorMsg() + ": " + e.getMessage(), e);
+ logger.log(Level.SEVERE, getErrorMsg() + ": " + e.getMessage(), e);
}
}
return LogExpr.EMPTY_UNIF_LIST.iterator(); // empty iterator for unifier
@@ -139,13 +142,13 @@
@Override
public String getErrorMsg() {
- String line = (getSrcLine() >= 0 ? ":"+getSrcLine() : "");
- return "Error in internal action '"+this+"' ("+ getSrc() + line + ")";
+ String line = (getSrcLine() >= 0 ? ":"+getSrcLine() : "");
+ return "Error in internal action '"+this+"' ("+ getSrc() + line + ")";
}
- public InternalActionLiteral clone() {
+ public InternalActionLiteral clone() {
return new InternalActionLiteral(this);
- }
+ }
/** get as XML */
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -48,6 +48,9 @@
* The last ListTem is an empty ListTerm (term==null).
* In lists terms with a tail ([a|X]), next is the Tail (next==X, term==a).
*
+ * @navassoc - element - Term
+ * @navassoc - next - ListTerm
+ *
* @author Jomi
*/
public class ListTermImpl extends Structure implements ListTerm {
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/Literal.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -31,18 +31,22 @@
import jason.asSyntax.parser.as2j;
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-
/**
- * A Literal is a Pred with strong negation (~).
+ This class represents an abstract literal (an Atom, Structure, Pred, and even LiteralImpl), is is mainly
+ the interface of a literal. The concrete implementation (that supports all operation) is LiteralImpl class.
+
+ Maybe, in future releases this class will be transformed to a interface, for now it is an abstract class to
+ allow Literal.parseLiteral that is used a lot by users.
+
+ @author jomi
*/
-public class Literal extends Pred implements LogicalFormula {
+public abstract class Literal extends DefaultTerm implements LogicalFormula {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(Literal.class.getName());
@@ -52,36 +56,8 @@
public static final Literal LTrue = new TrueLiteral();
public static final Literal LFalse = new FalseLiteral();
- private boolean type = LPos;
-
- /** creates a positive literal */
- public Literal(String functor) {
- super(functor);
- }
-
- /** to be used by atom */
- protected Literal(String functor, int termsSize) {
- super(functor, termsSize);
- }
-
- /** if pos == true, the literal is positive, otherwise it is negative */
- public Literal(boolean pos, String functor) {
- super(functor);
- type = pos;
- }
-
- /** if pos == true, the literal is positive, otherwise it is negative */
- public Literal(boolean pos, Pred p) {
- super(p);
- type = pos;
- }
-
- public Literal(Literal l) {
- super((Pred) l);
- type = l.type;
- }
-
-
+ protected PredicateIndicator predicateIndicatorCache = null; // to not compute it all the time (is is called many many times)
+
public static Literal parseLiteral(String sLiteral) {
try {
as2j parser = new as2j(new StringReader(sLiteral));
@@ -96,30 +72,82 @@
return new as2j(new StringReader(sLiteral)).literal();
}
+ public Literal copy() {
+ return (Literal)clone(); // should call the clone, that is overridden in subclasses
+ }
+
+ public abstract String getFunctor();
+
@Override
public boolean isLiteral() {
return true;
}
+
+ /** returns functor symbol "/" arity */
+ public PredicateIndicator getPredicateIndicator() {
+ if (predicateIndicatorCache == null) {
+ predicateIndicatorCache = new PredicateIndicator(getFunctor(),getArity());
+ }
+ return predicateIndicatorCache;
+ }
- @Override
- public boolean isAtom() {
- return super.isAtom() && !negated();
- }
+ /* default implementation of some methods */
+
+ public int getArity() { return 0; }
+ public boolean hasTerm() { return false; } // should use getArity to work for list/atom
+ public List<Term> getTerms() { return Structure.emptyTermList; }
+ public Term[] getTermsArray() { return getTerms().toArray(Structure.emptyTermArray); }
+ public List<VarTerm> getSingletonVars() { return new ArrayList<VarTerm>(); }
+
+
+ public void makeTermsAnnon() {}
+ public void makeVarsAnnon() {}
+ public void makeVarsAnnon(Unifier un) {}
+
+ public ListTerm getAnnots() { return null; }
+ public boolean hasAnnot(Term t) { return false; }
+ public boolean hasAnnot() { return false; }
+ public boolean hasSubsetAnnot(Literal p) { return true; }
+ public boolean hasSubsetAnnot(Literal p, Unifier u) { return true; }
+ public void clearAnnots() { }
+ public ListTerm getAnnots(String functor) { return new ListTermImpl(); }
+ public ListTerm getSources() { return new ListTermImpl(); }
+ public boolean hasSource() { return false; }
+ public boolean hasSource(Term agName) { return false; }
+
+ public boolean canBeAddedInBB() { return false; }
+ public boolean negated() { return false; }
+
+ public boolean equalsAsStructure(Object p) { return false; }
+
+ /* Not implemented methods */
- /** to be overridden by subclasses (as internal action) */
- public boolean canBeAddedInBB() {
- return true;
- }
-
- public boolean negated() {
- return type == LNeg;
- }
+ // structure
+ public void addTerm(Term t) { logger.log(Level.SEVERE, "addTerm is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public void delTerm(int index) { logger.log(Level.SEVERE, "delTerm is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public void addTerms(Term ... ts ) { logger.log(Level.SEVERE, "addTerms is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public void addTerms(List<Term> l) { logger.log(Level.SEVERE, "addTerms is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public Term getTerm(int i) { logger.log(Level.SEVERE, "getTerm(i) is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return null; }
+ public void setTerms(List<Term> l) { logger.log(Level.SEVERE, "setTerms is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public void setTerm(int i, Term t) { logger.log(Level.SEVERE, "setTerm is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
- public void setNegated(boolean b) {
- type = b;
- resetHashCodeCache();
- }
+ // pred
+ public void setAnnots(ListTerm l) { logger.log(Level.SEVERE, "setAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public boolean addAnnot(Term t) { logger.log(Level.SEVERE, "addAnnot is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; }
+ public void addAnnots(List<Term> l) { logger.log(Level.SEVERE, "addAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public void addAnnot(int index, Term t) { logger.log(Level.SEVERE, "addAnnot is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public void delAnnot(Term t) { logger.log(Level.SEVERE, "delAnnot is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public boolean delAnnots(List<Term> l) { logger.log(Level.SEVERE, "delAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; }
+ public boolean importAnnots(Literal p) { logger.log(Level.SEVERE, "importAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; }
+ public void addSource(Term agName) { logger.log(Level.SEVERE, "addSource is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+ public boolean delSource(Term agName) { logger.log(Level.SEVERE, "delSource is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; }
+ public void delSources() { logger.log(Level.SEVERE, "delSources is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+
+ // literal
+ public void setNegated(boolean b) { logger.log(Level.SEVERE, "setNegated is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); }
+
+
/**
* logicalConsequence checks whether one particular predicate
* is a logical consequence of the belief base.
@@ -211,68 +239,11 @@
};
}
- @Override
- public boolean equals(Object o) {
- if (o == null) return false;
- if (o == this) return true;
-
- if (o instanceof Literal) {
- final Literal l = (Literal) o;
- return type == l.type && hashCode() == l.hashCode() && super.equals(l);
- } else if (o instanceof Structure) {
- return !negated() && super.equals(o);
- }
- return false;
- }
-
- @Override
- public String getErrorMsg() {
- return "Error in '"+this+"' ("+ super.getErrorMsg() + ")";
- }
- @Override
- public int compareTo(Term t) {
- if (t.isLiteral()) {
- Literal tl = (Literal)t;
- if (!negated() && tl.negated()) {
- return -1;
- } if (negated() && !tl.negated()) {
- return 1;
- }
- }
- int c = super.compareTo(t);
- if (c != 0) return c;
- return 0;
- }
-
- public Term clone() {
- return new Literal(this);
- }
-
- public Literal copy() {
- return (Literal)clone(); // should call the clone, that is overridden in subclasses
- }
-
-
- @Override
- protected int calcHashCode() {
- int result = super.calcHashCode();
- if (negated()) result += 3271;
- return result;
- }
-
- /** returns [~] super.getPredicateIndicator */
- @Override
- public PredicateIndicator getPredicateIndicator() {
- if (predicateIndicatorCache == null)
- predicateIndicatorCache = new PredicateIndicator(((type == LPos) ? "" : "~")+getFunctor(),getArity());
- return predicateIndicatorCache;
- }
-
/** returns this literal as a list with three elements: [functor, list of terms, list of annots] */
public ListTerm getAsListOfTerms() {
ListTerm l = new ListTermImpl();
- l.add(new Literal(type, getFunctor()));
+ l.add(new LiteralImpl(!negated(), getFunctor()));
ListTerm lt = new ListTermImpl();
lt.addAll(getTerms());
l.add(lt);
@@ -296,7 +267,7 @@
pos = Literal.LNeg;
}
- Literal l = new Literal(pos,((Structure)tfunctor).getFunctor());
+ Literal l = new LiteralImpl(pos,((Atom)tfunctor).getFunctor());
if (i.hasNext()) {
l.setTerms(((ListTerm)i.next()).cloneLT());
@@ -310,27 +281,8 @@
}
}
- public String toString() {
- if (type == LPos)
- return super.toString();
- else
- return "~" + super.toString();
- }
-
- /** get as XML */
- @Override
- public Element getAsDOM(Document document) {
- Element u = (Element) document.createElement("literal");
- if (negated()) {
- u.setAttribute("negated", negated()+"");
- }
- u.appendChild(super.getAsDOM(document));
- return u;
- }
-
-
@SuppressWarnings("serial")
- static final class TrueLiteral extends Literal {
+ static final class TrueLiteral extends LiteralImpl {
public TrueLiteral() {
super("true",0);
}
@@ -347,7 +299,7 @@
}
@SuppressWarnings("serial")
- static final class FalseLiteral extends Literal {
+ static final class FalseLiteral extends LiteralImpl {
public FalseLiteral() {
super("false",0);
}
@@ -362,5 +314,4 @@
return LogExpr.EMPTY_UNIF_LIST.iterator();
}
}
-
}
Modified: trunk/src/jason/asSyntax/LogExpr.java
===================================================================
--- trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -40,7 +40,14 @@
/**
- * Represents a logical formula with some logical operator ("&", "|", "not").
+ Represents a logical formula with some logical operator ("&", "|", "not").
+
+ @navassoc - op - LogicalOp
+
+ //@view
+ //@match class jason.asSyntax.Term
+ //@opt !hide
+
*/
public class LogExpr extends BinaryStructure implements LogicalFormula {
Modified: trunk/src/jason/asSyntax/NumberTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/NumberTermImpl.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/NumberTermImpl.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -93,12 +93,14 @@
@Override
public int compareTo(Term o) {
- try {
+ if (o instanceof NumberTerm) {
NumberTerm st = (NumberTerm)o;
if (solve() > st.solve()) return 1;
if (solve() < st.solve()) return -1;
- } catch (Exception e) {}
- return 0;
+ }
+ if (o instanceof Atom)
+ return -1;
+ return super.compareTo(o);
}
public String toString() {
Modified: trunk/src/jason/asSyntax/Plan.java
===================================================================
--- trunk/src/jason/asSyntax/Plan.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/Plan.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -38,17 +38,25 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-/** Represents an AgentSpack plan */
+/** Represents an AgentSpack plan
+
+ @navassoc - label - Pred
+ @navassoc - event - Trigger
+ @navassoc - context - LogicalFormula
+ @navassoc - body - PlanBody
+
+
+ */
public class Plan extends SourceInfo implements Cloneable, Serializable {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
private static final Term TAtomic = DefaultTerm.parse("atomic");
private static final Term TBreakPoint = DefaultTerm.parse("breakpoint");
private static final Term TAllUnifs = DefaultTerm.parse("all_unifs");
private static Logger logger = Logger.getLogger(Plan.class.getName());
- private Pred label = null;
+ private Pred label = null;
private Trigger tevent = null;
private LogicalFormula context;
private PlanBody body;
@@ -244,7 +252,7 @@
Element u = (Element) document.createElement("plan");
if (label != null) {
Element l = (Element) document.createElement("label");
- l.appendChild(new Literal(Literal.LPos, label).getAsDOM(document));
+ l.appendChild(new LiteralImpl(Literal.LPos, label).getAsDOM(document));
u.appendChild(l);
}
u.appendChild(tevent.getAsDOM(document));
Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -13,7 +13,11 @@
* A plan body like <code>a1; ?t; !g</code> is represented by the following structure
* <code>(a1, (?t, (!g)))</code>.
*
- * @author Jomi
+ *
+ * @navassoc - next - PlanBody
+ * @navassoc - type - BodyType
+ *
+ * @author Jomi
*/
public class PlanBodyImpl extends Structure implements PlanBody, Iterable<PlanBody> {
Modified: trunk/src/jason/asSyntax/PlanLibrary.java
===================================================================
--- trunk/src/jason/asSyntax/PlanLibrary.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/PlanLibrary.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -41,7 +41,10 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-/** Represents a set of plans used by an agent */
+/** Represents a set of plans used by an agent
+
+ @has - plans 0..* Plan
+*/
public class PlanLibrary implements Iterable<Plan> {
/** a MAP from TE to a list of relevant plans */
@@ -72,7 +75,7 @@
*
* returns the plan added, null if it does not work.
*/
- public Plan add(StringTerm stPlan, Structure tSource) {
+ public Plan add(StringTerm stPlan, Term tSource) {
return add(stPlan, tSource, false);
}
@@ -88,7 +91,7 @@
*
* returns the plan added, null if it does not work.
*/
- public Plan add(StringTerm stPlan, Structure tSource, boolean before) {
+ public Plan add(StringTerm stPlan, Term tSource, boolean before) {
String sPlan = stPlan.getString();
try {
// remove quotes \" -> "
@@ -241,7 +244,7 @@
* Remove a plan represented by the label <i>pLabel</i>.
* In case the plan has many sources, only the plan's source is removed.
*/
- public boolean remove(Structure pLabel, Structure source) {
+ public boolean remove(Atom pLabel, Term source) {
// find the plan
Plan p = get(pLabel.getFunctor());
if (p != null) {
@@ -306,7 +309,7 @@
return l;
}
- public static final Trigger TE_IDLE = new Trigger(TEOperator.add, TEType.achieve, new Literal("idle"));
+ public static final Trigger TE_IDLE = new Trigger(TEOperator.add, TEType.achieve, new Atom("idle"));
public List<Plan> getIdlePlans() {
return relPlans.get(TE_IDLE.getPredicateIndicator());
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/Pred.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -37,7 +37,7 @@
import org.w3c.dom.Element;
/**
- * A Pred is a Structure with annotations, e.g.: a(1)[an1,an2].
+ * A Pred extends a Structure with annotations, e.g.: a(1)[an1,an2].
*/
public class Pred extends Structure {
@@ -46,25 +46,20 @@
private ListTerm annots;
- public Pred(String ps) {
- super(ps);
+ public Pred(String functor) {
+ super(functor);
}
- public Pred(Structure t) {
- super(t);
- }
+ public Pred(Literal l) {
+ super(l);
- public Pred(Pred p) {
- super(p);
-
- if (p.annots != null) {
- annots = p.getAnnots().cloneLT();
+ if (l.hasAnnot()) {
+ annots = l.getAnnots().cloneLT();
} else {
annots = null;
}
}
- /** to be used by atom */
public Pred(String functor, int termsSize) {
super(functor, termsSize);
}
@@ -108,11 +103,13 @@
return r;
}
+ @Override
public void setAnnots(ListTerm l) {
annots = l;
if (annots != null && annots.isEmpty()) annots = null;
}
+ @Override
public boolean addAnnot(Term t) {
if (annots == null) annots = new ListTermImpl();
if (!annots.contains(t)) {
@@ -122,6 +119,7 @@
return false;
}
+ @Override
public void addAnnots(List<Term> l) {
if (l == null || l.isEmpty()) return;
ListTerm tail;
@@ -137,29 +135,35 @@
}
}
+ @Override
public void addAnnot(int index, Term t) {
if (annots == null) annots = new ListTermImpl();
if (!annots.contains(t)) annots.add(index, t);
}
+ @Override
public void delAnnot(Term t) {
if (annots != null) annots.remove(t);
}
+ @Override
public void clearAnnots() {
annots = null;
}
+ @Override
public ListTerm getAnnots() {
return annots;
}
+ @Override
public boolean hasAnnot(Term t) {
if (annots == null) return false;
return annots.contains(t);
}
/** returns true if the pred has at least one annot */
+ @Override
public boolean hasAnnot() {
return annots != null && !annots.isEmpty();
}
@@ -193,7 +197,8 @@
*
* @return true if some annot was imported.
*/
- public boolean importAnnots(Pred p) {
+ @Override
+ public boolean importAnnots(Literal p) {
boolean imported = false;
if (p.hasAnnot()) {
if (annots == null) annots = new ListTermImpl();
@@ -216,13 +221,14 @@
}
/**
- * removes all annots in this pred that are in <i>p</i>.
+ * removes all annots in this pred that are in the list <i>l</i>.
* @return true if some annot was removed.
*/
- public boolean delAnnot(Pred p) {
+ @Override
+ public boolean delAnnots(List<Term> l) {
boolean removed = false;
- if (p.hasAnnot() && this.hasAnnot()) {
- for (Term t: p.getAnnots()) {
+ if (l != null && this.hasAnnot()) {
+ for (Term t: l) {
boolean r = annots.remove(t);
removed = removed || r;
}
@@ -236,6 +242,7 @@
* and functor "t",
* it returns [t(a),t(b)]
*/
+ @Override
public ListTerm getAnnots(String functor) {
ListTerm ls = new ListTermImpl();
if (annots != null) {
@@ -252,9 +259,10 @@
}
/** returns true if all this predicate annots are in p's annots */
- public boolean hasSubsetAnnot(Pred p) {
+ @Override
+ public boolean hasSubsetAnnot(Literal p) {
if (annots == null) return true;
- if (annots != null && p.getAnnots() == null) return false;
+ if (hasAnnot() && !p.hasAnnot()) return false;
for (Term myAnnot : annots) {
if (!p.hasAnnot(myAnnot)) {
return false;
@@ -277,11 +285,12 @@
* this[b|T] = p[x,y,b]
* unifies and T is [x,y] (this will be a subset if T is [x,y].
*/
- public boolean hasSubsetAnnot(Pred p, Unifier u) {
+ @Override
+ public boolean hasSubsetAnnot(Literal p, Unifier u) {
//return getSubsetAnnots(p,u,null);
if (annots == null) return true;
- if (p.getAnnots() == null) return false;
+ if (!p.hasAnnot()) return false;
// since p's annots will be changed, clone them
ListTerm pannots = p.getAnnots().cloneLT();
@@ -328,12 +337,14 @@
/**
* Adds a source annotation like "source(<i>agName</i>)".
*/
+ @Override
public void addSource(Term agName) {
if (agName != null)
addAnnot(createSource(agName));
}
/** deletes "source(<i>agName</i>)" */
+ @Override
public boolean delSource(Term agName) {
if (annots != null)
return annots.remove(createSource(agName));
@@ -351,6 +362,7 @@
* returns the sources of this Pred as a new list. e.g.: from annots
* [source(a), source(b)], it returns [a,b]
*/
+ @Override
public ListTerm getSources() {
ListTerm ls = new ListTermImpl();
if (annots != null) {
@@ -368,6 +380,7 @@
}
/** deletes all sources annotations */
+ @Override
public void delSources() {
if (annots != null) {
Iterator<Term> i = annots.iterator();
@@ -382,6 +395,7 @@
}
}
+ @Override
public boolean hasSource() {
if (annots != null) {
for (Term ta : annots) {
@@ -396,6 +410,7 @@
}
/** returns true if this pred has a "source(<i>agName</i>)" */
+ @Override
public boolean hasSource(Term agName) {
if (annots != null) {
return annots.contains(createSource(agName));
@@ -443,7 +458,7 @@
if (o instanceof Pred) {
final Pred p = (Pred) o;
return super.equals(o) && this.hasSubsetAnnot(p) && p.hasSubsetAnnot(this);
- } else if (o instanceof Structure) {
+ } else if (o instanceof Atom) {
return !hasAnnot() && super.equals(o);
}
return false;
Modified: trunk/src/jason/asSyntax/RelExpr.java
===================================================================
--- trunk/src/jason/asSyntax/RelExpr.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/RelExpr.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -52,6 +52,8 @@
* X is [~p, [t1, t2], [a1,a2]]
* </ul>
*
+ * @navassoc - op - RelationalOp
+ *
* @author Jomi
*/
public class RelExpr extends BinaryStructure implements LogicalFormula {
Modified: trunk/src/jason/asSyntax/Rule.java
===================================================================
--- trunk/src/jason/asSyntax/Rule.java 2008-09-27 08:16:20 UTC (rev 1379)
+++ trunk/src/jason/asSyntax/Rule.java 2008-09-27 12:48:55 UTC (rev 1380)
@@ -31,14 +31,16 @@
import org.w3c.dom.Element;
/**
- * A rule is a Literal (head) with an optional body, as in "a :- b & c".
+ A rule is a Literal (head) with an optional body, as in "a :- b & c".
+
+ @navassoc - body - LogicalFormula
*/
-public class Rule extends Literal {
+public class Rule extends LiteralImpl {...
[truncated message content] |