|
From: <jom...@us...> - 2008-09-29 14:34:55
|
Revision: 1388
http://jason.svn.sourceforge.net/jason/?rev=1388&view=rev
Author: jomifred
Date: 2008-09-29 14:34:41 +0000 (Mon, 29 Sep 2008)
Log Message:
-----------
add a factory (class ASSyntax) to create and parse terms and literals,
see API doc of ASSyntax for more info.
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java
trunk/build.xml
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/Trigger.java
trunk/src/test/ASParserTest.java
Added Paths:
-----------
trunk/src/jason/asSyntax/ASSyntax.java
Modified: trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -9,6 +9,7 @@
import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.Literal;
import jason.asSyntax.LogExpr;
import jason.asSyntax.LogicalFormula;
@@ -89,7 +90,7 @@
public void addGoal(String g) {
try {
- addGoal(Literal.tryParsingLiteral(g));
+ addGoal(ASSyntax.parseLiteral(g));
} catch (Exception e) {
fail("Parsing '"+g+"' as literal for a goal failed!");
}
@@ -100,7 +101,7 @@
public void addBel(String bel) {
try {
- super.addBel(Literal.tryParsingLiteral(bel));
+ super.addBel(ASSyntax.parseLiteral(bel));
} catch (ParseException e) {
fail("Parsing '"+bel+"' as a belief!");
} catch (RevisionFailedException e) {
@@ -109,7 +110,7 @@
}
public void delBel(String bel) {
try {
- Literal l = Literal.tryParsingLiteral(bel);
+ Literal l = ASSyntax.parseLiteral(bel);
if (!l.hasSource()) {
l.addAnnot(BeliefBase.TSelf);
}
@@ -145,7 +146,7 @@
public void assertEvt(String te, int maxCycles) {
try {
- assertEvt(Trigger.tryParsingTrigger(te), maxCycles);
+ assertEvt(ASSyntax.parseTrigger(te), maxCycles);
} catch (ParseException e) {
fail("Parsing '"+te+"' as trigger failed!");
}
@@ -164,7 +165,7 @@
public void assertAct(String act, int maxCycles) {
try {
- assertAct(Structure.tryParsingStructure(act), maxCycles);
+ assertAct(ASSyntax.parseStructure(act), maxCycles);
} catch (ParseException e) {
fail("Parsing '"+act+"' as action failed!");
}
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/build.xml 2008-09-29 14:34:41 UTC (rev 1388)
@@ -239,7 +239,7 @@
</not>
</condition>
- <target name="apidocsimple" unless="dot-ok" >
+ <target name="apidocsimple" unless="dot-ok" > <!-- stylesheetfile="doc/faq/faq.css" -->
<javadoc
destdir="${basedir}/doc/api"
packagenames="jason.*"
@@ -249,7 +249,7 @@
version="true"
author="true"
windowtitle="Jason - AgentSpeak Java Interpreter"
- stylesheetfile="doc/faq/faq.css">
+ >
<classpath refid="project.classpath" />
</javadoc>
</target>
@@ -264,7 +264,7 @@
version="true"
author="true"
windowtitle="Jason - AgentSpeak Java Interpreter"
- stylesheetfile="doc/faq/faq.css">
+ >
<classpath refid="project.classpath" />
<doclet name="org.umlgraph.doclet.UmlGraphDoc" path="lib/UMLGraph.jar">
<!--param name="-inferrel"/ -->
Added: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java (rev 0)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -0,0 +1,150 @@
+package jason.asSyntax;
+
+import jason.asSyntax.parser.ParseException;
+import jason.asSyntax.parser.as2j;
+
+import java.io.StringReader;
+
+
+/**
+ Factory for objects used in Jason AgentSpeak syntax.
+
+ <p><b>Examples of Term</b>:
+ <pre>
+ import static jason.asSyntax.ASSyntax.*;
+
+ ...
+ Atom a = createAtom("a");
+ NumberTerm n = createNumber(3);
+ StringTerm s = createString("s");
+ Structure t = createStructure("p", createAtom("a")); // t = p(a)
+ ListTerm l = createList(); // empty list
+ ListTerm f = createList(createAtom("a"), createStructure("b", createNumber(5))); // f = [a,b(5)]
+
+ // or use a parsing (easier but slow)
+ Term n = parseTerm("5");
+ Term t = parseTerm("p(a)");
+ Term l = parseTerm("[a,b(5)]");
+ </pre>
+
+ <p><b>Examples of Literal</b>:
+ <pre>
+ import static jason.asSyntax.ASSyntax.*;
+
+ ...
+ // create the literal 'p'
+ Literal l1 = createLiteral("p");
+
+ // create the literal 'p(a,3)'
+ Literal l2 = createLiteral("p", createAtom("a"), createNumber(3));
+
+ // create the literal 'p(a,3)[s,"s"]'
+ Literal l3 = createLiteral("p", createAtom("a"), createNumber(3))
+ .addAnnots(createAtom("s"), createString("s"));
+
+ // create the literal '~p(a,3)[s,"s"]'
+ Literal l4 = createLiteral("p", createAtom("a"), createNumber(3))
+ .addAnnots(createAtom("s"), createString("s"))
+ .setNegated(Literal.LNeg);
+
+ // or use a parsing (easier but slow)
+ Literal l4 = parseLiteral("~p(a,3)[s]");
+ </pre>
+
+ @author Jomi
+
+ */
+public class ASSyntax {
+
+ /**
+ * Creates a new literal, the first argument is the functor (a string)
+ * and the n remainder arguments are terms. see documentation of this
+ * class for examples of use.
+ */
+ public static Literal createLiteral(String functor, Term... terms) {
+ return new LiteralImpl(functor).addTerms(terms);
+ }
+
+ /**
+ * Creates a new literal, the first argument is either Literal.LPos or Literal.LNeg,
+ * the second is the functor (a string),
+ * and the n remainder arguments are terms. see documentation of this
+ * class for examples of use.
+ */
+ public static Literal createLiteral(boolean positive, String functor, Term... terms) {
+ return new LiteralImpl(positive, functor).addTerms(terms);
+ }
+
+ /**
+ * Creates a new structure term, is the functor (a string),
+ * and the n remainder arguments are terms.
+ */
+ public static Literal createStructure(String functor, Term... terms) {
+ return new Structure(functor).addTerms(terms);
+ }
+
+ /** creates a new Atom term */
+ public static Atom createAtom(String functor) {
+ return new Atom(functor);
+ }
+
+ /** creates a new number term */
+ public static NumberTerm createNumber(double vl) {
+ return new NumberTermImpl(vl);
+ }
+
+ /** creates a new string term */
+ public static StringTerm createString(String s) {
+ return new StringTermImpl(s);
+ }
+
+ /** creates a new variable term */
+ public static VarTerm createVar(String functor) {
+ return new VarTerm(functor);
+ }
+
+ /** Creates a new list with n elements, n can be 0 */
+ public static ListTerm createList(Term... terms) {
+ ListTerm l = new ListTermImpl();
+ ListTerm tail = l;
+ for (Term t: terms)
+ tail = tail.append(t);
+ return l;
+ }
+
+
+ /** creates a new literal by parsing a string */
+ public static Literal parseLiteral(String sLiteral) throws ParseException {
+ return new as2j(new StringReader(sLiteral)).literal();
+ }
+
+ /** creates a new structure (a kind of term) by parsing a string */
+ public static Structure parseStructure(String sTerm) throws ParseException {
+ Term t = new as2j(new StringReader(sTerm)).term();
+ if (t instanceof Structure)
+ return (Structure)t;
+ else
+ return new Structure((Literal)t);
+ }
+
+ /** creates a new term by parsing a string */
+ public static Term parseTerm(String sTerm) throws ParseException {
+ return new as2j(new StringReader(sTerm)).term();
+ }
+
+ /** creates a new plan by parsing a string */
+ public static Plan parsePlan(String sPlan) throws ParseException {
+ return new as2j(new StringReader(sPlan)).plan();
+ }
+
+ /** creates a new trigger by parsing a string */
+ public static Trigger parseTrigger(String sTe) throws ParseException {
+ return new as2j(new StringReader(sTe)).trigger();
+ }
+
+ /** creates a new list by parsing a string */
+ public static ListTerm parseList(String sList) throws ParseException {
+ return new as2j(new StringReader(sList)).list();
+ }
+
+}
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -75,7 +75,7 @@
public static ListTerm parseList(String sList) {
as2j parser = new as2j(new StringReader(sList));
try {
- return (ListTerm)parser.list();
+ return parser.list();
} catch (Exception e) {
logger.log(Level.SEVERE,"Error parsing list "+sList,e);
return null;
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/src/jason/asSyntax/Literal.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -27,7 +27,6 @@
import jason.architecture.AgArch;
import jason.asSemantics.Agent;
import jason.asSemantics.Unifier;
-import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
import java.io.StringReader;
@@ -48,28 +47,12 @@
LiteralImpl -- Pred + negation. This latter class supports all the operations of
the Literal interface.
- There are useful static methods in this class to create Literals.
+ <p>There are useful static methods in class {@link ASSyntax} to create Literals.
- Examples:
- <pre>
- // create the literal 'p'
- Literal l1 = Literal.create("p");
-
- // create the literal 'p(a,3)'
- Literal l2 = Literal.create("p", new Atom(a), new NumberTermImpl(3));
-
- // create the literal 'p(a,3)[s,"s"]'
- Literal l3 = Literal.create("p", new Atom("a"), new NumberTermImpl(3))
- .addAnnots(new Atom("s"), new StringTermImpl("s"));
-
- // create the literal '~p(a,3)[s,"s"]'
- Literal l4 = Literal.create("p", new Atom("a"), new NumberTermImpl(3))
- .addAnnots(new Atom("s"), new StringTermImpl("s"))
- .setNegated(Literal.LNeg);
- </pre>
@author jomi
+ @see ASSyntax
@see Atom
@see Structure
@see Pred
@@ -88,23 +71,7 @@
protected PredicateIndicator predicateIndicatorCache = null; // to not compute it all the time (is is called many many times)
- /** creates a literal copying data from other literal */
- public static Literal create(Literal l) {
- return new LiteralImpl(l);
- }
-
- /**
- * Creates a new literal, the first argument is the functor (a string)
- * and the n remainder arguments are terms. see documentation of this
- * class for example of use.
- */
- public static Literal create(String functor, Term... terms) {
- Literal l = new LiteralImpl(functor);
- l.addTerms(terms);
- return l;
- }
-
- /** creates a new literal by parsing a string */
+ /** creates a new literal by parsing a string -- ASSyntax.parseLiteral is preferred. */
public static Literal parseLiteral(String sLiteral) {
try {
as2j parser = new as2j(new StringReader(sLiteral));
@@ -115,10 +82,6 @@
}
}
- public static Literal tryParsingLiteral(String sLiteral) throws ParseException {
- return new as2j(new StringReader(sLiteral)).literal();
- }
-
public Literal copy() {
return (Literal)clone(); // should call the clone, that is overridden in subclasses
}
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/src/jason/asSyntax/Structure.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -24,7 +24,6 @@
package jason.asSyntax;
import jason.asSemantics.Unifier;
-import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
import java.io.StringReader;
@@ -86,22 +85,15 @@
as2j parser = new as2j(new StringReader(sTerm));
try {
Term t = parser.term();
- if (t.isAtom())
- return new Structure((Atom)t);
- else
+ if (t instanceof Structure)
return (Structure)t;
+ else
+ return new Structure((Atom)t);
} catch (Exception e) {
logger.log(Level.SEVERE,"Error parsing structure " + sTerm,e);
return null;
}
}
- public static Structure tryParsingStructure(String sTerm) throws ParseException {
- Term t = new as2j(new StringReader(sTerm)).term();
- if (t.isAtom())
- return new Structure((Atom)t);
- else
- return (Structure)t;
- }
@Override
protected int calcHashCode() {
Modified: trunk/src/jason/asSyntax/Trigger.java
===================================================================
--- trunk/src/jason/asSyntax/Trigger.java 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/src/jason/asSyntax/Trigger.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -25,7 +25,6 @@
package jason.asSyntax;
import jason.asSemantics.Unifier;
-import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
import java.io.StringReader;
@@ -85,10 +84,6 @@
}
}
- public static Trigger tryParsingTrigger(String sTe) throws ParseException {
- return new as2j(new StringReader(sTe)).trigger();
- }
-
public void setTrigOp(TEOperator op) {
operator = op;
piCache = null;
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2008-09-29 10:41:26 UTC (rev 1387)
+++ trunk/src/test/ASParserTest.java 2008-09-29 14:34:41 UTC (rev 1388)
@@ -1,9 +1,15 @@
package test;
+import static jason.asSyntax.ASSyntax.createAtom;
+import static jason.asSyntax.ASSyntax.createLiteral;
+import static jason.asSyntax.ASSyntax.createNumber;
+import static jason.asSyntax.ASSyntax.createString;
import jason.architecture.AgArch;
import jason.asSemantics.Agent;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
+import jason.asSyntax.ListTerm;
import jason.asSyntax.Literal;
import jason.asSyntax.LogExpr;
import jason.asSyntax.LogicalFormula;
@@ -11,6 +17,7 @@
import jason.asSyntax.Plan;
import jason.asSyntax.PlanBody;
import jason.asSyntax.RelExpr;
+import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
import jason.infra.centralised.CentralisedAgArch;
import jason.mas2j.MAS2JProject;
@@ -214,4 +221,35 @@
}
}
}
+
+ public void testFactory() throws ParseException {
+ // create the literal 'p'
+ Literal l = createLiteral("p");
+ assertEquals("p", l.toString());
+
+ // create the literal 'p(a,3)'
+ l = createLiteral("p", createAtom("a"), createNumber(3));
+ assertEquals("p(a,3)", l.toString());
+
+ // create the literal 'p(a,3)[s,"s"]'
+ l = createLiteral("p", createAtom("a"), createNumber(3))
+ .addAnnots(createAtom("s"), createString("s"));
+ assertEquals("p(a,3)[s,\"s\"]", l.toString());
+
+ // create the literal '~p(a,3)[s,"s"]'
+ l = createLiteral(Literal.LNeg, "p", createAtom("a"), createNumber(3))
+ .addAnnots(createAtom("s"), createString("s"));
+ assertEquals("~p(a,3)[s,\"s\"]", l.toString());
+ l = ASSyntax.parseLiteral(l.toString());
+ assertEquals("~p(a,3)[s,\"s\"]", l.toString());
+
+ ListTerm ll = ASSyntax.createList(); // empty list
+ assertEquals("[]", ll.toString());
+
+ ll = ASSyntax.createList(createAtom("a"), createLiteral("b", createNumber(5)));
+ assertEquals("[a,b(5)]", ll.toString());
+
+ ll = ASSyntax.parseList(ll.toString());
+ assertEquals("[a,b(5)]", ll.toString());
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|