|
From: <jom...@us...> - 2008-03-17 23:30:57
|
Revision: 1159
http://jason.svn.sourceforge.net/jason/?rev=1159&view=rev
Author: jomifred
Date: 2008-03-17 16:30:54 -0700 (Mon, 17 Mar 2008)
Log Message:
-----------
in build.xml created to run the user project, calls user-init before init (and not before
run)
Modified Paths:
--------------
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/infra/centralised/CentralisedMASLauncherAnt.java
trunk/src/templates/build-template.xml
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2008-03-17 21:13:29 UTC (rev 1158)
+++ trunk/src/jason/asSyntax/Atom.java 2008-03-17 23:30:54 UTC (rev 1159)
@@ -131,8 +131,7 @@
if (o == this) return true;
if (o instanceof Structure) {
Structure s = (Structure)o;
- if (!getFunctor().equals(s.getFunctor())) return false;
- return s.isAtom();
+ return s.isAtom() && getFunctor().equals(s.getFunctor());
}
return false;
}
Modified: trunk/src/jason/infra/centralised/CentralisedMASLauncherAnt.java
===================================================================
--- trunk/src/jason/infra/centralised/CentralisedMASLauncherAnt.java 2008-03-17 21:13:29 UTC (rev 1158)
+++ trunk/src/jason/infra/centralised/CentralisedMASLauncherAnt.java 2008-03-17 23:30:54 UTC (rev 1159)
@@ -187,14 +187,15 @@
if (apos < 0) {
lib += " <pathelement location=\""+cp+"\"/>\n";
} else {
+ cp = cp.replaceAll("\\\\", "/");
String dir = "${basedir}";
String files = cp;
- int spos = cp.lastIndexOf(File.separator);
+ int spos = cp.lastIndexOf("/");
if (spos >= 0 && spos < apos) {
dir = cp.substring(0,spos);
files = cp.substring(spos+1);
} else {
- spos = cp.lastIndexOf(File.separator+"**");
+ spos = cp.lastIndexOf("/**");
if (spos >= 0 && spos < apos) {
dir = cp.substring(0,spos);
files = cp.substring(spos+1);
Modified: trunk/src/templates/build-template.xml
===================================================================
--- trunk/src/templates/build-template.xml 2008-03-17 21:13:29 UTC (rev 1158)
+++ trunk/src/templates/build-template.xml 2008-03-17 23:30:54 UTC (rev 1159)
@@ -33,6 +33,7 @@
<target name="init">
<mkdir dir="${build.dir}" />
+ <antcall target="user-init" />
</target>
<target name="compile" depends="init">
@@ -82,7 +83,6 @@
<target name="run" depends="compile" >
<echo message="Running project ${ant.project.name}" />
- <antcall target="user-init" />
<java classname="<PROJECT-RUNNER-CLASS>"
failonerror="true" fork="yes" dir="${basedir}" >
<classpath refid="project.classpath"/>
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2008-03-17 21:13:29 UTC (rev 1158)
+++ trunk/src/test/TermTest.java 2008-03-17 23:30:54 UTC (rev 1159)
@@ -43,6 +43,7 @@
assertFalse(t1.equals(t2));
t2.addTerm(new Atom("a"));
+ assertEquals(new Atom("a"),new Atom("a"));
assertTrue(t1.equals(t2));
assertTrue(t2.equals(t1));
assertEquals(t1.hashCode(),t2.hashCode());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2008-03-27 20:38:51
|
Revision: 1176
http://jason.svn.sourceforge.net/jason/?rev=1176&view=rev
Author: jomifred
Date: 2008-03-27 13:38:44 -0700 (Thu, 27 Mar 2008)
Log Message:
-----------
include a JUnit test to parse all .asl/.mas2j files inside demos and examples
Modified Paths:
--------------
trunk/src/jason/asSyntax/directives/FunctionRegister.java
trunk/src/jason/asSyntax/directives/Include.java
trunk/src/test/ASParserTest.java
Modified: trunk/src/jason/asSyntax/directives/FunctionRegister.java
===================================================================
--- trunk/src/jason/asSyntax/directives/FunctionRegister.java 2008-03-26 09:15:42 UTC (rev 1175)
+++ trunk/src/jason/asSyntax/directives/FunctionRegister.java 2008-03-27 20:38:44 UTC (rev 1176)
@@ -81,6 +81,8 @@
@SuppressWarnings("unchecked")
public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
+ if (outerContent == null)
+ return null;
try {
String id = ((StringTerm)directive.getTerm(0)).getString();
if (directive.getArity() == 1) {
Modified: trunk/src/jason/asSyntax/directives/Include.java
===================================================================
--- trunk/src/jason/asSyntax/directives/Include.java 2008-03-26 09:15:42 UTC (rev 1175)
+++ trunk/src/jason/asSyntax/directives/Include.java 2008-03-27 20:38:44 UTC (rev 1176)
@@ -25,9 +25,11 @@
private List<String> aslSourcePath = null;
public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
+ if (outerContent == null)
+ return null;
String file = ((StringTerm)directive.getTerm(0)).getString();
try {
- String outerPrefix = outerContent.getASLSrc(); // the source file that has the include directive
+ String outerPrefix = outerContent.getASLSrc(); // the source file that has the include directive
InputStream in;
if (outerContent != null && outerPrefix != null) {
// check if the outer is URL
@@ -69,7 +71,7 @@
logger.fine("as2j: AgentSpeak program '"+file+"' parsed successfully!");
return ag;
} catch (FileNotFoundException e) {
- logger.log(Level.SEVERE,"The included file '"+file+"' was not found! (it is being included in the agent "+outerContent.getASLSrc()+")");
+ logger.log(Level.SEVERE,"The included file '"+file+"' was not found! (it is being included in the agent '"+outerContent.getASLSrc()+"')");
} catch (Exception e) {
logger.log(Level.SEVERE,"as2j: error parsing \"" + file + "\"", e);
}
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2008-03-26 09:15:42 UTC (rev 1175)
+++ trunk/src/test/ASParserTest.java 2008-03-27 20:38:44 UTC (rev 1176)
@@ -12,7 +12,11 @@
import jason.asSyntax.RelExpr;
import jason.asSyntax.parser.as2j;
import jason.infra.centralised.CentralisedAgArch;
+import jason.mas2j.MAS2JProject;
+import jason.mas2j.parser.mas2j;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.StringReader;
import java.util.Iterator;
@@ -158,4 +162,43 @@
assertTrue(a.getPL().getPlans().size() == 5);
}
+
+ public void testParsingAllSources() {
+ parseDir(new File("./examples"));
+ parseDir(new File("./demos"));
+ parseDir(new File("./applications/jason-moise"));
+ parseDir(new File("./applications/jason-team"));
+ parseDir(new File("./doc/mini-tutorial"));
+ parseDir(new File("../Jason-applications/examples-site-jBook"));
+ parseDir(new File("../Jason-applications/Tests"));
+ }
+
+ public void parseDir(File dir) {
+ if (!dir.exists())
+ return;
+ if (dir.getName().endsWith(".svn"))
+ return;
+ File[] files = dir.listFiles();
+ if (files != null) {
+ for (File f: files) {
+ if (f.isDirectory()) {
+ parseDir(f);
+ } else if (f.getName().endsWith(MAS2JProject.AS_EXT)) {
+ try {
+ as2j parser = new as2j(new FileInputStream(f));
+ parser.agent((Agent)null);
+ } catch (Exception e) {
+ fail("Error parsing "+f);
+ }
+ } else if (f.getName().endsWith(MAS2JProject.EXT)) {
+ try {
+ mas2j parser = new mas2j(new FileInputStream(f));
+ parser.mas();
+ } catch (Exception e) {
+ fail("Error parsing "+f);
+ }
+ }
+ }
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2008-03-27 21:33:50
|
Revision: 1177
http://jason.svn.sourceforge.net/jason/?rev=1177&view=rev
Author: jomifred
Date: 2008-03-27 14:33:48 -0700 (Thu, 27 Mar 2008)
Log Message:
-----------
the grammar rule for body_literal was simplified
Modified Paths:
--------------
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/test/ASParserTest.java
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2008-03-27 20:38:44 UTC (rev 1176)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2008-03-27 21:33:48 UTC (rev 1177)
@@ -351,7 +351,7 @@
/* Plan body */
-void plan_body(ArrayList bd) : { BodyLiteral F; }
+void plan_body(List bd) : { BodyLiteral F; }
{
F=body_formula() { if (! F.getLogicalFormula().equals(Literal.LTrue)) {
bd.add(F);
@@ -362,16 +362,10 @@
}
-BodyLiteral body_formula() : { Literal A; Token k;
- BodyType formType = BodyType.action;
- Object L;
- Object rel; VarTerm v;
- }
+BodyLiteral body_formula() :
+ { BodyType formType = BodyType.action; Object B; }
{
-
- ( LOOKAHEAD(4)
- // goals and belief updates
- ( "!" { formType = BodyType.achieve; }
+ [ "!" { formType = BodyType.achieve; }
| "!!" { formType = BodyType.achieveNF; }
| "?" { formType = BodyType.test; }
| "+" { formType = BodyType.addBel; }
@@ -379,37 +373,29 @@
["+" { formType = BodyType.delAddBel; }
]
)
- )
- ( A = literal() { return new BodyLiteral(formType,A); }
- | v = var() { return new BodyLiteral(formType,v); } // used in communication "+C"
- | "(" L = log_expr() ")"
- { if (formType == BodyType.test) {
- if (L instanceof LogicalFormula)
- return new BodyLiteral(BodyType.test, (LogicalFormula)L); // used in ?(a & b)
- else
- throw new ParseException(getSourceRef(L)+" The argument in ?(<logical formula>) is not a logical formula.");
- } else {
- throw new ParseException(getSourceRef(L)+" Constructions like (<logical formula>) are possible only for test goal: ?(<logical formula>).");
- }
- }
- )
- |
- // actions or expressions
- rel = rel_expr()
- { if (rel instanceof Literal) {
- return new BodyLiteral(formType, (Literal)rel); // action
- } else if (rel instanceof RelExpr) {
- return new BodyLiteral(BodyType.constraint, (RelExpr)rel); // constraint
+ ]
+
+ B = log_expr()
+ { if (B instanceof Literal) {
+ return new BodyLiteral(formType, (Literal)B);
+ } else if (formType == BodyType.action && B instanceof RelExpr) {
+ return new BodyLiteral(BodyType.constraint, (RelExpr)B); // constraint
} else {
- throw new ParseException(getSourceRef(rel)+" A body formula should be an action or a constraint (RelExpr).");
+ if (formType == BodyType.test) {
+ if (B instanceof LogicalFormula)
+ return new BodyLiteral(BodyType.test, (LogicalFormula)B); // used in ?(a & b)
+ else
+ throw new ParseException(getSourceRef(B)+" The argument for ? is not a logical formula.");
+ } else {
+ throw new ParseException(getSourceRef(B)+" Unknown body formula.");
+ }
}
}
- )
}
/* Annotated Formulae */
-Pred pred() : { Token K; Pred p; Term t; List l; ListTerm lt;}
+Pred pred() : { Token K; Pred p; List l; ListTerm lt;}
{
(
K=<ATOM>
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2008-03-27 20:38:44 UTC (rev 1176)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2008-03-27 21:33:48 UTC (rev 1177)
@@ -469,8 +469,8 @@
}
/* Plan body */
- final public void plan_body(ArrayList bd) throws ParseException {
- BodyLiteral F;
+ final public void plan_body(List bd) throws ParseException {
+ BodyLiteral F;
F = body_formula();
if (! F.getLogicalFormula().equals(Literal.LTrue)) {
bd.add(F);
@@ -487,11 +487,13 @@
}
final public BodyLiteral body_formula() throws ParseException {
- Literal A; Token k;
- BodyType formType = BodyType.action;
- Object L;
- Object rel; VarTerm v;
- if (jj_2_2(4)) {
+ BodyType formType = BodyType.action; Object B;
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case 31:
+ case 34:
+ case 35:
+ case 36:
+ case 38:
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 31:
jj_consume_token(31);
@@ -527,75 +529,32 @@
jj_consume_token(-1);
throw new ParseException();
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case TK_TRUE:
- case TK_FALSE:
- case TK_NEG:
- case TK_BEGIN:
- case TK_END:
- case ATOM:
- A = literal();
- {if (true) return new BodyLiteral(formType,A);}
- break;
- case VAR:
- case UNNAMEDVAR:
- v = var();
- {if (true) return new BodyLiteral(formType,v);}
- break;
- case 39:
- jj_consume_token(39);
- L = log_expr();
- jj_consume_token(40);
- if (formType == BodyType.test) {
- if (L instanceof LogicalFormula)
- {if (true) return new BodyLiteral(BodyType.test, (LogicalFormula)L);} // used in ?(a & b)
- else
- {if (true) throw new ParseException(getSourceRef(L)+" The argument in ?(<logical formula>) is not a logical formula.");}
+ break;
+ default:
+ jj_la1[22] = jj_gen;
+ ;
+ }
+ B = log_expr();
+ if (B instanceof Literal) {
+ {if (true) return new BodyLiteral(formType, (Literal)B);}
+ } else if (formType == BodyType.action && B instanceof RelExpr) {
+ {if (true) return new BodyLiteral(BodyType.constraint, (RelExpr)B);} // constraint
} else {
- {if (true) throw new ParseException(getSourceRef(L)+" Constructions like (<logical formula>) are possible only for test goal: ?(<logical formula>).");}
+ if (formType == BodyType.test) {
+ if (B instanceof LogicalFormula)
+ {if (true) return new BodyLiteral(BodyType.test, (LogicalFormula)B);} // used in ?(a & b)
+ else
+ {if (true) throw new ParseException(getSourceRef(B)+" The argument for ? is not a logical formula.");}
+ } else {
+ {if (true) throw new ParseException(getSourceRef(B)+" Unknown body formula.");}
+ }
}
- break;
- default:
- jj_la1[22] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case VAR:
- case TK_TRUE:
- case TK_FALSE:
- case TK_NEG:
- case TK_BEGIN:
- case TK_END:
- case NUMBER:
- case STRING:
- case ATOM:
- case UNNAMEDVAR:
- case 35:
- case 39:
- // actions or expressions
- rel = rel_expr();
- if (rel instanceof Literal) {
- {if (true) return new BodyLiteral(formType, (Literal)rel);} // action
- } else if (rel instanceof RelExpr) {
- {if (true) return new BodyLiteral(BodyType.constraint, (RelExpr)rel);} // constraint
- } else {
- {if (true) throw new ParseException(getSourceRef(rel)+" A body formula should be an action or a constraint (RelExpr).");}
- }
- break;
- default:
- jj_la1[23] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
throw new Error("Missing return statement in function");
}
/* Annotated Formulae */
final public Pred pred() throws ParseException {
- Token K; Pred p; Term t; List l; ListTerm lt;
+ Token K; Pred p; List l; ListTerm lt;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ATOM:
K = jj_consume_token(ATOM);
@@ -607,7 +566,7 @@
K = jj_consume_token(TK_END);
break;
default:
- jj_la1[24] = jj_gen;
+ jj_la1[23] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -622,7 +581,7 @@
p.setTerms(l);
break;
default:
- jj_la1[25] = jj_gen;
+ jj_la1[24] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -631,7 +590,7 @@
p.setAnnots(lt);
break;
default:
- jj_la1[26] = jj_gen;
+ jj_la1[25] = jj_gen;
;
}
{if (true) return p;}
@@ -650,7 +609,7 @@
;
break;
default:
- jj_la1[27] = jj_gen;
+ jj_la1[26] = jj_gen;
break label_9;
}
jj_consume_token(41);
@@ -683,7 +642,7 @@
o = log_expr();
break;
default:
- jj_la1[28] = jj_gen;
+ jj_la1[27] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -717,7 +676,7 @@
;
break;
default:
- jj_la1[29] = jj_gen;
+ jj_la1[28] = jj_gen;
break label_10;
}
jj_consume_token(41);
@@ -741,18 +700,18 @@
last = last.concat((ListTerm)f);
break;
default:
- jj_la1[30] = jj_gen;
+ jj_la1[29] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[31] = jj_gen;
+ jj_la1[30] = jj_gen;
;
}
break;
default:
- jj_la1[32] = jj_gen;
+ jj_la1[31] = jj_gen;
;
}
jj_consume_token(44);
@@ -784,7 +743,7 @@
o = string();
break;
default:
- jj_la1[33] = jj_gen;
+ jj_la1[32] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -803,7 +762,7 @@
{if (true) return new LogExpr((LogicalFormula)t1,LogicalOp.or,(LogicalFormula)t2);}
break;
default:
- jj_la1[34] = jj_gen;
+ jj_la1[33] = jj_gen;
;
}
{if (true) return t1;}
@@ -820,7 +779,7 @@
{if (true) return new LogExpr((LogicalFormula)t1,LogicalOp.and,(LogicalFormula)t2);}
break;
default:
- jj_la1[35] = jj_gen;
+ jj_la1[34] = jj_gen;
;
}
{if (true) return t1;}
@@ -851,7 +810,7 @@
{if (true) return t;}
break;
default:
- jj_la1[36] = jj_gen;
+ jj_la1[35] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -887,7 +846,7 @@
op1 = string();
break;
default:
- jj_la1[37] = jj_gen;
+ jj_la1[36] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -934,7 +893,7 @@
operator = RelationalOp.literalBuilder;
break;
default:
- jj_la1[38] = jj_gen;
+ jj_la1[37] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -959,7 +918,7 @@
op2 = list();
break;
default:
- jj_la1[39] = jj_gen;
+ jj_la1[38] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -970,7 +929,7 @@
{if (true) return new RelExpr((Term)op1, operator, (Term)op2);}
break;
default:
- jj_la1[40] = jj_gen;
+ jj_la1[39] = jj_gen;
;
}
{if (true) return op1;}
@@ -995,7 +954,7 @@
op = ArithmeticOp.minus;
break;
default:
- jj_la1[41] = jj_gen;
+ jj_la1[40] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1009,7 +968,7 @@
{if (true) return new ArithExpr((NumberTerm)t1, op, (NumberTerm)t2);}
break;
default:
- jj_la1[42] = jj_gen;
+ jj_la1[41] = jj_gen;
;
}
{if (true) return t1;}
@@ -1043,7 +1002,7 @@
op = ArithmeticOp.mod;
break;
default:
- jj_la1[43] = jj_gen;
+ jj_la1[42] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1057,7 +1016,7 @@
{if (true) return new ArithExpr((NumberTerm)t1, op, (NumberTerm)t2);}
break;
default:
- jj_la1[44] = jj_gen;
+ jj_la1[43] = jj_gen;
;
}
{if (true) return t1;}
@@ -1082,7 +1041,7 @@
{if (true) return new ArithExpr((NumberTerm)t1, op, (NumberTerm)t2);}
break;
default:
- jj_la1[45] = jj_gen;
+ jj_la1[44] = jj_gen;
;
}
{if (true) return t1;}
@@ -1128,7 +1087,7 @@
{if (true) return t;}
break;
default:
- jj_la1[46] = jj_gen;
+ jj_la1[45] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1163,7 +1122,7 @@
v = new UnnamedVar(K.image);
break;
default:
- jj_la1[47] = jj_gen;
+ jj_la1[46] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1173,7 +1132,7 @@
v.setAnnots(lt);
break;
default:
- jj_la1[48] = jj_gen;
+ jj_la1[47] = jj_gen;
;
}
{if (true) return v;}
@@ -1197,377 +1156,6 @@
finally { jj_save(0, xla); }
}
- final private boolean jj_2_2(int xla) {
- jj_la = xla; jj_lastpos = jj_scanpos = token;
- try { return !jj_3_2(); }
- catch(LookaheadSuccess ls) { return true; }
- finally { jj_save(1, xla); }
- }
-
- final private boolean jj_3R_12() {
- if (jj_scan_token(31)) return true;
- return false;
- }
-
- final private boolean jj_3_2() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_12()) {
- jj_scanpos = xsp;
- if (jj_3R_13()) {
- jj_scanpos = xsp;
- if (jj_3R_14()) {
- jj_scanpos = xsp;
- if (jj_3R_15()) {
- jj_scanpos = xsp;
- if (jj_3R_16()) return true;
- }
- }
- }
- }
- xsp = jj_scanpos;
- if (jj_3R_17()) {
- jj_scanpos = xsp;
- if (jj_3R_18()) {
- jj_scanpos = xsp;
- if (jj_3R_19()) return true;
- }
- }
- return false;
- }
-
- final private boolean jj_3R_68() {
- if (jj_scan_token(35)) return true;
- return false;
- }
-
- final private boolean jj_3R_67() {
- if (jj_scan_token(34)) return true;
- return false;
- }
-
- final private boolean jj_3R_64() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_67()) {
- jj_scanpos = xsp;
- if (jj_3R_68()) return true;
- }
- return false;
- }
-
- final private boolean jj_3R_53() {
- if (jj_3R_63()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_64()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_29() {
- if (jj_scan_token(TK_FALSE)) return true;
- return false;
- }
-
- final private boolean jj_3R_62() {
- if (jj_scan_token(53)) return true;
- return false;
- }
-
- final private boolean jj_3R_28() {
- if (jj_scan_token(TK_TRUE)) return true;
- return false;
- }
-
- final private boolean jj_3R_61() {
- if (jj_scan_token(52)) return true;
- return false;
- }
-
- final private boolean jj_3R_60() {
- if (jj_scan_token(51)) return true;
- return false;
- }
-
- final private boolean jj_3R_59() {
- if (jj_scan_token(50)) return true;
- return false;
- }
-
- final private boolean jj_3R_58() {
- if (jj_scan_token(49)) return true;
- return false;
- }
-
- final private boolean jj_3R_57() {
- if (jj_scan_token(48)) return true;
- return false;
- }
-
- final private boolean jj_3R_56() {
- if (jj_scan_token(47)) return true;
- return false;
- }
-
- final private boolean jj_3R_55() {
- if (jj_scan_token(46)) return true;
- return false;
- }
-
- final private boolean jj_3R_50() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_55()) {
- jj_scanpos = xsp;
- if (jj_3R_56()) {
- jj_scanpos = xsp;
- if (jj_3R_57()) {
- jj_scanpos = xsp;
- if (jj_3R_58()) {
- jj_scanpos = xsp;
- if (jj_3R_59()) {
- jj_scanpos = xsp;
- if (jj_3R_60()) {
- jj_scanpos = xsp;
- if (jj_3R_61()) {
- jj_scanpos = xsp;
- if (jj_3R_62()) return true;
- }
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- final private boolean jj_3R_35() {
- if (jj_scan_token(TK_NEG)) return true;
- return false;
- }
-
- final private boolean jj_3R_49() {
- if (jj_3R_54()) return true;
- return false;
- }
-
- final private boolean jj_3R_48() {
- if (jj_3R_53()) return true;
- return false;
- }
-
- final private boolean jj_3R_27() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_35()) jj_scanpos = xsp;
- if (jj_3R_11()) return true;
- return false;
- }
-
- final private boolean jj_3R_23() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_27()) {
- jj_scanpos = xsp;
- if (jj_3R_28()) {
- jj_scanpos = xsp;
- if (jj_3R_29()) return true;
- }
- }
- return false;
- }
-
- final private boolean jj_3R_43() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_48()) {
- jj_scanpos = xsp;
- if (jj_3R_49()) return true;
- }
- xsp = jj_scanpos;
- if (jj_3R_50()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_40() {
- if (jj_3R_43()) return true;
- return false;
- }
-
- final private boolean jj_3R_39() {
- if (jj_scan_token(TK_NOT)) return true;
- if (jj_3R_36()) return true;
- return false;
- }
-
- final private boolean jj_3R_36() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_39()) {
- jj_scanpos = xsp;
- if (jj_3R_40()) return true;
- }
- return false;
- }
-
- final private boolean jj_3R_37() {
- if (jj_scan_token(45)) return true;
- return false;
- }
-
- final private boolean jj_3R_33() {
- if (jj_3R_36()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_37()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_34() {
- if (jj_scan_token(43)) return true;
- return false;
- }
-
- final private boolean jj_3R_25() {
- if (jj_3R_33()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_34()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_47() {
- if (jj_3R_54()) return true;
- return false;
- }
-
- final private boolean jj_3R_46() {
- if (jj_3R_53()) return true;
- return false;
- }
-
- final private boolean jj_3R_45() {
- if (jj_3R_26()) return true;
- return false;
- }
-
- final private boolean jj_3R_42() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_45()) {
- jj_scanpos = xsp;
- if (jj_3R_46()) {
- jj_scanpos = xsp;
- if (jj_3R_47()) return true;
- }
- }
- return false;
- }
-
- final private boolean jj_3R_54() {
- if (jj_scan_token(STRING)) return true;
- return false;
- }
-
- final private boolean jj_3R_32() {
- if (jj_3R_26()) return true;
- return false;
- }
-
- final private boolean jj_3R_38() {
- if (jj_3R_42()) return true;
- return false;
- }
-
- final private boolean jj_3R_26() {
- if (jj_scan_token(42)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_38()) jj_scanpos = xsp;
- if (jj_scan_token(44)) return true;
- return false;
- }
-
- final private boolean jj_3R_31() {
- if (jj_scan_token(UNNAMEDVAR)) return true;
- return false;
- }
-
- final private boolean jj_3R_30() {
- if (jj_scan_token(VAR)) return true;
- return false;
- }
-
- final private boolean jj_3R_24() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_30()) {
- jj_scanpos = xsp;
- if (jj_3R_31()) return true;
- }
- xsp = jj_scanpos;
- if (jj_3R_32()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_52() {
- if (jj_3R_25()) return true;
- return false;
- }
-
- final private boolean jj_3R_51() {
- if (jj_3R_26()) return true;
- return false;
- }
-
- final private boolean jj_3R_44() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_51()) {
- jj_scanpos = xsp;
- if (jj_3R_52()) return true;
- }
- return false;
- }
-
- final private boolean jj_3R_80() {
- if (jj_3R_23()) return true;
- return false;
- }
-
- final private boolean jj_3R_41() {
- if (jj_3R_44()) return true;
- return false;
- }
-
- final private boolean jj_3R_21() {
- if (jj_3R_26()) return true;
- return false;
- }
-
- final private boolean jj_3R_79() {
- if (jj_3R_80()) return true;
- return false;
- }
-
- final private boolean jj_3R_78() {
- if (jj_3R_24()) return true;
- return false;
- }
-
- final private boolean jj_3R_77() {
- if (jj_scan_token(39)) return true;
- if (jj_3R_25()) return true;
- return false;
- }
-
- final private boolean jj_3R_20() {
- if (jj_scan_token(39)) return true;
- if (jj_3R_41()) 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;
@@ -1576,36 +1164,6 @@
return false;
}
- final private boolean jj_3R_76() {
- if (jj_scan_token(35)) return true;
- if (jj_3R_69()) return true;
- return false;
- }
-
- final private boolean jj_3R_75() {
- if (jj_scan_token(NUMBER)) return true;
- return false;
- }
-
- final private boolean jj_3R_69() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_75()) {
- jj_scanpos = xsp;
- if (jj_3R_76()) {
- jj_scanpos = xsp;
- if (jj_3R_77()) {
- jj_scanpos = xsp;
- if (jj_3R_78()) {
- jj_scanpos = xsp;
- if (jj_3R_79()) return true;
- }
- }
- }
- }
- return false;
- }
-
final private boolean jj_3R_11() {
Token xsp;
xsp = jj_scanpos;
@@ -1617,114 +1175,27 @@
}
}
xsp = jj_scanpos;
- if (jj_3R_20()) jj_scanpos = xsp;
+ if (jj_3R_12()) jj_scanpos = xsp;
xsp = jj_scanpos;
- if (jj_3R_21()) jj_scanpos = xsp;
+ if (jj_3R_13()) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_70() {
- if (jj_scan_token(56)) return true;
+ final private boolean jj_3R_14() {
+ if (jj_scan_token(42)) return true;
return false;
}
- final private boolean jj_3R_65() {
- if (jj_3R_69()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_70()) jj_scanpos = xsp;
+ final private boolean jj_3R_13() {
+ if (jj_3R_14()) return true;
return false;
}
- final private boolean jj_3R_74() {
- if (jj_scan_token(TK_INTMOD)) return true;
- return false;
- }
-
- final private boolean jj_3R_19() {
+ final private boolean jj_3R_12() {
if (jj_scan_token(39)) return true;
- if (jj_3R_25()) return true;
- if (jj_scan_token(40)) return true;
return false;
}
- final private boolean jj_3R_73() {
- if (jj_scan_token(TK_INTDIV)) return true;
- return false;
- }
-
- final private boolean jj_3R_18() {
- if (jj_3R_24()) return true;
- return false;
- }
-
- final private boolean jj_3R_72() {
- if (jj_scan_token(55)) return true;
- return false;
- }
-
- final private boolean jj_3R_17() {
- if (jj_3R_23()) return true;
- return false;
- }
-
- final private boolean jj_3R_22() {
- if (jj_scan_token(34)) return true;
- return false;
- }
-
- final private boolean jj_3R_71() {
- if (jj_scan_token(54)) return true;
- return false;
- }
-
- final private boolean jj_3R_66() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_71()) {
- jj_scanpos = xsp;
- if (jj_3R_72()) {
- jj_scanpos = xsp;
- if (jj_3R_73()) {
- jj_scanpos = xsp;
- if (jj_3R_74()) return true;
- }
- }
- }
- return false;
- }
-
- final private boolean jj_3R_63() {
- if (jj_3R_65()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_66()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_16() {
- if (jj_scan_token(35)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_22()) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_15() {
- if (jj_scan_token(34)) return true;
- return false;
- }
-
- final private boolean jj_3R_14() {
- if (jj_scan_token(36)) return true;
- return false;
- }
-
- final private boolean jj_3R_13() {
- if (jj_scan_token(38)) return true;
- return false;
- }
-
public as2jTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
@@ -1734,7 +1205,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[48];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static {
@@ -1742,12 +1213,12 @@
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,0x800,0x10cb00,0x0,0x0,0x80000000,0x30cb80,0x3acb80,0x10c000,0x0,0x0,0x0,0x3acf80,0x0,0x200080,0x0,0x3acb80,0x3acb80,0x0,0x0,0x3acf80,0x3acb80,0x0,0x3acb80,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,0x800,0x10cb00,0x0,0x0,0x80000000,0x80000000,0x10c000,0x0,0x0,0x0,0x3acf80,0x0,0x200080,0x0,0x3acb80,0x3acb80,0x0,0x0,0x3acf80,0x3acb80,0x0,0x3acb80,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,0x0,0x0,0x20,0x4,0x5c,0x80,0x88,0x0,0x80,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,0x0,0x0,0x20,0x4,0x5c,0x5c,0x0,0x80,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[2];
+ final private JJCalls[] jj_2_rtns = new JJCalls[1];
private boolean jj_rescan = false;
private int jj_gc = 0;
@@ -1760,7 +1231,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 < 48; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1773,7 +1244,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 < 48; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1783,7 +1254,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 < 48; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1793,7 +1264,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 < 48; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1802,7 +1273,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 < 48; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1811,7 +1282,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 < 48; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -1930,7 +1401,7 @@
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 49; i++) {
+ for (int i = 0; i < 48; i++) {
if (jj...
[truncated message content] |
|
From: <jom...@us...> - 2008-04-30 15:33:36
|
Revision: 1280
http://jason.svn.sourceforge.net/jason/?rev=1280&view=rev
Author: jomifred
Date: 2008-04-30 08:33:32 -0700 (Wed, 30 Apr 2008)
Log Message:
-----------
add internal action .for
Modified Paths:
--------------
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSemantics/Circumstance.java
trunk/src/jason/asSyntax/InternalActionLiteral.java
trunk/src/jason/asSyntax/ObjectTermImpl.java
trunk/src/jason/stdlib/loop.java
trunk/src/xml/agInspection.xsl
Added Paths:
-----------
trunk/src/jason/stdlib/foreach.java
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2008-04-29 21:13:16 UTC (rev 1279)
+++ trunk/src/jason/asSemantics/Agent.java 2008-04-30 15:33:32 UTC (rev 1280)
@@ -45,6 +45,7 @@
import jason.functions.RuleToFunction;
import jason.runtime.Settings;
import jason.stdlib.conditional;
+import jason.stdlib.foreach;
import jason.stdlib.loop;
import java.io.File;
@@ -247,6 +248,8 @@
return conditional.create();
if (iaName.equals(".while"))
return loop.create();
+ if (iaName.equals(".for"))
+ return foreach.create();
if (iaName.charAt(0) == '.')
iaName = "jason.stdlib" + iaName;
InternalAction objIA = internalActions.get(iaName);
@@ -675,6 +678,8 @@
}
}
Document document = builder.newDocument();
+ document.appendChild(document.createProcessingInstruction("xml-stylesheet", "href='agInspection.xsl' type='text/xsl' "));
+
Element ag = getAsDOM(document);
document.appendChild(ag);
Modified: trunk/src/jason/asSemantics/Circumstance.java
===================================================================
--- trunk/src/jason/asSemantics/Circumstance.java 2008-04-29 21:13:16 UTC (rev 1279)
+++ trunk/src/jason/asSemantics/Circumstance.java 2008-04-30 15:33:32 UTC (rev 1280)
@@ -441,8 +441,9 @@
// intentions
Element ints = (Element) document.createElement("intentions");
Element selIntEle = null;
- if (getSelectedIntention() != null && !getSelectedIntention().isFinished()) {
- selIntEle = getSelectedIntention().getAsDOM(document);
+ Intention ci = getSelectedIntention();
+ if (ci != null && !ci.isFinished()) {
+ selIntEle = ci.getAsDOM(document);
selIntEle.setAttribute("selected", "true");
ints.appendChild(selIntEle);
}
Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java
===================================================================
--- trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-04-29 21:13:16 UTC (rev 1279)
+++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-04-30 15:33:32 UTC (rev 1280)
@@ -26,6 +26,7 @@
import jason.asSemantics.Agent;
import jason.asSemantics.InternalAction;
import jason.asSemantics.Unifier;
+import jason.stdlib.foreach;
import jason.stdlib.loop;
import java.util.Iterator;
@@ -80,7 +81,7 @@
@Override
public boolean apply(Unifier u) {
- if (this.ia != null && this.ia instanceof loop)
+ if (this.ia != null && (this.ia instanceof loop || this.ia instanceof foreach))
return false;
else
return super.apply(u);
Modified: trunk/src/jason/asSyntax/ObjectTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ObjectTermImpl.java 2008-04-29 21:13:16 UTC (rev 1279)
+++ trunk/src/jason/asSyntax/ObjectTermImpl.java 2008-04-30 15:33:32 UTC (rev 1280)
@@ -1,11 +1,15 @@
package jason.asSyntax;
+import java.lang.reflect.Method;
+
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class ObjectTermImpl extends DefaultTerm implements ObjectTerm {
private final Object o;
+ private Method mclone;
+ private boolean hasTestedClone = false;
/** Creates a new Term Wrapper for java object */
public ObjectTermImpl(Object o) {
@@ -29,12 +33,18 @@
@Override
public Object clone() {
try {
- return new ObjectTermImpl(o.getClass().getMethod("clone", (Class[])null).invoke(o, (Object[])null));
+ if (!hasTestedClone) {
+ hasTestedClone = true;
+ mclone = o.getClass().getMethod("clone", (Class[])null);
+ }
+ if (mclone != null) {
+ return new ObjectTermImpl(mclone.invoke(o, (Object[])null));
+ }
} catch (Exception e) {
- System.err.println("The object inside ObjectTerm should be clonable!");
- e.printStackTrace();
- return null;
+ //System.err.println("The object inside ObjectTerm should be clonable!");
+ //e.printStackTrace();
}
+ return this;
}
@Override
Added: trunk/src/jason/stdlib/foreach.java
===================================================================
--- trunk/src/jason/stdlib/foreach.java (rev 0)
+++ trunk/src/jason/stdlib/foreach.java 2008-04-30 15:33:32 UTC (rev 1280)
@@ -0,0 +1,96 @@
+//----------------------------------------------------------------------------
+// Copyright (C) 2003 Rafael H. Bordini, Jomi F. Hubner, et al.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// To contact the authors:
+// http://www.dur.ac.uk/r.bordini
+// http://www.inf.furb.br/~jomi
+//
+//----------------------------------------------------------------------------
+
+package jason.stdlib;
+
+import jason.JasonException;
+import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.IntendedMeans;
+import jason.asSemantics.InternalAction;
+import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.LogicalFormula;
+import jason.asSyntax.ObjectTerm;
+import jason.asSyntax.ObjectTermImpl;
+import jason.asSyntax.PlanBody;
+import jason.asSyntax.PlanBodyImpl;
+import jason.asSyntax.Structure;
+import jason.asSyntax.Term;
+import jason.asSyntax.PlanBody.BodyType;
+
+import java.util.Iterator;
+
+// TODO: comments
+public class foreach extends DefaultInternalAction {
+
+ private static InternalAction singleton = null;
+ public static InternalAction create() {
+ if (singleton == null)
+ singleton = new foreach();
+ return singleton;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
+ try {
+ IntendedMeans im = ts.getC().getSelectedIntention().peek();
+ PlanBody foria = im.getCurrentStep();
+
+ Iterator<Unifier> iu;
+
+ if (args.length != 3) {
+ // first execution of while
+ if ( !(args[0] instanceof LogicalFormula))
+ throw new JasonException("The first argument of .for must be a logical formula.");
+ if ( !args[1].isPlanBody())
+ throw new JasonException("The second argument of .for must be a plan body term.");
+
+ // get the solutions for the loop
+ LogicalFormula logExpr = (LogicalFormula)args[0];
+ iu = logExpr.logicalConsequence(ts.getAg(), un.copy());
+ ((Structure)foria.getBodyTerm()).addTerm(new ObjectTermImpl(iu));
+ } else {
+ // restore the solutions
+ iu = (Iterator<Unifier>)((ObjectTerm)args[2]).getObject();
+ }
+
+ if (iu.hasNext()) {
+ un.clear();
+ un.compose(iu.next());
+ PlanBody whattoadd = (PlanBody)args[1].clone();
+ whattoadd.add(new PlanBodyImpl(BodyType.internalAction, (Term)foria.getBodyTerm().clone()));
+ whattoadd.setAsBodyTerm(false);
+ foria.add(1,whattoadd);
+ //System.out.println("new body="+foria.getBodyNext());
+ }
+ return true;
+ } catch (ArrayIndexOutOfBoundsException e) {
+ throw new JasonException("The internal action 'for' has not received the required arguments.");
+ } catch (JasonException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new JasonException("Error in internal action 'for': " + e, e);
+ }
+ }
+}
Modified: trunk/src/jason/stdlib/loop.java
===================================================================
--- trunk/src/jason/stdlib/loop.java 2008-04-29 21:13:16 UTC (rev 1279)
+++ trunk/src/jason/stdlib/loop.java 2008-04-30 15:33:32 UTC (rev 1280)
@@ -53,8 +53,6 @@
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
try {
- if ( !(args[0] instanceof LogicalFormula))
- throw new JasonException("The first argument of .while must be a logical formula.");
IntendedMeans im = ts.getC().getSelectedIntention().peek();
PlanBody whileia = im.getCurrentStep();
@@ -62,33 +60,33 @@
// store a backup of the unifier for the next iteration
// if the IA has a backup unifier, use that (it is an object term)
- if (args.length == 3) {
+ if (args.length != 3) {
+ // first execution of while
+ if ( !(args[0] instanceof LogicalFormula))
+ throw new JasonException("The first argument of .while must be a logical formula.");
+ if ( !args[1].isPlanBody())
+ throw new JasonException("The second argument of .while must be a plan body term.");
+
+ // add backup unifier in the IA
+ ((Structure)whileia.getBodyTerm()).addTerm(new ObjectTermImpl(un.clone()));
+ } else {
// restore the unifier of previous iterations
Unifier ubak = (Unifier)((ObjectTerm)args[2]).getObject();
un.clear();
un.compose(ubak);
- } else {
- // add backup unifier in the IA
- //ubak = (Unifier)un.clone();
- ((Structure)whileia.getBodyTerm()).addTerm(new ObjectTermImpl(un.clone()));
}
- LogicalFormula logExpr = (LogicalFormula)args[0].clone();
- logExpr.apply(un); // need to apply since the internal action literal for while does not apply
- Iterator<Unifier> iu = logExpr.logicalConsequence(ts.getAg(), un); //(Unifier)un.clone());
+ LogicalFormula logExpr = (LogicalFormula)args[0]; //.clone();
+ //logExpr.apply(un); // need to apply since the internal action literal for while does not apply
+ Iterator<Unifier> iu = logExpr.logicalConsequence(ts.getAg(), un);
if (iu.hasNext()) {
- if ( !args[1].isPlanBody())
- throw new JasonException("The second argument of .while must be a plan body term.");
un.compose(iu.next());
PlanBody whattoadd = (PlanBody)args[1]; //.clone();
whattoadd.add(new PlanBodyImpl(BodyType.internalAction, (Term)whileia.getBodyTerm().clone())); //(PlanBody)whileia.clone()); // add the while after
whattoadd.setAsBodyTerm(false);
- if (whileia.getPlanSize() == 1)
- whileia.add(whattoadd);
- else
- whileia.add(1,whattoadd);
+ whileia.add(1,whattoadd);
//System.out.println("new body="+whileia.getBodyNext());
}
return true;
Modified: trunk/src/xml/agInspection.xsl
===================================================================
--- trunk/src/xml/agInspection.xsl 2008-04-29 21:13:16 UTC (rev 1279)
+++ trunk/src/xml/agInspection.xsl 2008-04-30 15:33:32 UTC (rev 1280)
@@ -27,8 +27,8 @@
<xsl:param name="show-mb" select="'true'" />
<xsl:param name="show-plan" select="'true'" />
<xsl:param name="show-int" select="'true'" />
- <xsl:param name="show-plan-details" select="'false'" />
- <xsl:param name="show-int-details" select="'false'" />
+ <xsl:param name="show-plan-details" select="'true'" />
+ <xsl:param name="show-int-details" select="'true'" />
<xsl:output method="html" />
<xsl:strip-space elements="*" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2008-06-24 15:44:49
|
Revision: 1343
http://jason.svn.sourceforge.net/jason/?rev=1343&view=rev
Author: jomifred
Date: 2008-06-24 08:20:36 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
fix the bug with return variables in "call" rules/plans
Modified Paths:
--------------
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSemantics/VarsCluster.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/DefaultTerm.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/Term.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/test/VarTermTest.java
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSemantics/Agent.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -360,7 +360,7 @@
public void addInitialGoalsInTS() {
for (Literal g: initialGoals) {
- g.makeVarsAnnon();
+ g.makeVarsAnnon(null);
if (! g.hasSource())
g.addAnnot(BeliefBase.TSelf);
getTS().getC().addAchvGoal(g,Intention.EmptyInt);
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -467,7 +467,7 @@
}
// free variables in an event cannot conflict with those in the plan
body = (Literal)body.clone();
- body.makeVarsAnnon();
+ body.makeVarsAnnon(null);
conf.C.addAchvGoal(body, conf.C.SI);
confP.step = State.StartRC;
break;
@@ -658,7 +658,7 @@
// they are anonymous)
Literal tel = topIM.getPlan().getTrigger().getLiteral();
tel.apply(topIM.unif);
- tel.makeVarsAnnon();
+ tel.makeVarsAnnon(topIM.unif);
im.unif.unifies(tel, g);
}
}
Modified: trunk/src/jason/asSemantics/VarsCluster.java
===================================================================
--- trunk/src/jason/asSemantics/VarsCluster.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSemantics/VarsCluster.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -30,6 +30,7 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.util.TreeSet;
import java.util.logging.Logger;
import org.w3c.dom.Document;
@@ -79,7 +80,7 @@
if (vl == null) {
// v1 has no value
if (vars == null) {
- vars = new HashSet<VarTerm>();
+ vars = new TreeSet<VarTerm>();
}
vars.add(vt);
} else if (vl instanceof VarsCluster) {
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/Atom.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -155,6 +155,7 @@
@Override public void makeTermsAnnon() { }
@Override public void makeVarsAnnon() { }
+ @Override public void makeVarsAnnon(Unifier un) { }
@Override
protected int calcHashCode() {
Modified: trunk/src/jason/asSyntax/DefaultTerm.java
===================================================================
--- trunk/src/jason/asSyntax/DefaultTerm.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/DefaultTerm.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -53,6 +53,7 @@
}
public boolean isVar() { return false; }
+ public boolean isUnnamedVar() { return false; }
public boolean isLiteral() { return false; }
public boolean isRule() { return false; }
public boolean isList() { return false; }
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/Literal.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -165,7 +165,7 @@
Unifier ruleUn = ruleIt.next(); // evaluation result
Literal rhead = rule.headClone();
rhead.apply(ruleUn);
- rhead.makeVarsAnnon();
+ rhead.makeVarsAnnon(ruleUn);
Unifier unC = un.copy();
if (unC.unifiesNoUndo(Literal.this, rhead)) {
@@ -187,7 +187,7 @@
if (cloneAnnon == null) {
cloneAnnon = (Literal)Literal.this.clone();
cloneAnnon.apply(un);
- cloneAnnon.makeVarsAnnon();
+ cloneAnnon.makeVarsAnnon(null);
}
Unifier ruleUn = new Unifier();
if (ruleUn.unifiesNoUndo(cloneAnnon, rule)) { // the rule head unifies with the literal
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/Pred.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -417,7 +417,7 @@
* @param changes is the map of replacements
*/
@Override
- protected void makeVarsAnnon(Map<VarTerm,UnnamedVar> changes) {
+ protected void makeVarsAnnon(Unifier un, Map<VarTerm,UnnamedVar> changes) {
if (annots != null) {
Iterator<ListTerm> i = annots.listTermIterator();
while (i.hasNext()) {
@@ -427,16 +427,17 @@
// replace ta to an unnamed var
UnnamedVar uv = changes.get(ta);
if (uv == null) {
- uv = new UnnamedVar();
+ VarTerm vt = (VarTerm)ta;
+ uv = vt.preferredUnnamedVar(un);
changes.put((VarTerm)ta, uv);
}
lt.setTerm(uv);
} else if (ta.isStructure()) {
- ((Structure)ta).makeVarsAnnon(changes);
+ ((Structure)ta).makeVarsAnnon(un,changes);
}
}
}
- super.makeVarsAnnon(changes);
+ super.makeVarsAnnon(un, changes);
}
@Override
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/Structure.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -310,15 +310,17 @@
/** Replaces all variables of the term for unnamed variables (_). */
public void makeVarsAnnon() {
- makeVarsAnnon(new HashMap<VarTerm,UnnamedVar>());
+ makeVarsAnnon(null, new HashMap<VarTerm,UnnamedVar>());
}
- /**
- * Replaces all variables of the term for unnamed variables (_).
- *
- * @param changes is the map of replacements
- */
- protected void makeVarsAnnon(Map<VarTerm,UnnamedVar> changes) {
+ /** Replaces all variables of the term for unnamed variables (_).
+ if un != null, unnamed vars unified to the var are preferred */
+ public void makeVarsAnnon(Unifier un) {
+ makeVarsAnnon(un, new HashMap<VarTerm,UnnamedVar>());
+ }
+
+ /** change all vars by unnamed vars, if un != null, unnamed vars unified to the var are preferred */
+ protected void makeVarsAnnon(Unifier un, Map<VarTerm,UnnamedVar> changes) {
final int size = getArity();
for (int i=0; i<size; i++) {
Term ti = getTerm(i);
@@ -326,14 +328,15 @@
// replace ti to an unnamed var
UnnamedVar uv = changes.get(ti);
if (uv == null) {
- uv = new UnnamedVar();
+ VarTerm vt = (VarTerm)ti;
+ uv = vt.preferredUnnamedVar(un);
changes.put((VarTerm)ti, uv);
}
setTerm(i,uv);
} else if (ti.isStructure()) {
Structure tis = (Structure)ti;
if (tis.hasTerm()) {
- tis.makeVarsAnnon(changes);
+ tis.makeVarsAnnon(un, changes);
}
}
}
Modified: trunk/src/jason/asSyntax/Term.java
===================================================================
--- trunk/src/jason/asSyntax/Term.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/Term.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -12,6 +12,7 @@
public interface Term extends Cloneable, Comparable<Term>, Serializable, ToDOM {
public boolean isVar();
+ public boolean isUnnamedVar();
public boolean isLiteral();
public boolean isRule();
public boolean isList();
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/jason/asSyntax/VarTerm.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -53,8 +53,6 @@
private Term value = null;
- private String unnamedId = null; // set when transformed in unnamed var
-
public VarTerm(String s) {
super(s);
if (s != null && Character.isLowerCase(s.charAt(0))) {
@@ -81,7 +79,6 @@
// do not call constructor with term parameter!
VarTerm t = new VarTerm(super.getFunctor());
t.setSrc(this);
- t.unnamedId = this.unnamedId;
if (hasAnnot())
t.setAnnots((ListTerm) getAnnots().clone());
return t;
@@ -94,22 +91,9 @@
}
public boolean isUnnamedVar() {
- return unnamedId != null;
+ return false;
}
- /** change the functor of the var to _ */
- public void setUnnamed() {
- unnamedId = UnnamedVar.createNewName();
- }
- public void setUnnamed(String id) {
- unnamedId = id;
- }
-
- /** undo the setUnanamed() */
- public void setNamed() {
- unnamedId = null;
- }
-
@Override
public boolean isGround() {
return value != null && value.isGround();
@@ -161,6 +145,19 @@
return false;
}
+ protected UnnamedVar preferredUnnamedVar(Unifier un) {
+ if (un != null) {
+ // check if I have a var cluster with another unnamed var there
+ // and then prefer that unnamed var instead of a new one
+ Term vl = un.get(this);
+ if (vl != null && vl instanceof VarsCluster)
+ for (VarTerm v: (VarsCluster)vl)
+ if (v.isUnnamedVar())
+ return (UnnamedVar)v;
+ }
+ return new UnnamedVar();
+ }
+
/**
* returns the value of this var.
*/
@@ -208,10 +205,7 @@
@Override
public String getFunctor() {
if (value == null) {
- if (unnamedId != null)
- return unnamedId;
- else
- return super.getFunctor();
+ return super.getFunctor();
} else if (value.isStructure()) {
return ((Structure)getValue()).getFunctor();
} else {
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2008-06-24 13:15:06 UTC (rev 1342)
+++ trunk/src/test/VarTermTest.java 2008-06-24 15:20:36 UTC (rev 1343)
@@ -484,15 +484,5 @@
x.apply(u);
assertEquals(x.toString(), "10");
- }
-
- public void testTransformUnnamed() {
- VarTerm x = new VarTerm("X");
- assertFalse(x.isUnnamedVar());
- x.setUnnamed();
- assertTrue(x.isUnnamedVar());
- assertFalse("X".equals(x.toString()));
- x.setNamed();
- assertTrue("X".equals(x.toString()));
- }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|