|
From: <jom...@us...> - 2008-05-18 14:57:22
|
Revision: 1298
http://jason.svn.sourceforge.net/jason/?rev=1298&view=rev
Author: jomifred
Date: 2008-05-18 07:57:19 -0700 (Sun, 18 May 2008)
Log Message:
-----------
change the syntax of if/while/loop to not use ".", as in
if( test ) { ... } ;
but it is still an internal action.
jason team: some minor test
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/tests/TestLoop.java
trunk/applications/jason-team/src/asl/exploration.asl
trunk/applications/jason-team/src/asl/gaucho.asl
trunk/applications/jason-team/src/asl/herding.asl
trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java
trunk/applications/jason-team/src/java/arch/LocalWorldModel.java
trunk/applications/jason-team/src/java/jia/cluster.java
trunk/applications/jason-team/src/java/jia/herd_position.java
trunk/applications/jason-team/src/java/jia/scouter_pos.java
trunk/applications/jason-team/src/java/test/TestBasicHerding.java
trunk/applications/jason-team/src/team-os.xml
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSyntax/InternalActionLiteral.java
trunk/src/jason/asSyntax/PlanBody.java
trunk/src/jason/asSyntax/PlanBodyImpl.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/suspend.java
trunk/src/jason/stdlib/wait.java
trunk/src/jeditPlugin/agentSpeak.xml
Modified: trunk/applications/as-unit-test/src/jason/tests/TestLoop.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/TestLoop.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/as-unit-test/src/jason/tests/TestLoop.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -18,13 +18,13 @@
ag.parseAScode(
"b(1). "+
"p(1,a). p(2,a). p(3,b). p(4,b). p(6,a). "+
- "+!test1 <- .while( .count(b(_),N) & N < 4, {+b(N+1) })."+
+ "+!test1 <- while( .count(b(_),N) & N < 4, {+b(N+1) })."+
- "+!test2 <- L=4; .while( .count(b(_)) < L) { ?b(X); +b(X+1) }; jason.asunit.print(end). "+
+ "+!test2 <- L=4; while( .count(b(_)) < L) { ?b(X); +b(X+1) }; jason.asunit.print(end). "+
- "+!test3 <- L=4; .for( p(N,a) & N < L) { jason.asunit.print(N) }; jason.asunit.print(end). "+
+ "+!test3 <- L=4; for( p(N,a) & N < L) { jason.asunit.print(N) }; jason.asunit.print(end). "+
- "+!test4 <- .for( .member(N, [1,3,4]), { jason.asunit.print(N) }); jason.asunit.print(end). "
+ "+!test4 <- for( .member(N, [1,3,4]), { jason.asunit.print(N) }); jason.asunit.print(end). "
);
}
Modified: trunk/applications/jason-team/src/asl/exploration.asl
===================================================================
--- trunk/applications/jason-team/src/asl/exploration.asl 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/asl/exploration.asl 2008-05-18 14:57:19 UTC (rev 1298)
@@ -5,7 +5,6 @@
/* -- initial goals -- */
-//!create_team_group.
/*
-- plans for new match
@@ -13,24 +12,6 @@
*/
-/* plans for the team's groups creation */
-
-/*
-+!create_team_group
- : .my_name(gaucho1)
- <- .print("oooo creating new team group ------------------------------------------------- ");
- !remove_org;
- jmoise.create_group(team).
-+!create_team_group.
-*/
-
-/*+group(team,GId) // agent 1 is responsible for the creation of exploration groups
- : .my_name(gaucho1)
- <- jmoise.create_group(exploration_grp,GId);
- jmoise.create_group(exploration_grp,GId);
- jmoise.create_group(exploration_grp,GId). */
-
-
/* plans for agents with odd id */
+gsize(_,_) // new match has started
@@ -43,11 +24,11 @@
<- .my_name(Me);
// create the team, if necessary
- .if( Me == gaucho1 & not group(team,_) ) {
+ if( Me == gaucho1 & not group(team,_) ) {
jmoise.create_group(team)
};
- .if( not group(exploration_grp,_)[owner(Me)] ) {
+ if( not group(exploration_grp,_)[owner(Me)] ) {
?group(team,TeamGroup); // get the team Id
jmoise.create_group(exploration_grp,TeamGroup,G);
.print("ooo Group ",G," created")
@@ -60,7 +41,7 @@
?pos(MyX,MyY,_); // wait my pos
// wait others pos
- .while( .count(ally_pos(_,_,_), N) & N < 5 ) {
+ while( .count(ally_pos(_,_,_), N) & N < 5 ) {
.print("ooo waiting others pos ");
.wait("+ally_pos(_,_,_)", 500, _)
};
@@ -99,7 +80,7 @@
-play(Me,explorer,_)
: .my_name(Me)
<- .wait(4000);
- .for( group(exploration_grp,G)[owner(Me)] ) {
+ for( group(exploration_grp,G)[owner(Me)] ) {
.print("ooo Removing group ",G," since I am not in the group anymore");
jmoise.remove_group(G);
.wait(4000)
@@ -151,7 +132,18 @@
*/
+{ begin maintenance_goal("+pos(_,_,_)") }
++!change_to_herding[scheme(Sch),mission(Mission)]
+ : cow(_,_,_)
+ <- .print("ooo I see some cow, create the herding group");
+ !!create_herding_gr.
+
++!change_to_herding[scheme(Sch),mission(Mission)].
+
+{ end }
+
+
/* -- plans for the goals of role scouter -- */
{ begin maintenance_goal("+pos(_,_,_)") }
@@ -165,7 +157,7 @@
jia.dist(MyX, MyY, LX, LY, DistanceToLeader);
// If I am far from him, go to him
- .if( DistanceToLeader > (AGPR * 2) -3) {
+ if( DistanceToLeader > (AGPR * 2) -3) {
.print("ooo Approaching leader.");
-+target(LX,LY)
}{
Modified: trunk/applications/jason-team/src/asl/gaucho.asl
===================================================================
--- trunk/applications/jason-team/src/asl/gaucho.asl 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/asl/gaucho.asl 2008-05-18 14:57:19 UTC (rev 1298)
@@ -68,11 +68,11 @@
// remove all groups and schemes (only agent1 does that)
+!remove_org
: .my_name(gaucho1)
- <- .if( group(team,Old) ) {
+ <- if( group(team,Old) ) {
jmoise.remove_group(Old)
};
- .for( scheme(_,SchId) ) {
+ for( scheme(_,SchId) ) {
jmoise.remove_scheme(SchId)
}.
+!remove_org.
@@ -93,20 +93,20 @@
.print("ooo Adopting the role ",NewRole," in group ",GT,", as asked by ",S);
// give up all missions
- .while( commitment(Me,M,Sch) ) {
+ while( commitment(Me,M,Sch) ) {
.print("ooo removing my mission ",M," in ",Sch);
jmoise.remove_mission(M,Sch)
};
// if I play herder in another group, ...
- .if( play(Me,herder,G) & G \== GT) {
+ if( play(Me,herder,G) & G \== GT) {
// ask all herdboys to also change the group
.findall(Boy,play(Boy,herdboy,G),HerdBoys);
.send(HerdBoys, achieve, change_role(herdboy,GT))
};
// if I play any other role, give it up
- .while( play(Me,R,OG) & OG \== GT) {
+ while( play(Me,R,OG) & OG \== GT) {
jmoise.remove_role(R,OG)
};
Modified: trunk/applications/jason-team/src/asl/herding.asl
===================================================================
--- trunk/applications/jason-team/src/asl/herding.asl 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/asl/herding.asl 2008-05-18 14:57:19 UTC (rev 1298)
@@ -4,13 +4,7 @@
/* -- plans for herding groups creation -- */
-// if see cow and is not herding, create the herding group and change roles
-+cow(_,_,_)
- : .my_name(Me) &
- play(Me,explorer,_) &
- not .desire(create_herding_gr) // to avoid creating several groups
- <- !create_herding_gr.
-
+
+!create_herding_gr
: not .intend(create_herding_gr)
<- .print("ooo Creating herding group.");
@@ -44,7 +38,7 @@
-play(Me,herder,_)
: .my_name(Me)
<- .wait(4000);
- .for( group(herding_grp,G)[owner(Me)] ) {
+ for( group(herding_grp,G)[owner(Me)] ) {
-group_leader(G,Me);
.broadcast(untell, group_leader(G,Me));
jmoise.remove_group(G);
@@ -67,13 +61,13 @@
play(Me, herder, Gi) &
current_cluster(MyC)
<- // for all other groups
- .for( group_leader(Gj, L) & L \== Me & Me < L & not play(L,herdboy,Gi)) {
+ for( group_leader(Gj, L) & L \== Me & Me < L & not play(L,herdboy,Gi)) {
.print("ooo Checking merging with ",Gj);
// ask their cluster
.send(L, askOne, current_cluster(_), current_cluster(TC));
.intersection(MyC,TC,I);
- .if (.length(I) > 0) {
+ if (.length(I) > 0) {
.print("ooo Merging my herding group ",Gi," with ",Gj, " lead by ",L);
.send(L, achieve, change_role(herdboy,Gi))
}
@@ -154,12 +148,8 @@
/* -- plans for the goals of all roles (herder and herdboy) -- */
-//{ begin maintenance_goal("+pos(_,_,_)") }
-
// This goal behaviour is set by the message "tell target" of the leader of the group
+!be_in_formation[scheme(Sch),mission(Mission)]
<- .print("ooo I should be in formation!");
.suspend.
-
-// { end }
Modified: trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java
===================================================================
--- trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -20,7 +20,7 @@
try {
Agent newAg = new Agent();
- PlanBody endofplan = null;
+ PlanBodyImpl endofplan = null;
Literal goal = null;
//ListTerm annots = ListTermImpl.parseList("[scheme(SchId),mission(MissionId),group(GroupId)]");
Modified: trunk/applications/jason-team/src/java/arch/LocalWorldModel.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/LocalWorldModel.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/java/arch/LocalWorldModel.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -5,7 +5,6 @@
import jason.bb.BeliefBase;
import jason.environment.grid.Location;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
@@ -151,30 +150,33 @@
int w = 0;
Location newl;
if (occupied == null) occupied = Collections.emptyList();
- List<Location> options = new ArrayList<Location>();
+ //List<Location> options = new ArrayList<Location>();
while (true) {
- options.clear();
+ //options.clear();
for (int y=l.y-w+1; y<l.y+w; y++) {
//System.out.println(" "+(l.x+w)+" "+y);
//System.out.println(" "+(l.x-w)+" "+y);
newl = new Location(l.x-w,y);
if (isFree(newl) && !occupied.contains(newl))
- options.add(newl);
+ //options.add(newl);
+ return newl;
newl = new Location(l.x+w,y);
if (isFree(newl) && !occupied.contains(newl))
- options.add(newl);
+ //options.add(newl);
+ return newl;
}
for (int x=l.x-w; x<=l.x+w;x++) {
newl = new Location(x,l.y-w);
if (isFree(newl) && !occupied.contains(newl))
- options.add(newl);
+ //options.add(newl);
+ return newl;
newl = new Location(x,l.y+w);
if (isFree(newl) && !occupied.contains(newl))
- options.add(newl);
+ //options.add(newl);
+ return newl;
}
- //System.out.println(w + " " + options);
- if (!options.isEmpty())
- return options.get(random.nextInt(options.size()));
+ //if (!options.isEmpty())
+ // return options.get(random.nextInt(options.size()));
w++;
}
}
Modified: trunk/applications/jason-team/src/java/jia/cluster.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/cluster.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/java/jia/cluster.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -80,7 +80,7 @@
vs.add(v.sub(mean));
Collections.sort(vs);
-
+
List<Vec> cs = new ArrayList<Vec>();
if (!vs.isEmpty())
cs.add(vs.remove(0));
@@ -104,7 +104,6 @@
}
}
}
-
List<Location> clusterLocs = new ArrayList<Location>();
for (Vec v: cs) {
// place all cows in ref to 0,0
Modified: trunk/applications/jason-team/src/java/jia/herd_position.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/herd_position.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/java/jia/herd_position.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -155,7 +155,7 @@
return null;
Vec mean = Vec.mean(cows);
- int stepsFromCenter = (int)Math.round(Vec.max(cows).sub(mean).magnitude())+1;
+ int stepsFromCenter = Math.max(4, (int)Math.round(Vec.max(cows).sub(mean).magnitude())+1);
//Vec max = Vec.max(cows);
// run A* to see the cluster target in n steps
@@ -165,21 +165,19 @@
int n = Math.min(stepsFromCenter, np.size());
Vec cowstarget = new Vec(model, s.getNodeLocation(np.get(n)));
-
// find cow farthest of corral
Vec farcow = null;
for (Vec c: cows)
if (farcow == null || farcow.getLocation(model).maxBorder(model.getCorralCenter()) < c.getLocation(model).maxBorder(model.getCorralCenter()))
farcow = c;
-
Vec agsTarget = mean.sub(cowstarget).newMagnitude(farcow.sub(mean).magnitude()+1);
//System.out.println("Ags target = "+agsTarget+" mean = "+mean + " far cow is "+farcow);
List<Location> r = new ArrayList<Location>();
for (Vec position: formation.getDistances()) { // 2, -2, 6, -6, ....
//System.out.println("....... "+position+" + "+agsTarget+" = " + agTarget);
Location l = findFirstFreeLocTowardsTarget(agsTarget, position, mean, model);
- //System.out.println(" = "+dist+" result "+l);
+ //System.out.println(" = "+position+" result "+l);
if (l == null) {
l = model.nearFree(agsTarget.add(mean).getLocation(model), r);
} else {
@@ -200,8 +198,10 @@
//System.out.println(start + " to "+ direction + " = " + end);
Location l = start.add(ref).getLocation(model);
- Location lastloc = null;
+ //Location lastloc = null;
int maxSize = (int)direction.magnitude();
+ l = t.newMagnitude(maxSize).add(startandref).getLocation(model);
+ /*
for (int s = 1; s <= maxSize; s++) {
l = t.newMagnitude(s).add(startandref).getLocation(model);
//System.out.println(" test "+s+" = "+l+" -- ");
@@ -209,6 +209,7 @@
return lastloc;
lastloc = l;
}
+ */
return l;
}
Modified: trunk/applications/jason-team/src/java/jia/scouter_pos.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/scouter_pos.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/java/jia/scouter_pos.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -57,7 +57,7 @@
Vec leader = new Vec(model, leaderPos);
Vec target = new Vec(model, leaderTarget).sub(leader);
Vec me = new Vec(WorldModel.agPerceptionRatio*2-3,0);
- return herd_position.findFirstFreeLocTowardsTarget(target, me, leader, model);
+ return model.nearFree(herd_position.findFirstFreeLocTowardsTarget(target, me, leader, model), null);
}
}
Modified: trunk/applications/jason-team/src/java/test/TestBasicHerding.java
===================================================================
--- trunk/applications/jason-team/src/java/test/TestBasicHerding.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/java/test/TestBasicHerding.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -29,7 +29,7 @@
@Before
public void scenario() {
- model = new LocalWorldModel(50,50, WorldModel.agPerceptionRatio, null);
+ model = new LocalWorldModel(50,50, WorldModel.agsByTeam, null);
model.setCorral(new Location(0,49), new Location(2,49));
model.wall(7, 44, 7, 49);
}
@@ -38,7 +38,7 @@
cowboy = new Vec(3,5);
model.add(WorldModel.AGENT, cowboy.getLocation(model));
- addToModel(
+ addCowsToModel(
new Vec(6,7),
new Vec(5,30),
new Vec(4,8),
@@ -50,7 +50,7 @@
cowboy = new Vec(11,3);
model.add(WorldModel.AGENT, cowboy.getLocation(model));
- addToModel(
+ addCowsToModel(
new Vec(8,0),
new Vec(9,0),
new Vec(10,0),
@@ -62,12 +62,31 @@
new Vec(10,2));
}
+ public void scenario3() {
+ model = new LocalWorldModel(50,19, WorldModel.agsByTeam, null);
+ model.setCorral(new Location(8,0), new Location(12,2));
+ model.wall(7, 0, 7, 2);
+ cowboy = new Vec(10,12);
+ model.add(WorldModel.AGENT, cowboy.getLocation(model));
+
+ addCowsToModel(
+ new Vec(1,16),
+ new Vec(2,14),
+ new Vec(3,13),
+ new Vec(5,14),
+ new Vec(6,12),
+ new Vec(6,13),
+ new Vec(20,2),
+ new Vec(20,3),
+ new Vec(20,4));
+ }
+
@Test
public void bigCluster() {
// big cluster
for (int x = 10; x < 30; x++) {
for (int y = 5; y < 20; y++) {
- addToModel(new Vec(model,x,y));
+ addCowsToModel(new Vec(model,x,y));
}
}
@@ -75,7 +94,7 @@
assertEquals(model.getCows().size(), cowsl.size());
}
- private void addToModel(Vec... cows) {
+ private void addCowsToModel(Vec... cows) {
for (int i=0; i<cows.length; i++) {
Location l = cows[i].getLocation(model);
model.addCow(l.x, l.y);
@@ -183,7 +202,7 @@
byIA = hp.getAgTarget(clusterLocs, Formation.six, cowboy.getLocation(model));
assertEquals(new Location(8,39), byIA);
- assertEquals("[8,39, 5,37, 10,43, 1,37, 12,46, 0,37]", hp.formationPlaces(clusterLocs, Formation.six).toString());
+ assertEquals("[8,39, 5,37, 10,43, 1,37, 12,46, 0,34]", hp.formationPlaces(clusterLocs, Formation.six).toString());
/*
// add an agent in 6,39
@@ -231,15 +250,32 @@
List<Location> form = hp.formationPlaces(clusterLocs, Formation.four);
assertTrue(form.contains(new Location(11,49)));
assertTrue(form.contains(new Location(6,49)));
- assertTrue(form.contains(new Location(6,48)));
+ assertTrue(form.contains(new Location(3,48)));
assertTrue(form.contains(new Location(15,48)));
}
@Test
+ public void formationSc3() throws Exception {
+ scenario3();
+
+ List<Location> clusterLocs = cluster.getCluster(model, WorldModel.cowPerceptionRatio);
+ assertEquals(6, clusterLocs.size());
+
+ herd_position hp = new herd_position();
+ hp.setModel(model);
+
+ List<Location> form = hp.formationPlaces(clusterLocs, Formation.four);
+ assertTrue(form.contains(new Location(0,4)) || form.contains(new Location(0,3)));
+ assertTrue(form.contains(new Location(0,8)));
+ assertTrue(form.contains(new Location(0,1)) || form.contains(new Location(0,0)));
+ assertTrue(form.contains(new Location(4,11)));
+ }
+
+ @Test
public void scouterPos() throws Exception {
scenario1();
Location byIA = new scouter_pos().getScouterTarget(model, new Location(2,46), new Location(5,44));
- assertEquals(new Location(6,46), byIA);
+ assertEquals(new Location(6,49), byIA);
byIA = new scouter_pos().getScouterTarget(model, new Location(9,46), new Location(9,42));
assertEquals(new Location(22,42), byIA);
Modified: trunk/applications/jason-team/src/team-os.xml
===================================================================
--- trunk/applications/jason-team/src/team-os.xml 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/applications/jason-team/src/team-os.xml 2008-05-18 14:57:19 UTC (rev 1298)
@@ -79,12 +79,14 @@
<goal id="goto_near_unvisited" ds="go to the near unvisited location inside the area of the group" type="maintenance"/>
<goal id="share_seen_cows" ds="share seen cows with other agents in the scheme" type="maintenance"/>
<goal id="follow_leader" ds="follows the leader of the scheme/group" type="maintenance"/>
+ <goal id="change_to_herding" ds="verify if necessary to create the herding group" type="maintenance"/>
</plan>
</goal>
<mission id="explore" min="1">
<goal id="goto_near_unvisited" />
<goal id="share_seen_cows" />
+ <goal id="change_to_herding" />
</mission>
<mission id="scout" >
<goal id="follow_leader" />
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/asSemantics/Agent.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -31,7 +31,6 @@
import jason.asSyntax.Plan;
import jason.asSyntax.PlanLibrary;
import jason.asSyntax.Rule;
-import jason.asSyntax.Structure;
import jason.asSyntax.Trigger;
import jason.asSyntax.Trigger.TEOperator;
import jason.asSyntax.Trigger.TEType;
@@ -44,9 +43,6 @@
import jason.functions.Count;
import jason.functions.RuleToFunction;
import jason.runtime.Settings;
-import jason.stdlib.conditional;
-import jason.stdlib.foreach;
-import jason.stdlib.loop;
import java.io.File;
import java.io.FileInputStream;
@@ -242,14 +238,7 @@
}
@SuppressWarnings("unchecked")
- public InternalAction getIA(Structure action) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
- String iaName = action.getFunctor();
- if (iaName.equals(".if"))
- return conditional.create();
- if (iaName.equals(".while"))
- return loop.create();
- if (iaName.equals(".for"))
- return foreach.create();
+ public InternalAction getIA(String iaName) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
if (iaName.charAt(0) == '.')
iaName = "jason.stdlib" + iaName;
InternalAction objIA = internalActions.get(iaName);
Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java
===================================================================
--- trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -62,7 +62,7 @@
public InternalActionLiteral(Pred p, Agent ag) throws Exception {
super(true,p);
if (ag != null)
- ia = ag.getIA(this);
+ ia = ag.getIA(getFunctor());
}
@Override
@@ -131,7 +131,7 @@
public InternalAction getIA(Agent ag) throws Exception {
if (ia == null && ag != null)
- ia = ag.getIA(this);
+ ia = ag.getIA(getFunctor());
return ia;
}
Modified: trunk/src/jason/asSyntax/PlanBody.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBody.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/asSyntax/PlanBody.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -32,5 +32,5 @@
public boolean add(PlanBody bl);
public boolean add(int index, PlanBody bl);
- public Term removeBody(int index);
-}
\ No newline at end of file
+ public Term removeBody(int index);
+}
Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -154,6 +154,7 @@
public boolean add(PlanBody bl) {
if (term == null) {
+ bl = (PlanBody)bl.clone();
swap(bl);
this.next = bl.getBodyNext();
} else if (next == null)
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2008-05-18 14:57:19 UTC (rev 1298)
@@ -287,7 +287,8 @@
/* Plan */
-Plan plan() : { Token k; Pred L = null;
+Plan plan() : { Token k;
+ Pred L = null;
Trigger T;
Object C = null;
PlanBody B = null;
@@ -303,10 +304,6 @@
try { ial = checkInternalActionsInContext((LogicalFormula)C, curAg); } catch (Exception e) {}
if (ial != null)
throw new ParseException(getSourceRef(ial)+" The internal action '"+ial+"' can not be used in plan's context!");
- //if (B != null) {
- //if (!(B instanceof PlanBody))
- // throw new ParseException(getSourceRef(B)+" Unknown body formula:"+B);
- //bl = (PlanBody)B;
if (B != null && B.getBodyTerm().equals(Literal.LTrue))
B = (PlanBody)B.getBodyNext();
Plan p = new Plan(L,T,(LogicalFormula)C, B);
@@ -400,11 +397,26 @@
/* Literal */
-Literal literal() : { Pred F; Token k; boolean type = Literal.LPos; }
+Literal literal() : { Pred F; Token k; boolean type = Literal.LPos; }
{
( ( [ <TK_NEG> { type = Literal.LNeg; }
]
- F=pred() { if (F.getFunctor().indexOf(".") >= 0) {
+ F=pred() {
+ if (F.getFunctor().equals("if")) {
+ Pred c = new Pred(".conditional");
+ c.setTerms(F.getTerms());
+ F = c;
+ } else if (F.getFunctor().equals("while")) {
+ Pred c = new Pred(".loop");
+ c.setTerms(F.getTerms());
+ F = c;
+ } else if (F.getFunctor().equals("for")) {
+ Pred c = new Pred(".foreach");
+ c.setTerms(F.getTerms());
+ F = c;
+ }
+
+ if (F.getFunctor().indexOf(".") >= 0) {
try {
return new InternalActionLiteral(F, curAg);
} catch (Exception e) {
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -314,7 +314,8 @@
/* Plan */
final public Plan plan() throws ParseException {
- Token k; Pred L = null;
+ Token k;
+ Pred L = null;
Trigger T;
Object C = null;
PlanBody B = null;
@@ -357,10 +358,6 @@
try { ial = checkInternalActionsInContext((LogicalFormula)C, curAg); } catch (Exception e) {}
if (ial != null)
{if (true) throw new ParseException(getSourceRef(ial)+" The internal action '"+ial+"' can not be used in plan's context!");}
- //if (B != null) {
- //if (!(B instanceof PlanBody))
- // throw new ParseException(getSourceRef(B)+" Unknown body formula:"+B);
- //bl = (PlanBody)B;
if (B != null && B.getBodyTerm().equals(Literal.LTrue))
B = (PlanBody)B.getBodyNext();
Plan p = new Plan(L,T,(LogicalFormula)C, B);
@@ -534,7 +531,7 @@
/* Literal */
final public Literal literal() throws ParseException {
- Pred F; Token k; boolean type = Literal.LPos;
+ Pred F; Token k; boolean type = Literal.LPos;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TK_NEG:
case TK_BEGIN:
@@ -550,6 +547,20 @@
;
}
F = pred();
+ if (F.getFunctor().equals("if")) {
+ Pred c = new Pred(".conditional");
+ c.setTerms(F.getTerms());
+ F = c;
+ } else if (F.getFunctor().equals("while")) {
+ Pred c = new Pred(".loop");
+ c.setTerms(F.getTerms());
+ F = c;
+ } else if (F.getFunctor().equals("for")) {
+ Pred c = new Pred(".foreach");
+ c.setTerms(F.getTerms());
+ F = c;
+ }
+
if (F.getFunctor().indexOf(".") >= 0) {
try {
{if (true) return new InternalActionLiteral(F, curAg);}
@@ -1199,8 +1210,8 @@
finally { jj_save(0, xla); }
}
- final private boolean jj_3R_16() {
- if (jj_scan_token(27)) return true;
+ final private boolean jj_3R_15() {
+ if (jj_3R_17()) return true;
return false;
}
@@ -1212,8 +1223,8 @@
return false;
}
- final private boolean jj_3R_15() {
- if (jj_3R_17()) return true;
+ final private boolean jj_3R_16() {
+ if (jj_scan_token(27)) return true;
return false;
}
Modified: trunk/src/jason/stdlib/at.java
===================================================================
--- trunk/src/jason/stdlib/at.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/stdlib/at.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -31,7 +31,6 @@
import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
-import jason.asSyntax.Atom;
import jason.asSyntax.StringTerm;
import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
@@ -72,7 +71,7 @@
*/
public class at extends DefaultInternalAction {
- public static final Atom atAtom = new Atom(".at");
+ public static final String atAtom = ".at";
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
Modified: trunk/src/jason/stdlib/suspend.java
===================================================================
--- trunk/src/jason/stdlib/suspend.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/stdlib/suspend.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -125,7 +125,6 @@
if (i.hasTrigger(g, un)) {
suspendIntention = true;
i.setSuspended(true);
- //i.peek().removeCurrentStep();
C.getPendingIntentions().put(SELF_SUSPENDED_INT, i);
}
Modified: trunk/src/jason/stdlib/wait.java
===================================================================
--- trunk/src/jason/stdlib/wait.java 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jason/stdlib/wait.java 2008-05-18 14:57:19 UTC (rev 1298)
@@ -30,7 +30,6 @@
import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
-import jason.asSyntax.Atom;
import jason.asSyntax.InternalActionLiteral;
import jason.asSyntax.NumberTerm;
import jason.asSyntax.NumberTermImpl;
@@ -88,7 +87,7 @@
*/
public class wait extends DefaultInternalAction {
- public static final Atom waitAtom = new Atom(".wait");
+ public static final String waitAtom = ".wait";
//static Logger logger = Logger.getLogger(wait.class.getName());
@Override
Modified: trunk/src/jeditPlugin/agentSpeak.xml
===================================================================
--- trunk/src/jeditPlugin/agentSpeak.xml 2008-05-08 15:50:39 UTC (rev 1297)
+++ trunk/src/jeditPlugin/agentSpeak.xml 2008-05-18 14:57:19 UTC (rev 1298)
@@ -40,6 +40,10 @@
<END>]</END>
</SPAN>
+ <SEQ TYPE="OPERATOR">if</SEQ>
+ <SEQ TYPE="OPERATOR">while</SEQ>
+ <SEQ TYPE="OPERATOR">for</SEQ>
+
<!-- special reserved words and operators -->
<SEQ TYPE="LITERAL2">true</SEQ>
<SEQ TYPE="OPERATOR">not</SEQ>
@@ -206,6 +210,11 @@
<END>]</END>
</SPAN>
+ <SEQ TYPE="OPERATOR">if</SEQ>
+ <SEQ TYPE="OPERATOR">while</SEQ>
+ <SEQ TYPE="OPERATOR">for</SEQ>
+
+
<!-- special reserved words and operators -->
<SEQ TYPE="LITERAL2">true</SEQ>
<SEQ TYPE="OPERATOR">not</SEQ>
@@ -355,6 +364,11 @@
<END>"</END>
</SPAN>
+ <SEQ TYPE="OPERATOR">if</SEQ>
+ <SEQ TYPE="OPERATOR">while</SEQ>
+ <SEQ TYPE="OPERATOR">for</SEQ>
+
+
<!-- Reserved Terms -->
<SEQ TYPE="LITERAL2">true</SEQ>
<SEQ TYPE="LITERAL2">tell</SEQ>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|