|
From: <jom...@us...> - 2009-03-10 17:14:22
|
Revision: 1463
http://jason.svn.sourceforge.net/jason/?rev=1463&view=rev
Author: jomifred
Date: 2009-03-10 17:14:12 +0000 (Tue, 10 Mar 2009)
Log Message:
-----------
use trigger term for .at
Modified Paths:
--------------
trunk/examples/contract-net-protocol/c.asl
trunk/src/jason/asSyntax/Plan.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/at.java
trunk/src/jason/stdlib/plan_label.java
trunk/src/jason/stdlib/relevant_plans.java
trunk/src/test/ASParserTest.java
trunk/src/test/StdLibTest.java
Modified: trunk/examples/contract-net-protocol/c.asl
===================================================================
--- trunk/examples/contract-net-protocol/c.asl 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/examples/contract-net-protocol/c.asl 2009-03-10 17:14:12 UTC (rev 1463)
@@ -20,10 +20,9 @@
.findall(Name,introduction(participant,Name),LP);
.print("Sending CFP to ",LP);
.send(LP,tell,cfp(Id,Task));
- .concat("+!contract(",Id,")",Event);
// the deadline of the CNP is now + 4 seconds, so
// the event +!contract(Id) is generated at that time
- .at("now +4 seconds", Event).
+ .at("now +4 seconds", { +!contract(Id) }).
// receive proposal
Modified: trunk/src/jason/asSyntax/Plan.java
===================================================================
--- trunk/src/jason/asSyntax/Plan.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/asSyntax/Plan.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -62,6 +62,8 @@
private boolean isAllUnifs = false;
private boolean hasBreakpoint = false;
+ private boolean isTerm = false; // it is true when the plan body is used as a term instead of an element of a plan
+
// used by clone
public Plan() {
super("plan", 0);
@@ -71,12 +73,15 @@
public Plan(Pred label, Trigger te, LogicalFormula ct, PlanBody bd) {
super("plan", 0);
tevent = te;
+ tevent.setAsTriggerTerm(false);
setLabel(label);
setContext(ct);
- if (bd == null)
+ if (bd == null) {
body = new PlanBodyImpl();
- else
+ } else {
body = bd;
+ body.setAsBodyTerm(false);
+ }
}
@Override
@@ -122,6 +127,10 @@
context = null;
}
+ public void setAsPlanTerm(boolean b) {
+ isTerm = b;
+ }
+
/** prefer using ASSyntax.parsePlan */
public static Plan parse(String sPlan) {
as2j parser = new as2j(new StringReader(sPlan));
@@ -205,6 +214,8 @@
p.body = (PlanBody)body.clone();
p.setSrcInfo(srcInfo);
+
+ p.isTerm = isTerm;
return p;
}
@@ -224,6 +235,7 @@
p.body = body.clonePB();
p.setSrcInfo(srcInfo);
+ p.isTerm = isTerm;
return p;
}
@@ -234,10 +246,18 @@
/** returns this plan in a string complaint with AS syntax */
public String toASString() {
- return ((label == null) ? "" : "@" + label + " ") +
+ String b, e;
+ if (isTerm) {
+ b = "{ ";
+ e = " }";
+ } else {
+ b = "";
+ e = ".";
+ }
+ return b+((label == null) ? "" : "@" + label + " ") +
tevent + ((context == null) ? "" : " : " + context) +
(body.isEmptyBody() ? "" : " <- " + body) +
- ".";
+ e;
}
/** get as XML */
Modified: trunk/src/jason/asSyntax/PlanLibrary.java
===================================================================
--- trunk/src/jason/asSyntax/PlanLibrary.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/asSyntax/PlanLibrary.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -167,6 +167,8 @@
if (!p.getLabel().hasSource())
p.getLabel().addAnnot(BeliefBase.TSelf);
+ p.setAsPlanTerm(false); // it is not a term anymore
+
planLabels.put(p.getLabel().getFunctor(), p);
Trigger pte = p.getTrigger();
Modified: trunk/src/jason/asSyntax/Trigger.java
===================================================================
--- trunk/src/jason/asSyntax/Trigger.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/asSyntax/Trigger.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -71,6 +71,8 @@
private TEType type = TEType.belief;
private Literal literal;
+ private boolean isTerm = false; // it is true when the plan body is used as a term instead of an element of a plan
+
public Trigger(TEOperator op, TEType t, Literal l) {
super("te", 0);
literal = l;
@@ -163,6 +165,7 @@
public Trigger clone() {
Trigger c = new Trigger(operator, type, literal.copy());
c.predicateIndicatorCache = this.predicateIndicatorCache;
+ c.isTerm = isTerm;
return c;
}
@@ -187,9 +190,21 @@
this.literal = literal;
predicateIndicatorCache = null;
}
+
+ public void setAsTriggerTerm(boolean b) {
+ isTerm = b;
+ }
public String toString() {
- return operator.toString() + type + literal;
+ String b, e;
+ if (isTerm) {
+ b = "{ ";
+ e = " }";
+ } else {
+ b = "";
+ e = "";
+ }
+ return b + operator+ type + literal + e;
}
/** try to convert the term t into a trigger, in case t is a trigger term, a string that can be parsed to a trigger, a var with value trigger, .... */
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-10 17:14:12 UTC (rev 1463)
@@ -388,11 +388,13 @@
}
if (C == null && B == null) {
// handle the case of a single trigger
+ T.setAsTriggerTerm(true);
return T;
} else {
// handle the case of a entire plan
Plan p = new Plan(L,T,(LogicalFormula)C, B);
p.setSrcInfo(T.getSrcInfo());
+ p.setAsPlanTerm(true);
return p;
}
}
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -553,11 +553,13 @@
}
if (C == null && B == null) {
// handle the case of a single trigger
+ T.setAsTriggerTerm(true);
{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());
+ p.setAsPlanTerm(true);
{if (true) return p;}
}
}
@@ -1317,27 +1319,6 @@
finally { jj_save(0, xla); }
}
- final private boolean jj_3R_12() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(20)) {
- jj_scanpos = xsp;
- if (jj_scan_token(14)) {
- jj_scanpos = xsp;
- if (jj_scan_token(15)) return true;
- }
- }
- xsp = jj_scanpos;
- if (jj_3R_13()) jj_scanpos = xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_14()) { jj_scanpos = xsp; break; }
- }
- xsp = jj_scanpos;
- if (jj_3R_15()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_15() {
if (jj_3R_17()) return true;
return false;
@@ -1351,13 +1332,13 @@
return false;
}
- final private boolean jj_3R_16() {
- if (jj_scan_token(27)) return true;
+ final private boolean jj_3R_14() {
+ if (jj_3R_16()) return true;
return false;
}
- final private boolean jj_3R_14() {
- if (jj_3R_16()) return true;
+ final private boolean jj_3R_16() {
+ if (jj_scan_token(27)) return true;
return false;
}
@@ -1371,6 +1352,27 @@
return false;
}
+ final private boolean jj_3R_12() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(20)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(14)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(15)) return true;
+ }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_13()) jj_scanpos = xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_14()) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_15()) jj_scanpos = xsp;
+ return false;
+ }
+
public as2jTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
Modified: trunk/src/jason/stdlib/at.java
===================================================================
--- trunk/src/jason/stdlib/at.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/stdlib/at.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -30,7 +30,6 @@
import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
-import jason.asSyntax.ASSyntax;
import jason.asSyntax.StringTerm;
import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
@@ -57,14 +56,15 @@
"d" or "day(s)".
The default <time_unit> is milliseconds.<br/><br/>
- <li>+ event (string): the event to be created. The string will
- be parsed as a triggering event (see the <b><i>Jason</i></b> syntax).
+ <li>+ event (trigger term): the event to be created. The event should
+ follow the Jason Syntax for event and be
+ enclosed by { and }.
</ul>
<p>Examples:<ul>
- <li> <code>.at("now +3 minutes", "+!g")</code>: generates the event <code>+!g</code> 3 minutes from now.
- <li> <code>.at("now +1 m", "+!g")</code>
- <li> <code>.at("now +2 h", "+!g")</code>
+ <li> <code>.at("now +3 minutes", {+!g})</code>: generates the event <code>+!g</code> 3 minutes from now.
+ <li> <code>.at("now +1 m", {+!g})</code>
+ <li> <code>.at("now +2 h", {+!g})</code>
</ul>
@see jason.stdlib.wait
@@ -83,7 +83,6 @@
StringTerm time = (StringTerm)args[0];
String stime = time.getString();
- StringTerm sevent = (StringTerm)args[1];
// parse time
long deadline = -1;
@@ -123,8 +122,8 @@
throw new JasonException("The time parameter ('"+time+"') of the internal action 'at' did not parse correctly!");
}
- Trigger te = ASSyntax.parseTrigger(sevent.getString());
-
+ Trigger te = Trigger.tryToGetTrigger(args[1]);
+
ts.getAg().getScheduler().schedule(new CheckDeadline(te, ts), deadline, TimeUnit.MILLISECONDS);
return true;
}
Modified: trunk/src/jason/stdlib/plan_label.java
===================================================================
--- trunk/src/jason/stdlib/plan_label.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/stdlib/plan_label.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -79,6 +79,7 @@
if (p != null) {
p = (Plan)p.clone();
p.getLabel().delSources();
+ p.setAsPlanTerm(true);
//String ps = p.toASString().replaceAll("\"", "\\\\\"");
//return un.unifies(new StringTermImpl(ps), args[0]);
return un.unifies(p, args[0]);
Modified: trunk/src/jason/stdlib/relevant_plans.java
===================================================================
--- trunk/src/jason/stdlib/relevant_plans.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/jason/stdlib/relevant_plans.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -98,6 +98,7 @@
if (np.getLabel() != null) {
np.getLabel().delSources();
}
+ np.setAsPlanTerm(true);
//StringTerm stplan = new StringTermImpl(np.toASString().replaceAll("\\\"", "\\\\\""));
//last = last.append(stplan);
last = last.append(np);
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/test/ASParserTest.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -192,6 +192,7 @@
Unifier un = new Unifier();
Term t = ASSyntax.parseTerm("{ +a(10) }");
assertTrue(t.isPlanBody());
+ assertEquals("{ +a(10) }", t.toString());
t = ASSyntax.parseTerm("{ -a; +b }");
assertEquals("{ -a; +b }", t.toString());
@@ -200,10 +201,10 @@
assertEquals(2, pb.getPlanSize());
t = ASSyntax.parseTerm("{ -a : b <- c1; c2 }");
- assertEquals("-a : b <- c1; c2.", t.toString());
+ assertEquals("{ -a : b <- c1; c2 }", t.toString());
t = ASSyntax.parseTerm("{ +!a(10) }");
- assertEquals("+!a(10)", t.toString());
+ assertEquals("{ +!a(10) }", t.toString());
assertTrue(t.isStructure());
Structure s = (Structure)t;
assertEquals(2, s.getArity());
@@ -219,14 +220,14 @@
assertEquals(PlanBody.BodyType.achieve, pb.getBodyType());
t = ASSyntax.parseTerm("{ +!a <- +b }");
- assertEquals("+!a <- +b.", t.toString());
+ 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());
+ assertEquals("{ +a <- +c }", t.toString());
assertTrue(t.isStructure());
s = (Structure)t;
assertEquals(4, s.getArity());
Modified: trunk/src/test/StdLibTest.java
===================================================================
--- trunk/src/test/StdLibTest.java 2009-03-10 13:04:16 UTC (rev 1462)
+++ trunk/src/test/StdLibTest.java 2009-03-10 17:14:12 UTC (rev 1463)
@@ -176,7 +176,7 @@
// using IA addPlan
Iterator<Term> i = plans.iterator();
while (i.hasNext()) {
- StringTerm t = (StringTerm) i.next();
+ Term t = i.next();
new add_plan().execute(ts, new Unifier(), new Term[] { t, new Structure("fromGR") });
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|