|
From: <jom...@us...> - 2009-03-09 15:03:13
|
Revision: 1458
http://jason.svn.sourceforge.net/jason/?rev=1458&view=rev
Author: jomifred
Date: 2009-03-09 15:03:05 +0000 (Mon, 09 Mar 2009)
Log Message:
-----------
extends plan body term (enclosed by { }) to support also plans.
add_plan uses this new syntax to avoid using strings to represent the new plan
.add_plan({ +te : c <- a1; !g2 }); ....
Modified Paths:
--------------
trunk/applications/jasdl-owlapi/src/jasdl/asSyntax/SEPlan.java
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/Plan.java
trunk/src/jason/asSyntax/PlanBodyImpl.java
trunk/src/jason/asSyntax/PlanLibrary.java
trunk/src/jason/asSyntax/Trigger.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/stdlib/add_plan.java
trunk/src/test/ASParserTest.java
trunk/src/test/StdLibTest.java
trunk/src/test/TSTest.java
trunk/src/test/TermTest.java
Added Paths:
-----------
trunk/src/jason/stdlib/list_plans.java
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSyntax/SEPlan.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSyntax/SEPlan.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSyntax/SEPlan.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -26,8 +26,8 @@
import jason.asSyntax.Literal;
import jason.asSyntax.LiteralImpl;
import jason.asSyntax.Plan;
-import jason.asSyntax.PlanBody;
import jason.asSyntax.Structure;
+import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
/**
@@ -98,7 +98,7 @@
}
@Override
- public Object clone() {
+ public Term clone() {
return new SEPlan(agent, (Plan) super.clone());
}
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSemantics/Unifier.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -76,16 +76,6 @@
return vl;
}
- /*
- public Term get(Term t) {
- if (t.isVar()) {
- return function.get( deref((VarTerm) t));
- } else {
- return null;
- }
- }
- */
-
public boolean unifies(Trigger te1, Trigger te2) {
return te1.sameType(te2) && unifies(te1.getLiteral(), te2.getLiteral());
}
Modified: trunk/src/jason/asSyntax/Plan.java
===================================================================
--- trunk/src/jason/asSyntax/Plan.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSyntax/Plan.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -28,10 +28,6 @@
import java.io.Serializable;
import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -39,7 +35,8 @@
import org.w3c.dom.Element;
/** Represents an AgentSpack plan
-
+ (it extends structure to be used as a term)
+
@navassoc - label - Pred
@navassoc - event - Trigger
@navassoc - context - LogicalFormula
@@ -47,7 +44,7 @@
@navassoc - source - SourceInfo
*/
-public class Plan implements Cloneable, Serializable {
+public class Plan extends Structure implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;
private static final Term TAtomic = ASSyntax.createAtom("atomic");
@@ -61,18 +58,18 @@
private LogicalFormula context;
private PlanBody body;
- protected SourceInfo srcInfo = null;
-
- private boolean isAtomic = false;
- private boolean isAllUnifs = false;
+ private boolean isAtomic = false;
+ private boolean isAllUnifs = false;
private boolean hasBreakpoint = false;
// used by clone
public Plan() {
+ super("plan", 0);
}
// used by parser
public Plan(Pred label, Trigger te, LogicalFormula ct, PlanBody bd) {
+ super("plan", 0);
tevent = te;
setLabel(label);
setContext(ct);
@@ -82,6 +79,24 @@
body = bd;
}
+ @Override
+ public int getArity() {
+ return 4;
+ }
+
+ private static final Term noLabelAtom = new Atom("nolabel");
+
+ @Override
+ public Term getTerm(int i) {
+ switch (i) {
+ case 0: return (label == null) ? noLabelAtom : label;
+ case 1: return tevent;
+ case 2: return (context == null) ? Literal.LTrue : context;
+ case 3: return body;
+ default: return null;
+ }
+ }
+
public void setLabel(Pred p) {
label = p;
if (p != null && p.hasAnnot()) {
@@ -172,32 +187,8 @@
}
return false;
}
-
- public List<VarTerm> getSingletonVars() {
- Map<VarTerm, Integer> all = new HashMap<VarTerm, Integer>();
- tevent.getLiteral().countVars(all);
- if (context != null)
- context.countVars(all);
- body.countVars(all);
-
- List<VarTerm> r = new ArrayList<VarTerm>();
- for (VarTerm k: all.keySet()) {
- if (all.get(k) == 1 && !k.isUnnamedVar())
- r.add(k);
- }
- return r;
- }
-
- @Override
- public int hashCode() {
- int code = 37;
- if (context != null) code += context.hashCode();
- if (tevent != null) code += tevent.hashCode();
- code += body.hashCode();
- return code;
- }
-
- public Object clone() {
+
+ public Term clone() {
Plan p = new Plan();
if (label != null) {
p.label = (Pred) label.clone();
@@ -237,15 +228,6 @@
return p;
}
-
- public SourceInfo getSrcInfo() {
- return srcInfo;
- }
-
- public void setSrcInfo(SourceInfo s) {
- srcInfo = s;
- }
-
public String toString() {
return toASString();
}
Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBodyImpl.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -45,9 +45,10 @@
formType = t;
if (b != null) {
srcInfo = b.getSrcInfo();
- if (b.isAtom()) {
- b = ((Atom)b).forceFullLiteralImpl();
- }
+ // the atom issue is solved in TS
+ //if (b.isAtom()) {
+ // b = ((Atom)b).forceFullLiteralImpl();
+ //}
}
term = b;
}
Modified: trunk/src/jason/asSyntax/PlanLibrary.java
===================================================================
--- trunk/src/jason/asSyntax/PlanLibrary.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSyntax/PlanLibrary.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -67,12 +67,13 @@
/**
* Add a new plan written as a String. The source
* normally is "self" or the agent that sent this plan.
- * If the already has a plan equals to "stPlan", only a
+ * If the PL already has a plan equals to "stPlan", only a
* new source is added.
*
* The plan is added in the end of the PlanLibrary.
*
* @returns the plan just added
+ * @deprecated parse the plan before (ASSyntax methods) and call add(Plan, ...) methods
*/
public Plan add(StringTerm stPlan, Term tSource) throws ParseException, JasonException {
return add(stPlan, tSource, false);
@@ -81,7 +82,7 @@
/**
* Add a new plan written as a String. The source
* normally is "self" or the agent that sent this plan.
- * If the already has a plan equals to "stPlan", only a
+ * If the PL already has a plan equals to "stPlan", only a
* new source is added.
*
* If <i>before</i> is true, the plan will be added in the
@@ -89,6 +90,7 @@
* the end.
*
* @returns the plan just added
+ * @deprecated parse the plan before (ASSyntax methods) and call add(Plan, ...) methods
*/
public Plan add(StringTerm stPlan, Term tSource, boolean before) throws ParseException, JasonException {
String sPlan = stPlan.getString();
@@ -100,23 +102,38 @@
}
}
sPlan = sTemp.toString();
- Plan p = ASSyntax.parsePlan(sPlan); //Plan.parse(sPlan);
+ Plan p = ASSyntax.parsePlan(sPlan);
+ return add(p,tSource,before);
+ }
+
+
+ /**
+ * Add a new plan in PL. The source
+ * normally is "self" or the agent that sent this plan.
+ * If the PL already has a plan equals to the parameter p, only a
+ * new source is added.
+ *
+ * If <i>before</i> is true, the plan will be added in the
+ * begin of the PlanLibrary; otherwise, it is added in
+ * the end.
+ *
+ * @returns the plan just added
+ */
+ public Plan add(Plan p, Term source, boolean before) throws JasonException {
int i = plans.indexOf(p);
if (i < 0) {
// add label, if necessary
- if (p.getLabel() == null) {
+ if (p.getLabel() == null)
p.setLabel(getUniqueLabel());
- }
- p.getLabel().addSource(tSource);
+ p.getLabel().addSource(source);
add(p, before);
} else {
p = plans.get(i);
- p.getLabel().addSource(tSource);
+ p.getLabel().addSource(source);
}
return p;
}
-
public void add(Plan p) throws JasonException {
add(p,false);
}
@@ -147,7 +164,8 @@
p.setLabel(getUniqueLabel());
// add self source
- if (!p.getLabel().hasSource()) p.getLabel().addAnnot(BeliefBase.TSelf);
+ if (!p.getLabel().hasSource())
+ p.getLabel().addAnnot(BeliefBase.TSelf);
planLabels.put(p.getLabel().getFunctor(), p);
Modified: trunk/src/jason/asSyntax/Trigger.java
===================================================================
--- trunk/src/jason/asSyntax/Trigger.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSyntax/Trigger.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -35,19 +35,21 @@
import org.w3c.dom.Element;
/**
- * Represents an AgentSpeak trigger (like +!g, +p, ...).
- *
- * It is composed by:
- * an operator (+ or -);
- * a type (<empty>, !, or ?);
- * a literal
- *
- * @opt attributes
- * @navassoc - literal - Literal
- * @navassoc - operator - TEOperator
- * @navassoc - type - TEType
- */
-public class Trigger implements Cloneable {
+ Represents an AgentSpeak trigger (like +!g, +p, ...).
+
+ It is composed by:
+ an operator (+ or -);
+ a type (<empty>, !, or ?);
+ a literal
+
+ (it extends structure to be used as a term)
+
+ @opt attributes
+ @navassoc - literal - Literal
+ @navassoc - operator - TEOperator
+ @navassoc - type - TEType
+*/
+public class Trigger extends Structure implements Cloneable {
private static Logger logger = Logger.getLogger(Trigger.class.getName());
@@ -62,16 +64,17 @@
test { public String toString() { return "?"; } }
};
+
private TEOperator operator = TEOperator.add;
private TEType type = TEType.belief;
private Literal literal;
- private PredicateIndicator piCache = null;
-
public Trigger(TEOperator op, TEType t, Literal l) {
+ super("te", 0);
literal = l;
type = t;
setTrigOp(op);
+ setSrcInfo(l.getSrcInfo());
}
/** prefer to use ASSyntax.parseTrigger */
@@ -85,9 +88,45 @@
}
}
+ // override some structure methods
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ private static final Term ab = new StringTermImpl("+");
+ private static final Term rb = new StringTermImpl("-");
+ private static final Term ag = new StringTermImpl("+!");
+ private static final Term rg = new StringTermImpl("-!");
+ private static final Term at = new StringTermImpl("+?");
+ private static final Term rt = new StringTermImpl("-?");
+
+ @Override
+ public Term getTerm(int i) {
+ switch (1) {
+ case 0:
+ switch (operator) {
+ case add:
+ switch (type) {
+ case belief: return ab;
+ case achieve: return ag;
+ case test: return at;
+ }
+ case del:
+ switch (type) {
+ case belief: return rb;
+ case achieve: return rg;
+ case test: return rt;
+ }
+ }
+ case 1: return literal;
+ default: return null;
+ }
+ }
+
public void setTrigOp(TEOperator op) {
operator = op;
- piCache = null;
+ predicateIndicatorCache = null;
}
public boolean sameType(Trigger e) {
@@ -103,11 +142,6 @@
return false;
}
- @Override
- public int hashCode() {
- return getPredicateIndicator().hashCode();
- }
-
public boolean isAchvGoal() {
return type == TEType.achieve;
}
@@ -121,21 +155,22 @@
}
public boolean isAddition() {
- return (operator == TEOperator.add);
+ return operator == TEOperator.add;
}
public Trigger clone() {
Trigger c = new Trigger(operator, type, literal.copy());
- c.piCache = this.piCache;
+ c.predicateIndicatorCache = this.predicateIndicatorCache;
return c;
}
/** return [+|-][!|?] super.getPredicateIndicator */
+ @Override
public PredicateIndicator getPredicateIndicator() {
- if (piCache == null) {
- piCache = new PredicateIndicator(operator.toString() + type + literal.getFunctor(), literal.getArity());
+ if (predicateIndicatorCache == null) {
+ predicateIndicatorCache = new PredicateIndicator(operator.toString() + type + literal.getFunctor(), literal.getArity());
}
- return piCache;
+ return predicateIndicatorCache;
}
public boolean apply(Unifier u) {
@@ -146,8 +181,9 @@
return literal;
}
- public void setLiteral(Literal literal) {
+ public void setLiteral(Literal literal) {
this.literal = literal;
+ predicateIndicatorCache = null;
}
public String toString() {
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-09 15:03:05 UTC (rev 1458)
@@ -357,14 +357,50 @@
}
}
-PlanBody plan_body_term(): { PlanBody B = null; }
+
+Term plan_term(): { Trigger T = null; Object C = null; PlanBody B = null, B1 = null; Plan P = null; boolean pb = true; Pred L = null; }
+ // pb = "only plan body"
{
"{"
- B = plan_body()
+ [ [<TK_LABEL_AT> L=pred() { pb = false; } ]
+ T = trigger() { if (T.getType() != TEType.belief) pb = false; }
+ [ ":" C = log_expr() { pb = false; } ]
+ [( "<-" { pb = false; }
+ | ";" { if (!pb) throw new ParseException(getSourceRef(T)+" Wrong place for ';'"); }
+ )
+ ]
+ ]
+ [ B = plan_body() ]
"}"
- { B.setAsBodyTerm(true);
- return B;
- }
+ {
+ if (T != null) {
+ // handle the case of "+a1", parsed as TE, need to be changed to plan's body
+ // handle the case of "+a1; +a2", parsed as "TE; Body"
+ if (pb) {
+ if (T.isAddition())
+ B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral());
+ else
+ B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral());
+ B1.setAsBodyTerm(true);
+ if (B != null)
+ B1.setBodyNext(B);
+ return B1;
+ }
+ if (C == null && B == null) {
+ // handle the case of a single trigger
+ return T;
+ } else {
+ // handle the case of a entire plan
+ Plan p = new Plan(L,T,(LogicalFormula)C, B);
+ p.setSrcInfo(T.getSrcInfo());
+ return p;
+ }
+ }
+
+ // the case of a simple plan body term
+ B.setAsBodyTerm(true);
+ return B;
+ }
}
@@ -438,7 +474,7 @@
}
/* Annotated Formulae */
-Pred pred() : { Token K; Pred p; List l; ListTerm lt; PlanBody b; }
+Pred pred() : { Token K; Pred p; List l; ListTerm lt; Term b; }
{
(
K=<ATOM>
@@ -454,7 +490,7 @@
"(" l = terms()
")" { p.setTerms(l); }
]
- ( b=plan_body_term() { p.addTerm(b); }
+ ( b=plan_term() { p.addTerm(b); }
)*
[
lt = list() { p.setAnnots(lt); }
@@ -478,7 +514,7 @@
Term term() : { Object o; }
{
( o=list()
- | o=plan_body_term()
+ | o=plan_term()
| o=log_expr() // log_expr includes literals/atoms/structures
)
{ return changeToAtom(o); }
@@ -506,7 +542,8 @@
{
( o=list()
| o=arithm_expr()
- | o=string()
+ | o=string()
+ | o=plan_term()
)
{ return changeToAtom(o); }
}
@@ -570,7 +607,7 @@
( op2 = arithm_expr()
| op2 = string()
| op2 = list()
- | op2 = plan_body_term()
+ | op2 = plan_term()
)
{ if ( ((Term)op1).isInternalAction() && operator != RelationalOp.literalBuilder)
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -457,11 +457,112 @@
throw new Error("Missing return statement in function");
}
- final public PlanBody plan_body_term() throws ParseException {
- PlanBody B = null;
+ final public Term plan_term() throws ParseException {
+ Trigger T = null; Object C = null; PlanBody B = null, B1 = null; Plan P = null; boolean pb = true; Pred L = null;
jj_consume_token(27);
- B = plan_body();
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case TK_LABEL_AT:
+ case 34:
+ case 35:
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case TK_LABEL_AT:
+ jj_consume_token(TK_LABEL_AT);
+ L = pred();
+ pb = false;
+ break;
+ default:
+ jj_la1[18] = jj_gen;
+ ;
+ }
+ T = trigger();
+ if (T.getType() != TEType.belief) pb = false;
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case 32:
+ jj_consume_token(32);
+ C = log_expr();
+ pb = false;
+ break;
+ default:
+ jj_la1[19] = jj_gen;
+ ;
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case 33:
+ case 37:
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case 33:
+ jj_consume_token(33);
+ pb = false;
+ break;
+ case 37:
+ jj_consume_token(37);
+ if (!pb) {if (true) throw new ParseException(getSourceRef(T)+" Wrong place for ';'");}
+ break;
+ default:
+ jj_la1[20] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ break;
+ default:
+ jj_la1[21] = jj_gen;
+ ;
+ }
+ break;
+ default:
+ jj_la1[22] = jj_gen;
+ ;
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case VAR:
+ case TK_TRUE:
+ case TK_FALSE:
+ case TK_NOT:
+ case TK_NEG:
+ case TK_BEGIN:
+ case TK_END:
+ case NUMBER:
+ case STRING:
+ case ATOM:
+ case UNNAMEDVAR:
+ case 31:
+ case 34:
+ case 35:
+ case 36:
+ case 38:
+ case 39:
+ B = plan_body();
+ break;
+ default:
+ jj_la1[23] = jj_gen;
+ ;
+ }
jj_consume_token(28);
+ if (T != null) {
+ // handle the case of "+a1", parsed as TE, need to be changed to plan's body
+ // handle the case of "+a1; +a2", parsed as "TE; Body"
+ if (pb) {
+ if (T.isAddition())
+ B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral());
+ else
+ B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral());
+ B1.setAsBodyTerm(true);
+ if (B != null)
+ B1.setBodyNext(B);
+ {if (true) return B1;}
+ }
+ if (C == null && B == null) {
+ // handle the case of a single trigger
+ {if (true) return T;}
+ } else {
+ // handle the case of a entire plan
+ Plan p = new Plan(L,T,(LogicalFormula)C, B);
+ p.setSrcInfo(T.getSrcInfo());
+ {if (true) return p;}
+ }
+ }
+
+ // the case of a simple plan body term
B.setAsBodyTerm(true);
{if (true) return B;}
throw new Error("Missing return statement in function");
@@ -501,18 +602,18 @@
formType = BodyType.delAddBel;
break;
default:
- jj_la1[18] = jj_gen;
+ jj_la1[24] = jj_gen;
;
}
break;
default:
- jj_la1[19] = jj_gen;
+ jj_la1[25] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[20] = jj_gen;
+ jj_la1[26] = jj_gen;
;
}
B = log_expr();
@@ -549,7 +650,7 @@
type = Literal.LNeg;
break;
default:
- jj_la1[21] = jj_gen;
+ jj_la1[27] = jj_gen;
;
}
F = pred();
@@ -584,7 +685,7 @@
{if (true) return Literal.LFalse;}
break;
default:
- jj_la1[22] = jj_gen;
+ jj_la1[28] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -593,7 +694,7 @@
/* Annotated Formulae */
final public Pred pred() throws ParseException {
- Token K; Pred p; List l; ListTerm lt; PlanBody b;
+ Token K; Pred p; List l; ListTerm lt; Term b;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ATOM:
K = jj_consume_token(ATOM);
@@ -605,7 +706,7 @@
K = jj_consume_token(TK_END);
break;
default:
- jj_la1[23] = jj_gen;
+ jj_la1[29] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -619,7 +720,7 @@
p.setTerms(l);
break;
default:
- jj_la1[24] = jj_gen;
+ jj_la1[30] = jj_gen;
;
}
label_9:
@@ -629,10 +730,10 @@
;
break;
default:
- jj_la1[25] = jj_gen;
+ jj_la1[31] = jj_gen;
break label_9;
}
- b = plan_body_term();
+ b = plan_term();
p.addTerm(b);
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -641,7 +742,7 @@
p.setAnnots(lt);
break;
default:
- jj_la1[26] = jj_gen;
+ jj_la1[32] = jj_gen;
;
}
{if (true) return p;}
@@ -660,7 +761,7 @@
;
break;
default:
- jj_la1[27] = jj_gen;
+ jj_la1[33] = jj_gen;
break label_10;
}
jj_consume_token(41);
@@ -679,7 +780,7 @@
o = list();
break;
case 27:
- o = plan_body_term();
+ o = plan_term();
break;
case VAR:
case TK_TRUE:
@@ -697,7 +798,7 @@
o = log_expr();
break;
default:
- jj_la1[28] = jj_gen;
+ jj_la1[34] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -719,6 +820,7 @@
case STRING:
case ATOM:
case UNNAMEDVAR:
+ case 27:
case 35:
case 39:
case 42:
@@ -731,7 +833,7 @@
;
break;
default:
- jj_la1[29] = jj_gen;
+ jj_la1[35] = jj_gen;
break label_11;
}
jj_consume_token(41);
@@ -755,18 +857,18 @@
last = last.concat((ListTerm)f);
break;
default:
- jj_la1[30] = jj_gen;
+ jj_la1[36] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[31] = jj_gen;
+ jj_la1[37] = jj_gen;
;
}
break;
default:
- jj_la1[32] = jj_gen;
+ jj_la1[38] = jj_gen;
;
}
jj_consume_token(44);
@@ -797,8 +899,11 @@
case STRING:
o = string();
break;
+ case 27:
+ o = plan_term();
+ break;
default:
- jj_la1[33] = jj_gen;
+ jj_la1[39] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -817,7 +922,7 @@
{if (true) return new LogExpr((LogicalFormula)t1,LogicalOp.or,(LogicalFormula)t2);}
break;
default:
- jj_la1[34] = jj_gen;
+ jj_la1[40] = jj_gen;
;
}
{if (true) return t1;}
@@ -834,7 +939,7 @@
{if (true) return new LogExpr((LogicalFormula)t1,LogicalOp.and,(LogicalFormula)t2);}
break;
default:
- jj_la1[35] = jj_gen;
+ jj_la1[41] = jj_gen;
;
}
{if (true) return t1;}
@@ -865,7 +970,7 @@
{if (true) return t;}
break;
default:
- jj_la1[36] = jj_gen;
+ jj_la1[42] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -901,7 +1006,7 @@
op1 = string();
break;
default:
- jj_la1[37] = jj_gen;
+ jj_la1[43] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -948,7 +1053,7 @@
operator = RelationalOp.literalBuilder;
break;
default:
- jj_la1[38] = jj_gen;
+ jj_la1[44] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -973,10 +1078,10 @@
op2 = list();
break;
case 27:
- op2 = plan_body_term();
+ op2 = plan_term();
break;
default:
- jj_la1[39] = jj_gen;
+ jj_la1[45] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -987,7 +1092,7 @@
{if (true) return new RelExpr((Term)op1, operator, (Term)op2);}
break;
default:
- jj_la1[40] = jj_gen;
+ jj_la1[46] = jj_gen;
;
}
{if (true) return op1;}
@@ -1012,7 +1117,7 @@
op = ArithmeticOp.minus;
break;
default:
- jj_la1[41] = jj_gen;
+ jj_la1[47] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1026,7 +1131,7 @@
{if (true) return new ArithExpr((NumberTerm)t1, op, (NumberTerm)t2);}
break;
default:
- jj_la1[42] = jj_gen;
+ jj_la1[48] = jj_gen;
;
}
{if (true) return t1;}
@@ -1060,7 +1165,7 @@
op = ArithmeticOp.mod;
break;
default:
- jj_la1[43] = jj_gen;
+ jj_la1[49] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1074,7 +1179,7 @@
{if (true) return new ArithExpr((NumberTerm)t1, op, (NumberTerm)t2);}
break;
default:
- jj_la1[44] = jj_gen;
+ jj_la1[50] = jj_gen;
;
}
{if (true) return t1;}
@@ -1099,7 +1204,7 @@
{if (true) return new ArithExpr((NumberTerm)t1, op, (NumberTerm)t2);}
break;
default:
- jj_la1[45] = jj_gen;
+ jj_la1[51] = jj_gen;
;
}
{if (true) return t1;}
@@ -1144,7 +1249,7 @@
{if (true) return t;}
break;
default:
- jj_la1[46] = jj_gen;
+ jj_la1[52] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1179,7 +1284,7 @@
v = new UnnamedVar(K.image);
break;
default:
- jj_la1[47] = jj_gen;
+ jj_la1[53] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1189,7 +1294,7 @@
v.setAnnots(lt);
break;
default:
- jj_la1[48] = jj_gen;
+ jj_la1[54] = jj_gen;
;
}
{if (true) return v;}
@@ -1212,16 +1317,6 @@
finally { jj_save(0, xla); }
}
- final private boolean jj_3R_17() {
- if (jj_scan_token(42)) return true;
- return false;
- }
-
- final private boolean jj_3R_13() {
- if (jj_scan_token(39)) return true;
- return false;
- }
-
final private boolean jj_3R_12() {
Token xsp;
xsp = jj_scanpos;
@@ -1243,6 +1338,11 @@
return false;
}
+ final private boolean jj_3R_15() {
+ if (jj_3R_17()) return true;
+ return false;
+ }
+
final private boolean jj_3_1() {
if (jj_scan_token(27)) return true;
if (jj_scan_token(TK_BEGIN)) return true;
@@ -1251,11 +1351,6 @@
return false;
}
- final private boolean jj_3R_15() {
- if (jj_3R_17()) return true;
- return false;
- }
-
final private boolean jj_3R_16() {
if (jj_scan_token(27)) return true;
return false;
@@ -1266,6 +1361,16 @@
return false;
}
+ final private boolean jj_3R_17() {
+ if (jj_scan_token(42)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_13() {
+ if (jj_scan_token(39)) return true;
+ return false;
+ }
+
public as2jTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
@@ -1275,7 +1380,7 @@
public boolean lookingAhead = false;
private boolean jj_semLA;
private int jj_gen;
- final private int[] jj_la1 = new int[49];
+ final private int[] jj_la1 = new int[55];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static {
@@ -1283,10 +1388,10 @@
jj_la1_1();
}
private static void jj_la1_0() {
- jj_la1_0 = new int[] {0x8000000,0x10cb00,0x8000000,0x80000000,0x8000000,0x10000,0x10cb00,0x8000000,0x8000000,0x20000000,0x10000,0x0,0x0,0x0,0x80000000,0x80000000,0x30cb80,0x0,0x0,0x80000000,0x80000000,0x800,0x10cb00,0x10c000,0x0,0x8000000,0x0,0x0,0x83acf80,0x0,0x200080,0x0,0x3acb80,0x3acb80,0x0,0x0,0x3acf80,0x3acb80,0x0,0x83acb80,0x0,0x0,0x0,0x3000,0x3000,0x0,0x32cb80,0x200080,0x0,};
+ jj_la1_0 = new int[] {0x8000000,0x10cb00,0x8000000,0x80000000,0x8000000,0x10000,0x10cb00,0x8000000,0x8000000,0x20000000,0x10000,0x0,0x0,0x0,0x80000000,0x80000000,0x30cb80,0x0,0x10000,0x0,0x0,0x0,0x10000,0x803acf80,0x0,0x80000000,0x80000000,0x800,0x10cb00,0x10c000,0x0,0x8000000,0x0,0x0,0x83acf80,0x0,0x200080,0x0,0x83acb80,0x83acb80,0x0,0x0,0x3acf80,0x3acb80,0x0,0x83acb80,0x0,0x0,0x0,0x3000,0x3000,0x0,0x32cb80,0x200080,0x0,};
}
private static void jj_la1_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x10,0x10,0x0,0x20,0x4,0x5c,0x5c,0x0,0x0,0x0,0x80,0x0,0x400,0x200,0x488,0x200,0x400,0x800,0x488,0x488,0x800,0x2000,0x88,0x88,0x3fc000,0x488,0x3fc000,0xc,0xc,0xc00000,0xc00000,0x1000000,0x88,0x0,0x400,};
+ jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x10,0x10,0x0,0x20,0x0,0x1,0x22,0x22,0xc,0xdc,0x4,0x5c,0x5c,0x0,0x0,0x0,0x80,0x0,0x400,0x200,0x488,0x200,0x400,0x800,0x488,0x488,0x800,0x2000,0x88,0x88,0x3fc000,0x488,0x3fc000,0xc,0xc,0xc00000,0xc00000,0x1000000,0x88,0x0,0x400,};
}
final private JJCalls[] jj_2_rtns = new JJCalls[1];
private boolean jj_rescan = false;
@@ -1301,7 +1406,7 @@
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 49; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 55; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1314,7 +1419,7 @@
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 49; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 55; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1324,7 +1429,7 @@
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 49; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 55; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1334,7 +1439,7 @@
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 49; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 55; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1343,7 +1448,7 @@
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 49; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 55; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1352,7 +1457,7 @@
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 49; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 55; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1471,7 +1576,7 @@
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 49; i++) {
+ for (int i = 0; i < 55; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1<<j)) != 0) {
Modified: trunk/src/jason/stdlib/add_plan.java
===================================================================
--- trunk/src/jason/stdlib/add_plan.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/jason/stdlib/add_plan.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -23,13 +23,16 @@
package jason.stdlib;
+import jason.JasonException;
import jason.asSemantics.DefaultInternalAction;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.ListTerm;
+import jason.asSyntax.Plan;
import jason.asSyntax.StringTerm;
import jason.asSyntax.Term;
+import jason.asSyntax.parser.ParseException;
import jason.bb.BeliefBase;
@@ -48,7 +51,7 @@
<li><i>+ source</i> (atom, optional): the source of the
plan(s). The default value for the source is <code>self</code>.<br/>
- <li><i>+ position</i> (atom, optional): if value is "before" the plan
+ <li><i>+ position</i> (atom, optional): if the value is "begin" the plan
will be added in the begin of the plan library.
The default value is <code>end</code>.<br/>
@@ -91,8 +94,6 @@
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
checkArguments(args);
- Term plans = ASSyntax.parseTerm(args[0].toString());
-
Term source = BeliefBase.ASelf;
if (args.length > 1)
source = args[1];
@@ -101,13 +102,35 @@
if (args.length > 2)
before = args[2].toString().equals("begin");
- if (plans.isList()) { // arg[0] is a list of strings
- for (Term t: (ListTerm) plans) {
- ts.getAg().getPL().add((StringTerm) t, source, before);
+ if (args[0].isList()) { // arg[0] is a list of strings
+ for (Term t: (ListTerm) args[0]) {
+ ts.getAg().getPL().add( transform2plan(t), source, before);
}
} else { // args[0] is a plan
- ts.getAg().getPL().add((StringTerm) plans, source, before);
+ ts.getAg().getPL().add( transform2plan(args[0]), source, before);
}
return true;
}
+
+ private Plan transform2plan(Term t) throws ParseException, JasonException {
+ Plan p = null;
+ if (t.isString()) {
+ String sPlan = ((StringTerm)t).getString();
+ // remove quotes \" -> "
+ StringBuilder sTemp = new StringBuilder();
+ for (int c=0; c <sPlan.length(); c++) {
+ if (sPlan.charAt(c) != '\\') {
+ sTemp.append(sPlan.charAt(c));
+ }
+ }
+ sPlan = sTemp.toString();
+ p = ASSyntax.parsePlan(sPlan);
+ } else if (t instanceof Plan) {
+ p = (Plan)t;
+ } else {
+ throw JasonException.createWrongArgument(this, "The term '"+t+"' can not be used as a plan for .add_plan.");
+ }
+
+ return p;
+ }
}
Added: trunk/src/jason/stdlib/list_plans.java
===================================================================
--- trunk/src/jason/stdlib/list_plans.java (rev 0)
+++ trunk/src/jason/stdlib/list_plans.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -0,0 +1,20 @@
+package jason.stdlib;
+
+import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.Plan;
+import jason.asSyntax.Term;
+
+/** list all plans in PL */
+public class list_plans extends DefaultInternalAction {
+
+ @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
+ for (Plan p: ts.getAg().getPL()) {
+ if (!p.getLabel().toString().startsWith("kqml")) { // do not list kqml plans
+ ts.getLogger().info(p.toString());
+ }
+ }
+ return true;
+ }
+}
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/test/ASParserTest.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -17,6 +17,8 @@
import jason.asSyntax.Plan;
import jason.asSyntax.PlanBody;
import jason.asSyntax.RelExpr;
+import jason.asSyntax.Structure;
+import jason.asSyntax.Term;
import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
import jason.infra.centralised.CentralisedAgArch;
@@ -171,7 +173,7 @@
}
- public void testParsingPlanBody() {
+ public void testParsingPlanBodyTerm1() throws ParseException {
Literal l = Literal.parseLiteral("p( {a1(f);a2}, a3, {!g}, {?b;.print(oi) }, 10)");
assertEquals("p({ a1(f); a2 },a3,{ !g },{ ?b; .print(oi) },10)", l.toString());
assertEquals(5,l.getArity());
@@ -186,6 +188,52 @@
assertFalse(l.getTerm(4).isPlanBody());
}
+ public void testParsingPlanBodyTerm2() throws ParseException {
+ Unifier un = new Unifier();
+ Term t = ASSyntax.parseTerm("{ +a(10) }");
+ assertTrue(t.isPlanBody());
+
+ t = ASSyntax.parseTerm("{ -a; +b }");
+ assertEquals("{ -a; +b }", t.toString());
+ assertTrue(t.isPlanBody());
+ PlanBody pb = (PlanBody)t;
+ assertEquals(2, pb.getPlanSize());
+
+ t = ASSyntax.parseTerm("{ -a : b <- c1; c2 }");
+ assertEquals("-a : b <- c1; c2.", t.toString());
+
+ t = ASSyntax.parseTerm("{ +!a(10) }");
+ assertEquals("+!a(10)", t.toString());
+ assertTrue(t.isStructure());
+ Structure s = (Structure)t;
+ assertEquals(2, s.getArity());
+ assertEquals("te", s.getFunctor());
+ Term te = ASSyntax.parseTerm("{ +!a(X) }");
+ assertTrue(un.unifies(t,te));
+
+ t = ASSyntax.parseTerm("{ !a }");
+ assertTrue(t.isPlanBody());
+ pb = (PlanBody)t;
+ assertEquals(1, pb.getPlanSize());
+ assertEquals("a", pb.getBodyTerm().toString());
+ assertEquals(PlanBody.BodyType.achieve, pb.getBodyType());
+
+ t = ASSyntax.parseTerm("{ +!a <- +b }");
+ assertEquals("+!a <- +b.", t.toString());
+ assertTrue(t.isStructure());
+ s = (Structure)t;
+ assertEquals(4, s.getArity());
+ assertEquals("plan", s.getFunctor());
+
+ t = ASSyntax.parseTerm("{ +a <- +c }");
+ assertEquals("+a <- +c.", t.toString());
+ assertTrue(t.isStructure());
+ s = (Structure)t;
+ assertEquals(4, s.getArity());
+ assertEquals("plan", s.getFunctor());
+ assertEquals(Literal.LTrue, s.getTerm(2));
+ }
+
public void testParsingAllSources() {
parseDir(new File("./examples"));
parseDir(new File("./demos"));
@@ -252,4 +300,5 @@
ll = ASSyntax.parseList(ll.toString());
assertEquals("[a,b(5)]", ll.toString());
}
+
}
Modified: trunk/src/test/StdLibTest.java
===================================================================
--- trunk/src/test/StdLibTest.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/test/StdLibTest.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -1,6 +1,5 @@
package test;
-import jason.JasonException;
import jason.RevisionFailedException;
import jason.architecture.AgArch;
import jason.asSemantics.Agent;
@@ -141,17 +140,17 @@
assertEquals(lt.size(), 2);
}
- public void testGetRelevantPlansAndAddPlan() throws ParseException, JasonException {
+ public void testGetRelevantPlansAndAddPlan() throws Exception {
Agent ag = new Agent();
ag.setLogger(null);
- StringTerm pt1 = new StringTermImpl("@t1 +a : g(10) <- .print(\"ok 10\").");
- Plan pa = ag.getPL().add(pt1, null);
+ Plan pa = ASSyntax.parsePlan("@t1 +a : g(10) <- .print(\"ok 10\").");
+ ag.getPL().add(pa, null, false);
assertTrue(pa != null);
assertEquals("@t1[source(self)] +a : g(10) <- .print(\"ok 10\").", pa.toASString());
- ag.getPL().add(new StringTermImpl("@t2 +a : g(20) <- .print(\"ok 20\")."), new Structure("nosource"));
+ ag.getPL().add(ASSyntax.parsePlan("@t2 +a : g(20) <- .print(\"ok 20\")."), new Structure("nosource"), false);
((Plan) ag.getPL().getPlans().get(1)).getLabel().addSource(new Structure("ag1"));
- ag.getPL().add(new StringTermImpl("@t3 +b : true <- true."), null);
+ ag.getPL().add(ASSyntax.parsePlan("@t3 +b : true <- true."), null, false);
//System.out.println(ag.getPL());
TransitionSystem ts = new TransitionSystem(ag, null, null, null);
@@ -159,12 +158,8 @@
StringTerm ste = new StringTermImpl("+a");
VarTerm X = new VarTerm("X");
//System.out.println(ag.getPL().getAllRelevant(Trigger.parseTrigger(ste.getFunctor()).getPredicateIndicator()));
- try {
- new relevant_plans().execute(ts, u, new Term[] { (Term) ste, X });
- } catch (Exception e) {
- e.printStackTrace();
- }
- assertTrue(ag.getPL().getPlans().get(0).equals(Plan.parse(pt1.getString())));
+ new relevant_plans().execute(ts, u, new Term[] { ste, X });
+ assertTrue(ag.getPL().getPlans().get(0).equals(pa));
ListTerm plans = (ListTerm) u.get("X");
//System.out.println("plans="+plans);
@@ -173,33 +168,21 @@
assertEquals(ag.getPL().getPlans().size(), 3);
// remove plan t1 from PS
- try {
- new remove_plan().execute(ts, new Unifier(), new Term[] { new Pred("t1") });
- } catch (Exception e) {
- e.printStackTrace();
- }
+ new remove_plan().execute(ts, new Unifier(), new Term[] { new Pred("t1") });
// ag.getPS().remove(0);
assertEquals(ag.getPL().getPlans().size(), 2);
// add plans returned from getRelevantPlans
// using IA addPlan
Iterator<Term> i = plans.iterator();
- try {
- while (i.hasNext()) {
- StringTerm t = (StringTerm) i.next();
- new add_plan().execute(ts, new Unifier(), new Term[] { t, new Structure("fromGR") });
- }
- } catch (Exception e) {
- e.printStackTrace();
+ while (i.hasNext()) {
+ StringTerm t = (StringTerm) i.next();
+ new add_plan().execute(ts, new Unifier(), new Term[] { t, new Structure("fromGR") });
}
// add again plans returned from getRelevantPlans
// using IA addPlan receiving a list of plans
- try {
- new add_plan().execute(ts, new Unifier(), new Term[] { (Term) plans, new Structure("fromLT") });
- } catch (Exception e) {
- e.printStackTrace();
- }
+ new add_plan().execute(ts, new Unifier(), new Term[] { plans, new Structure("fromLT") });
// the plan t2 (first plan now) must have 4 sources
assertEquals(ag.getPL().get("t2").getLabel().getSources().size(), 4);
@@ -209,20 +192,12 @@
// remove plan t2,t3 (source = nosource) from PS
ListTerm llt = ListTermImpl.parseList("[t2,t3]");
- try {
- assertTrue((Boolean)new remove_plan().execute(ts, new Unifier(), new Term[] { (Term) llt, new Pred("nosource") }));
- } catch (Exception e) {
- e.printStackTrace();
- }
+ assertTrue((Boolean)new remove_plan().execute(ts, new Unifier(), new Term[] { (Term) llt, new Pred("nosource") }));
assertEquals(ag.getPL().getPlans().size(), 3);
// remove plan t2,t3 (source = self) from PS
llt = ListTermImpl.parseList("[t2,t3]");
- try {
- assertTrue((Boolean)new remove_plan().execute(ts, new Unifier(), new Term[] { (Term) llt }));
- } catch (Exception e) {
- e.printStackTrace();
- }
+ assertTrue((Boolean)new remove_plan().execute(ts, new Unifier(), new Term[] { (Term) llt }));
assertEquals(ag.getPL().getPlans().size(), 2);
// the plan t2 (first plan now) must have 3 sources
Modified: trunk/src/test/TSTest.java
===================================================================
--- trunk/src/test/TSTest.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/test/TSTest.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -8,8 +8,7 @@
import jason.asSemantics.TransitionSystem;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Literal;
-import jason.asSyntax.StringTerm;
-import jason.asSyntax.StringTermImpl;
+import jason.asSyntax.Plan;
import jason.asSyntax.Structure;
import jason.asSyntax.Trigger;
import jason.asSyntax.parser.ParseException;
@@ -30,10 +29,9 @@
public void testRelevant() throws ParseException, JasonException {
Agent ag = new Agent();
Circumstance c = new Circumstance();
- StringTerm pt1 = new StringTermImpl("@t1 +a(X) : g(10) <- .print(\"ok 10\").");
- ag.getPL().add(pt1, new Structure("nosource"));
- ag.getPL().add(new StringTermImpl("@t2 +a(X) : true <- .print(\"ok 20\")."), new Structure("nosource"));
- ag.getPL().add(new StringTermImpl("@t3 +b : true <- true."), new Structure("nosource"));
+ ag.getPL().add(ASSyntax.parsePlan("@t1 +a(X) : g(10) <- .print(\"ok 10\")."), new Structure("nosource"), false);
+ ag.getPL().add((Plan)ASSyntax.parseTerm("{ @t2 +a(X) : true <- .print(\"ok 20\") }"), new Structure("nosource"), false);
+ ag.getPL().add(ASSyntax.parsePlan("@t3 +b : true <- true."), new Structure("nosource"), false);
TransitionSystem ts = new TransitionSystem(ag, c, null, null);
Literal content = Literal.parseLiteral("~alliance");
content.addSource(new Structure("ag1"));
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2009-03-03 07:42:18 UTC (rev 1457)
+++ trunk/src/test/TermTest.java 2009-03-09 15:03:05 UTC (rev 1458)
@@ -764,6 +764,9 @@
p = Plan.parse("+e(x) : a(X) & X > 10 <- .print(W).");
assertEquals(1, p.getSingletonVars().size());
+ p = Plan.parse("+e(x) : a(X, { +!g(W) <- true }) & X > 10 <- .print(W).");
+ assertEquals(0, p.getSingletonVars().size());
+
p = Plan.parse("+e(x) : a(X) & X > 10 <- .print(_).");
assertEquals(0, p.getSingletonVars().size());
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|