|
From: <jom...@us...> - 2014-06-02 21:28:27
|
Revision: 1784
http://sourceforge.net/p/jason/svn/1784
Author: jomifred
Date: 2014-06-02 21:28:22 +0000 (Mon, 02 Jun 2014)
Log Message:
-----------
improve mind inspector (option to hide annotations, useful with cartaga)
Modified Paths:
--------------
trunk/src/jason/architecture/MindInspectorAgArch.java
trunk/src/jason/control/ExecutionControlGUI.java
trunk/src/jason/jeditplugin/Config.java
trunk/src/jason/util/asl2xml.java
trunk/src/xml/agInspection.xsl
Modified: trunk/src/jason/architecture/MindInspectorAgArch.java
===================================================================
--- trunk/src/jason/architecture/MindInspectorAgArch.java 2014-06-02 18:02:23 UTC (rev 1783)
+++ trunk/src/jason/architecture/MindInspectorAgArch.java 2014-06-02 21:28:22 UTC (rev 1784)
@@ -26,6 +26,8 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.NumberTerm;
import jason.asSyntax.Structure;
+import jason.control.ExecutionControlGUI;
+import jason.jeditplugin.Config;
import jason.util.asl2html;
import jason.util.asl2xml;
@@ -37,8 +39,10 @@
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
@@ -52,6 +56,8 @@
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
import org.w3c.dom.Document;
@@ -63,16 +69,23 @@
// variables for mind inspector
protected boolean hasMindInspectorByCycle = false;
protected int updateInterval = 0;
- protected static JFrame mindInspectorFrame = null;
- protected static JTabbedPane mindInspectorTab = null;
- protected JTextPane mindInspectorPanel = null;
- protected JSlider mindInspectorHistorySlider = null;
- protected JCheckBox mindInspectorFreeze = null;
- protected List<String> mindInspectorHistory = null;
- protected asl2xml mindInspectorTransformer = null;
+ protected static JFrame mindInspectorFrame = null;
+ protected static JTabbedPane mindInspectorTab = null;
+ protected JTextPane mindInspectorPanel = null;
+ protected JSlider mindInspectorHistorySlider = null;
+ protected JCheckBox mindInspectorFreeze = null;
+ protected List<Document> mindInspectorHistory = null;
+ protected asl2xml mindInspectorTransformer = null;
- protected String mindInspectorDirectory;
+ protected String mindInspectorDirectory;
+ // Which item is to be shown in HTML interface
+ Map<String,Boolean> show = new HashMap<String,Boolean>();
+
+ // what is currently shown
+ Document agState = null;
+
+
@Override
public void init() {
setupMindInspector(getTS().getSettings().getUserParameter("mindinspector"));
@@ -92,7 +105,7 @@
@Override
public void reasoningCycleStarting() {
if (hasMindInspectorByCycle)
- updateMindInspector();
+ addAgState();
super.reasoningCycleStarting();
}
@@ -128,7 +141,7 @@
try {
while (isRunning()) {
Thread.sleep(updateInterval);
- updateMindInspector();
+ addAgState();
}
} catch (Exception e) {
e.printStackTrace();
@@ -149,8 +162,8 @@
String format = "text/html";
if (mindInspectorFrame == null) { // Initiate the common window
- mindInspectorFrame = new JFrame("Mind Inspector");
- mindInspectorTab = new JTabbedPane();
+ mindInspectorFrame = new JFrame(ExecutionControlGUI.title);
+ mindInspectorTab = new JTabbedPane(JTabbedPane.LEFT);
mindInspectorFrame.getContentPane().add(mindInspectorTab);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
mindInspectorFrame.setBounds(100, 200, (int)((screenSize.width-100)*0.7), (int)((screenSize.height-100)*0.9));
@@ -160,13 +173,27 @@
mindInspectorPanel = new JTextPane();
mindInspectorPanel.setEditable(false);
mindInspectorPanel.setContentType(format);
+ mindInspectorPanel.addHyperlinkListener(new HyperlinkListener() {
+ public void hyperlinkUpdate(HyperlinkEvent evt) {
+ hyperLink(evt);
+ }
+ });
+ show.put("bels", true);
+ show.put("annots", Config.get().getBoolean(Config.SHOW_ANNOTS));
+ show.put("rules", false);
+ show.put("evt", true);
+ show.put("mb", false);
+ show.put("int", false);
+ show.put("int-details", false);
+ show.put("plan", false);
+ show.put("plan-details", false);
// get history
boolean hasHistory = sConf.getArity() == 3 && sConf.getTerm(2).toString().equals("history");
if (! hasHistory) {
mindInspectorTab.add(getAgName(), new JScrollPane(mindInspectorPanel));
} else {
- mindInspectorHistory = new ArrayList<String>();
+ mindInspectorHistory = new ArrayList<Document>();
JPanel pHistory = new JPanel(new BorderLayout());//new FlowLayout(FlowLayout.CENTER));
pHistory.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Agent History", TitledBorder.LEFT, TitledBorder.TOP));
mindInspectorHistorySlider = new JSlider();
@@ -182,7 +209,7 @@
public void stateChanged(ChangeEvent e) {
try {
int c = (int)mindInspectorHistorySlider.getValue();
- mindInspectorPanel.setText(mindInspectorHistory.get(c));
+ showAgState(mindInspectorHistory.get(c));
} catch (Exception e2) { }
}
});
@@ -205,6 +232,26 @@
}
}
+ private void hyperLink(HyperlinkEvent evt) {
+ if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+ String uri = "show?";
+ int pos = evt.getDescription().indexOf(uri);
+ if (pos >= 0) {
+ String par = evt.getDescription().substring(pos+uri.length());
+ show.put(par,true);
+ } else {
+ uri = "hide?";
+ pos = evt.getDescription().indexOf(uri);
+ if (pos >= 0) {
+ String par = evt.getDescription().substring(pos+uri.length());
+ show.put(par,false);
+ }
+ }
+ showAgState(agState);
+ }
+ }
+
+
private void setupSlider() {
int size = mindInspectorHistory.size()-1;
@@ -246,22 +293,22 @@
}
- private String previousText = "";
+ private String lastHistoryText = "";
private int fileCounter = 0;
- protected void updateMindInspector() {
+
+ protected void addAgState() {
try {
- Document agState = getTS().getAg().getAgState(); // the XML representation of the agent's mind
- String sMind = mindInspectorTransformer.transform(agState); // transform to HTML
- if (sMind.equals(previousText))
- return; // nothing to log
- previousText = sMind;
+ Document state = getTS().getAg().getAgState(); // the XML representation of the agent's mind
+ String sMind = getAgStateAsString(state, true);
+ if (sMind.equals(lastHistoryText))
+ return;
+ lastHistoryText = sMind;
if (mindInspectorPanel != null) { // output on GUI
- if (mindInspectorFreeze == null || !mindInspectorFreeze.isSelected()) {
- mindInspectorPanel.setText(sMind); // show the HTML in the screen
- }
+ if (mindInspectorFreeze == null || !mindInspectorFreeze.isSelected())
+ showAgState(state);
if (mindInspectorHistory != null) {
- mindInspectorHistory.add(sMind);
+ mindInspectorHistory.add(state);
setupSlider();
mindInspectorHistorySlider.setValue(mindInspectorHistory.size()-1);
}
@@ -275,4 +322,38 @@
e.printStackTrace();
}
}
+
+ private String previousShownText = "";
+ /** show current agent state */
+ void showAgState(Document state) { // in GUI
+ if (state != null) {
+ try {
+ String sMind = getAgStateAsString(state, false);
+ if (sMind.equals(previousShownText))
+ return; // nothing to log
+ previousShownText = sMind;
+ agState = state;
+ mindInspectorPanel.setText(sMind); // show the HTML in the screen
+ } catch (Exception e) {
+ mindInspectorPanel.setText("Error in XML transformation!" + e);
+ e.printStackTrace();
+ }
+ }
+ }
+
+ String getAgStateAsString(Document ag, boolean full) { // full means with show all
+ try {
+ for (String p: show.keySet())
+ if (full)
+ mindInspectorTransformer.setParameter("show-"+p, "true");
+ else
+ mindInspectorTransformer.setParameter("show-"+p, show.get(p)+"");
+ return mindInspectorTransformer.transform(ag); // transform to HTML
+ } catch (Exception e) {
+ mindInspectorPanel.setText("Error in XML transformation!" + e);
+ e.printStackTrace();
+ return "Error XML transformation (MindInspector)";
+ }
+ }
+
}
Modified: trunk/src/jason/control/ExecutionControlGUI.java
===================================================================
--- trunk/src/jason/control/ExecutionControlGUI.java 2014-06-02 18:02:23 UTC (rev 1783)
+++ trunk/src/jason/control/ExecutionControlGUI.java 2014-06-02 21:28:22 UTC (rev 1784)
@@ -24,6 +24,7 @@
package jason.control;
import jason.infra.centralised.RunCentralisedMAS;
+import jason.jeditplugin.Config;
import jason.util.asl2html;
import jason.util.asl2tex;
import jason.util.asl2xml;
@@ -124,7 +125,7 @@
// Which item is to be shown in HTML interface
Map<String,Boolean> show = new HashMap<String,Boolean>();
- static String title = ":: Jason Mind Inspector ::";
+ public static String title = ":: Jason Mind Inspector ::";
void initComponents() {
frame = new JFrame(title);
@@ -305,6 +306,7 @@
show.put("int-details", false);
show.put("plan", false);
show.put("plan-details", false);
+ show.put("annots", Config.get().getBoolean(Config.SHOW_ANNOTS));
}
void setListOfAgsFromInfra() {
Modified: trunk/src/jason/jeditplugin/Config.java
===================================================================
--- trunk/src/jason/jeditplugin/Config.java 2014-06-02 18:02:23 UTC (rev 1783)
+++ trunk/src/jason/jeditplugin/Config.java 2014-06-02 21:28:22 UTC (rev 1784)
@@ -77,6 +77,9 @@
public static final String CHECK_VERSION = "checkLatestVersion";
public static final String WARN_SING_VAR = "warnSingletonVars";
+ public static final String SHOW_ANNOTS = "showAnnots";
+
+
public static final String jacamoHomeProp = "JaCaMoHome";
public static final String SHORT_UNNAMED_VARS = "shortUnnamedVars";
@@ -305,7 +308,12 @@
if (getProperty(JADE_RMA) == null) {
put(JADE_RMA, "true");
}
-
+
+ // show annots
+ if (getProperty(SHOW_ANNOTS) == null) {
+ put(SHOW_ANNOTS, "true");
+ }
+
// Default infrastructures
put("infrastructure.Centralised", CentralisedFactory.class.getName());
put("infrastructure.Jade", JadeFactory.class.getName());
Modified: trunk/src/jason/util/asl2xml.java
===================================================================
--- trunk/src/jason/util/asl2xml.java 2014-06-02 18:02:23 UTC (rev 1783)
+++ trunk/src/jason/util/asl2xml.java 2014-06-02 21:28:22 UTC (rev 1784)
@@ -81,6 +81,10 @@
return transCache;
}
+ public void setParameter(String name, Object value) {
+ if (transCache != null)
+ transCache.setParameter(name, value);
+ }
TransformerFactory fac = null;
TransformerFactory getFactory() throws Exception {
Modified: trunk/src/xml/agInspection.xsl
===================================================================
--- trunk/src/xml/agInspection.xsl 2014-06-02 18:02:23 UTC (rev 1783)
+++ trunk/src/xml/agInspection.xsl 2014-06-02 21:28:22 UTC (rev 1784)
@@ -21,12 +21,13 @@
<xsl:param name="var" select="'rgb(0, 0, 200)'" />
<xsl:param name="string" select="'rgb(0, 0, 250)'" />
- <xsl:param name="show-bels" select="'true'" />
- <xsl:param name="show-rules" select="'true'" />
- <xsl:param name="show-evt" select="'true'" />
- <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-bels" select="'true'" />
+ <xsl:param name="show-annots" select="'true'" />
+ <xsl:param name="show-rules" select="'true'" />
+ <xsl:param name="show-evt" select="'true'" />
+ <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="'true'" />
<xsl:param name="show-int-details" select="'true'" />
@@ -52,6 +53,14 @@
<xsl:apply-templates select="circumstance/actions" />
<!-- xsl:apply-templates select="plans" /-->
+ <tr style="{$trh-style}">
+ <xsl:call-template name="hideshow">
+ <xsl:with-param name="show" select="$show-annots" />
+ <xsl:with-param name="item" select="'annots'" />
+ <xsl:with-param name="ds" select="'Annotations'" />
+ </xsl:call-template>
+ <th/>
+ </tr>
</table>
</html>
</xsl:template>
@@ -61,8 +70,7 @@
<xsl:param name="show" select="'false'" />
<xsl:param name="item" select="'none'" />
<xsl:param name="ds" select="'none'" />
- <xsl:if test="$show='true'">
-
+ <xsl:if test="$show='true'">
<th valign="top" style="{$th-style}">
<hr/>
<a href="hide?{$item}" style="text-decoration: none">
@@ -280,14 +288,17 @@
<xsl:if test="$show-int-details='true'">
<!-- td valign="top" style="{$td-style}" -->
<br/>
- <xsl:apply-templates select="plan"/>
+
+ <font size="-2">
+ <pre> <- ... <xsl:apply-templates select="body"/> </pre>
+ </font>
<!-- /td -->
</xsl:if>
</td>
<xsl:if test="$show-int-details='true'">
<td valign="top" style="{$td-style}">
- <xsl:text> </xsl:text><xsl:text> </xsl:text>
+ <br/>
<xsl:apply-templates select="unifier"/>
</td>
</xsl:if>
@@ -550,11 +561,24 @@
</xsl:template>
<xsl:template match="annotations">
+ <xsl:if test="$show-annots='true'">
<span style="color: rgb(0 ,190, 0)">
<sub>
<xsl:apply-templates />
</sub>
- </span>
+ </span>
+ </xsl:if>
+ <xsl:if test="$show-annots='false'">
+ <xsl:if test="count(list-term) > 0">
+ <sub>
+ <span style="color: rgb(0 ,0, 200)">
+ <a href="show?annots" style="text-decoration: none">
+ <xsl:text>[...]</xsl:text>
+ </a>
+ </span>
+ </sub>
+ </xsl:if>
+ </xsl:if>
</xsl:template>
<xsl:template match="var-term">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2014-08-21 23:41:51
|
Revision: 1796
http://sourceforge.net/p/jason/svn/1796
Author: jomifred
Date: 2014-08-21 23:41:49 +0000 (Thu, 21 Aug 2014)
Log Message:
-----------
add useful method (for jacamo) in classparameters
Modified Paths:
--------------
trunk/src/jason/mas2j/ClassParameters.java
trunk/src/test/MAS2JParserTest.java
Modified: trunk/src/jason/mas2j/ClassParameters.java
===================================================================
--- trunk/src/jason/mas2j/ClassParameters.java 2014-08-19 11:32:39 UTC (rev 1795)
+++ trunk/src/jason/mas2j/ClassParameters.java 2014-08-21 23:41:49 UTC (rev 1796)
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+
import jason.asSyntax.*;
/**
@@ -73,6 +74,33 @@
}
return p;
}
+
+ public Object[] getTypedParametersArray() {
+ Object[] p = new Object[parameters.size()];
+ int i=0;
+ for (String s: parameters) {
+ s = removeQuotes(s);
+ try {
+ p[i] = Integer.parseInt(s);
+ } catch (Exception e) {
+ try {
+ p[i] = Double.parseDouble(s);
+ } catch (Exception e3) {
+ if (s.equals("true"))
+ p[i] = true;
+ else if (s.equals("false"))
+ p[i] = false;
+ else
+ p[i] = s;
+ }
+ }
+
+ i++;
+ }
+ return p;
+ }
+
+
/** returns parameters with space as separator */
public String getParametersStr(String sep) {
StringBuilder out = new StringBuilder();
Modified: trunk/src/test/MAS2JParserTest.java
===================================================================
--- trunk/src/test/MAS2JParserTest.java 2014-08-19 11:32:39 UTC (rev 1795)
+++ trunk/src/test/MAS2JParserTest.java 2014-08-21 23:41:49 UTC (rev 1796)
@@ -1,6 +1,8 @@
package test;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.Literal;
+import jason.asSyntax.Structure;
import jason.bb.ChainBB;
import jason.mas2j.ClassParameters;
import jason.mas2j.MAS2JProject;
@@ -78,9 +80,7 @@
ChainBB bb = new ChainBB();
bb.init(null, project.getAg("bob").getBBClass().getParametersArray());
- /*
-
- bb.add(Literal.parseLiteral("b(1)"));*/
+ bb.add(Literal.parseLiteral("b(1)"));
}
public void testClassDef1() throws ParseException {
@@ -90,11 +90,14 @@
assertEquals("my.Arch", c.getClassName());
assertEquals(1,c.getParametersArray().length);
}
- public void testClassDef2() throws ParseException {
+ public void testClassDef2() throws ParseException, jason.asSyntax.parser.ParseException {
String archClass = "my.Arch()";
mas2j parser = new mas2j(new StringReader(archClass));
ClassParameters c = parser.classDef();
assertEquals("my.Arch", c.getClassName());
assertEquals(0,c.getParametersArray().length);
+
+ Structure s = ASSyntax.parseStructure(c.toString()); // a classDef should be parsed as a structure
+ assertEquals("my.Arch", s.toString());
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2014-10-17 15:44:15
|
Revision: 1815
http://sourceforge.net/p/jason/svn/1815
Author: jomifred
Date: 2014-10-17 15:44:12 +0000 (Fri, 17 Oct 2014)
Log Message:
-----------
improve compareTo methods to profit the performance of Java 8 hash maps
Modified Paths:
--------------
trunk/src/jason/asSemantics/Intention.java
trunk/src/jason/asSyntax/PredicateIndicator.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSemantics/Intention.java
===================================================================
--- trunk/src/jason/asSemantics/Intention.java 2014-10-07 18:23:22 UTC (rev 1814)
+++ trunk/src/jason/asSemantics/Intention.java 2014-10-17 15:44:12 UTC (rev 1815)
@@ -167,6 +167,9 @@
public int compareTo(Intention o) {
if (o.atomicCount > this.atomicCount) return 1;
if (this.atomicCount > o.atomicCount) return -1;
+
+ if (o.id > this.id) return 1;
+ if (this.id > o.id) return -1;
return 0;
}
@@ -178,7 +181,7 @@
}
public int hashCode() {
- return String.valueOf(id).hashCode();
+ return new Integer(id).hashCode();
}
public Intention clone() {
Modified: trunk/src/jason/asSyntax/PredicateIndicator.java
===================================================================
--- trunk/src/jason/asSyntax/PredicateIndicator.java 2014-10-07 18:23:22 UTC (rev 1814)
+++ trunk/src/jason/asSyntax/PredicateIndicator.java 2014-10-17 15:44:12 UTC (rev 1815)
@@ -7,7 +7,7 @@
*
* @author jomi
*/
-public final class PredicateIndicator implements Serializable {
+public final class PredicateIndicator implements Comparable<PredicateIndicator>, Serializable {
private final String functor;
private final int arity;
@@ -47,6 +47,15 @@
return hash;
}
+ @Override
+ public int compareTo(PredicateIndicator pi) {
+ int c = this.functor.compareTo(pi.functor);
+ if (c != 0) return c;
+ if (pi.arity > this.arity) return -1;
+ if (this.arity > pi.arity) return 1;
+ return 0;
+ }
+
private int calcHash() {
final int PRIME = 31;
int t = PRIME * arity;
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2014-10-07 18:23:22 UTC (rev 1814)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2014-10-17 15:44:12 UTC (rev 1815)
@@ -362,12 +362,13 @@
}
/** a literal that uses equalsAsTerm for equals */
- final class LiteralWrapper {
+ final class LiteralWrapper implements Comparable<LiteralWrapper> {
final private Literal l;
public LiteralWrapper(Literal l) { this.l = l; }
public int hashCode() { return l.hashCode(); }
public boolean equals(Object o) { return o instanceof LiteralWrapper && l.equalsAsStructure(((LiteralWrapper)o).l); }
public String toString() { return l.toString(); }
+ public int compareTo(LiteralWrapper o) { return l.compareTo(o.l); }
}
}
}
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2014-10-07 18:23:22 UTC (rev 1814)
+++ trunk/src/test/TermTest.java 2014-10-17 15:44:12 UTC (rev 1815)
@@ -16,6 +16,7 @@
import jason.asSyntax.ObjectTermImpl;
import jason.asSyntax.Plan;
import jason.asSyntax.Pred;
+import jason.asSyntax.PredicateIndicator;
import jason.asSyntax.StringTermImpl;
import jason.asSyntax.Structure;
import jason.asSyntax.Term;
@@ -658,6 +659,18 @@
assertTrue(new ListTermImpl().compareTo(new StringTermImpl("string")) > 0);
}
+ public void testComparePI() {
+ List<PredicateIndicator> l = new ArrayList<PredicateIndicator>();
+ l.add(new PredicateIndicator("b", 2));
+ l.add(new PredicateIndicator("b", 7));
+ l.add(new PredicateIndicator("a", 2));
+ l.add(new PredicateIndicator("a", 4));
+ l.add(new PredicateIndicator("a", 1));
+ l.add(new PredicateIndicator("b", 5));
+ Collections.sort(l);
+ assertEquals("[a/1, a/2, a/4, b/2, b/5, b/7]", l.toString());
+ }
+
public void testUnify4() throws ParseException {
Term a1 = ASSyntax.parseTerm("a(1)");
Term a2 = ASSyntax.parseTerm("a(X+1)");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2014-10-17 18:58:15
|
Revision: 1816
http://sourceforge.net/p/jason/svn/1816
Author: jomifred
Date: 2014-10-17 18:58:11 +0000 (Fri, 17 Oct 2014)
Log Message:
-----------
improve return of buf
Modified Paths:
--------------
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSemantics/Intention.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2014-10-17 15:44:12 UTC (rev 1815)
+++ trunk/src/jason/asSemantics/Agent.java 2014-10-17 18:58:11 UTC (rev 1816)
@@ -675,10 +675,13 @@
return pl;
}
- /** Belief Update Function: adds/removes percepts into belief base */
- public void buf(List<Literal> percepts) {
+ /** Belief Update Function: adds/removes percepts into belief base.
+ *
+ * @return the number of changes (add + dels)
+ */
+ public int buf(List<Literal> percepts) {
if (percepts == null) {
- return;
+ return 0;
}
// stat
@@ -756,6 +759,7 @@
qCache.reset();
if (qProfiling != null)
qProfiling.newUpdateCycle(getTS().getUserAgArch().getCycleNumber(), adds+dels, System.nanoTime()-startTime);
+ return adds + dels;
}
public QueryCacheSimple getQueryCache() {
Modified: trunk/src/jason/asSemantics/Intention.java
===================================================================
--- trunk/src/jason/asSemantics/Intention.java 2014-10-17 15:44:12 UTC (rev 1815)
+++ trunk/src/jason/asSemantics/Intention.java 2014-10-17 18:58:11 UTC (rev 1816)
@@ -181,7 +181,7 @@
}
public int hashCode() {
- return new Integer(id).hashCode();
+ return id;
}
public Intention clone() {
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2014-10-17 15:44:12 UTC (rev 1815)
+++ trunk/src/test/TermTest.java 2014-10-17 18:58:11 UTC (rev 1816)
@@ -129,7 +129,7 @@
c2.add(ASSyntax.parseTerm("x"));
c1.retainAll(c2);
- assertEquals("[back_pos(9,7), x]",c1.toString());
+ assertTrue("[back_pos(9,7), x]".equals(c1.toString()) || "[x, back_pos(9,7)]".equals(c1.toString()));
}
public void testUnifies() throws ParseException {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2015-03-27 17:34:57
|
Revision: 1825
http://sourceforge.net/p/jason/svn/1825
Author: jomifred
Date: 2015-03-27 17:34:55 +0000 (Fri, 27 Mar 2015)
Log Message:
-----------
show suspended state of intentions in mind inspector
Modified Paths:
--------------
trunk/src/jason/asSemantics/Intention.java
trunk/src/jason/util/asl2xml.java
trunk/src/xml/agInspection.xsl
Modified: trunk/src/jason/asSemantics/Intention.java
===================================================================
--- trunk/src/jason/asSemantics/Intention.java 2015-03-13 17:23:55 UTC (rev 1824)
+++ trunk/src/jason/asSemantics/Intention.java 2015-03-27 17:34:55 UTC (rev 1825)
@@ -229,6 +229,7 @@
//if (intendedMeans.isEmpty())
// eint.appendChild( initialTrigger.getAsDOM(document));
eint.setAttribute("finished", ""+isFinished());
+ eint.setAttribute("suspended", ""+isSuspended());
return eint;
}
Modified: trunk/src/jason/util/asl2xml.java
===================================================================
--- trunk/src/jason/util/asl2xml.java 2015-03-13 17:23:55 UTC (rev 1824)
+++ trunk/src/jason/util/asl2xml.java 2015-03-27 17:34:55 UTC (rev 1825)
@@ -67,9 +67,13 @@
}
public String transform(Document agState) throws Exception {
- StringWriter so = new StringWriter();
- getTransformer().transform(new DOMSource(agState), new StreamResult(so));
- return so.toString();
+ try {
+ StringWriter so = new StringWriter();
+ getTransformer().transform(new DOMSource(agState), new StreamResult(so));
+ return so.toString();
+ } catch (IndexOutOfBoundsException e) {
+ return "";
+ }
}
protected Transformer transCache = null;
Modified: trunk/src/xml/agInspection.xsl
===================================================================
--- trunk/src/xml/agInspection.xsl 2015-03-13 17:23:55 UTC (rev 1824)
+++ trunk/src/xml/agInspection.xsl 2015-03-27 17:34:55 UTC (rev 1825)
@@ -268,6 +268,9 @@
<xsl:if test="string-length(@pending) > 0">
<b><xsl:value-of select="@pending" /></b>
</xsl:if>
+ <xsl:if test="string-length(@suspended) > 0 and @suspended='true' and not(starts-with(@pending,'suspen'))">
+ <xsl:text> (suspended) </xsl:text>
+ </xsl:if>
</td>
<td valign="top">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2015-03-31 19:06:34
|
Revision: 1828
http://sourceforge.net/p/jason/svn/1828
Author: jomifred
Date: 2015-03-31 19:06:26 +0000 (Tue, 31 Mar 2015)
Log Message:
-----------
inicial implementation of asserta/z
Modified Paths:
--------------
trunk/src/jason/asSyntax/Rule.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/jason/stdlib/abolish.java
trunk/src/test/BeliefBaseTest.java
trunk/src/test/RuleTest.java
Added Paths:
-----------
trunk/src/jason/stdlib/asserta.java
trunk/src/jason/stdlib/assertz.java
Modified: trunk/src/jason/asSyntax/Rule.java
===================================================================
--- trunk/src/jason/asSyntax/Rule.java 2015-03-31 17:28:01 UTC (rev 1827)
+++ trunk/src/jason/asSyntax/Rule.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -44,6 +44,8 @@
private LogicalFormula body = null;
+ private boolean isTerm = false; // it is true when the rule is used as a term ( { p :- q } )
+
public Rule(Literal head, LogicalFormula body) {
super(head);
if (head.isRule()) {
@@ -67,6 +69,14 @@
public boolean isRule() {
return true;
}
+
+ public void setAsTerm(boolean b) {
+ isTerm = b;
+ }
+
+ public boolean isTerm() {
+ return isTerm;
+ }
@Override
public boolean equals(Object o) {
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2015-03-31 17:28:01 UTC (rev 1827)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -53,7 +53,7 @@
* belsMap is a table where the key is the bel.getFunctorArity and the value
* is a list of literals with the same functorArity.
*/
- private Map<PredicateIndicator, BelEntry> belsMap = new ConcurrentHashMap<PredicateIndicator, BelEntry>(50, (float)0.75, 3);
+ private Map<PredicateIndicator, BelEntry> belsMap = new ConcurrentHashMap<PredicateIndicator, BelEntry>();
private int size = 0;
@@ -201,7 +201,7 @@
public Literal next() {
l = il.next();
- if (!il.hasNext() && ibe.hasNext()) {
+ while (!il.hasNext() && ibe.hasNext()) {
il = ibe.next().list.iterator();
}
return l;
@@ -315,14 +315,14 @@
final class BelEntry {
final private Deque<Literal> list = new LinkedBlockingDeque<Literal>(); // maintains the order of the beliefs
- final private Map<LiteralWrapper,Literal> map = new ConcurrentHashMap<LiteralWrapper,Literal>(30,(float)0.75,3); // to find content faster
+ final private Map<LiteralWrapper,Literal> map = new ConcurrentHashMap<LiteralWrapper,Literal>(); // to find content faster
public void add(Literal l, boolean addInEnd) {
map.put(new LiteralWrapper(l), l);
if (addInEnd) {
list.addLast(l);
} else {
- list.addFirst(l);
+ list.addFirst(l);
}
}
Modified: trunk/src/jason/stdlib/abolish.java
===================================================================
--- trunk/src/jason/stdlib/abolish.java 2015-03-31 17:28:01 UTC (rev 1827)
+++ trunk/src/jason/stdlib/abolish.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -49,6 +49,7 @@
</ul>
@see jason.stdlib.asserta
+ @see jason.stdlib.assertz
*/
public class abolish extends DefaultInternalAction {
Added: trunk/src/jason/stdlib/asserta.java
===================================================================
--- trunk/src/jason/stdlib/asserta.java (rev 0)
+++ trunk/src/jason/stdlib/asserta.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -0,0 +1,74 @@
+//----------------------------------------------------------------------------
+// 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.inf.ufrgs.br/~bordini
+// http://www.das.ufsc.br/~jomi
+//
+//----------------------------------------------------------------------------
+
+package jason.stdlib;
+
+import jason.JasonException;
+import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.Literal;
+import jason.asSyntax.Term;
+
+import java.util.List;
+
+/**
+ <p>Internal action: <b><code>.asserta</code></b>.
+
+ <p>Description: adds a new belief as the "+" (or "+<") operator. However, it can be used in prolog like rules.
+
+ <p>Parameters:<ul>
+ <li>+ belief (literal): the belief that will be added in the being of the belief base.<br/>
+ </ul>
+
+ <p>Examples:<ul>
+ <li> <code>.asserta(p)</code>: adds <code>p</code> in the belief base.</li>
+ </ul>
+
+ @see jason.stdlib.assertz
+ @see jason.stdlib.abolish
+
+ */
+public class asserta extends DefaultInternalAction {
+
+ @Override public int getMinArgs() { return 1; }
+ @Override public int getMaxArgs() { return 1; }
+
+ @Override protected void checkArguments(Term[] args) throws JasonException {
+ super.checkArguments(args); // check number of arguments
+ if (!args[0].isLiteral())
+ throw JasonException.createWrongArgument(this,"first argument must be a ground literal.");
+ }
+
+ @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
+ checkArguments(args);
+
+ List<Literal>[] result = ts.getAg().brf((Literal)args[0],null,null,false);
+ if (result != null) { // really added something
+ // generate events
+ ts.updateEvents(result,null);
+ }
+ return true;
+ }
+
+}
Added: trunk/src/jason/stdlib/assertz.java
===================================================================
--- trunk/src/jason/stdlib/assertz.java (rev 0)
+++ trunk/src/jason/stdlib/assertz.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -0,0 +1,74 @@
+//----------------------------------------------------------------------------
+// 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.inf.ufrgs.br/~bordini
+// http://www.das.ufsc.br/~jomi
+//
+//----------------------------------------------------------------------------
+
+package jason.stdlib;
+
+import jason.JasonException;
+import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.Literal;
+import jason.asSyntax.Term;
+
+import java.util.List;
+
+/**
+ <p>Internal action: <b><code>.assertz</code></b>.
+
+ <p>Description: adds a new belief as the "+>" operator. However, it can be used in prolog like rules.
+
+ <p>Parameters:<ul>
+ <li>+ belief (literal): the belief that will be added in the end of the belief base.<br/>
+ </ul>
+
+ <p>Examples:<ul>
+ <li> <code>.assertz(p)</code>: adds <code>p</code> in the belief base.</li>
+ </ul>
+
+ @see jason.stdlib.asserta
+ @see jason.stdlib.abolish
+
+ */
+public class assertz extends DefaultInternalAction {
+
+ @Override public int getMinArgs() { return 1; }
+ @Override public int getMaxArgs() { return 1; }
+
+ @Override protected void checkArguments(Term[] args) throws JasonException {
+ super.checkArguments(args); // check number of arguments
+ if (!args[0].isLiteral())
+ throw JasonException.createWrongArgument(this,"first argument must be a ground literal.");
+ }
+
+ @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
+ checkArguments(args);
+
+ List<Literal>[] result = ts.getAg().brf((Literal)args[0],null,null,true);
+ if (result != null) { // really added something
+ // generate events
+ ts.updateEvents(result,null);
+ }
+ return true;
+ }
+
+}
Modified: trunk/src/test/BeliefBaseTest.java
===================================================================
--- trunk/src/test/BeliefBaseTest.java 2015-03-31 17:28:01 UTC (rev 1827)
+++ trunk/src/test/BeliefBaseTest.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -180,7 +180,7 @@
while (itl.hasNext()) {
Literal l = itl.next();
if (l.getFunctor().startsWith("testRemIt")) {
- itl.remove();
+ itl.remove();
}
}
assertEquals(iteratorSize(bb.getPercepts()), 0);
Modified: trunk/src/test/RuleTest.java
===================================================================
--- trunk/src/test/RuleTest.java 2015-03-31 17:28:01 UTC (rev 1827)
+++ trunk/src/test/RuleTest.java 2015-03-31 19:06:26 UTC (rev 1828)
@@ -7,6 +7,7 @@
import jason.asSyntax.LogExpr;
import jason.asSyntax.Rule;
import jason.asSyntax.Structure;
+import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
@@ -151,6 +152,9 @@
assertFalse(r.hasVar(new VarTerm("III"), null));
}
+ public void testAsTerm() throws ParseException {
+ // TODO Term t = ASSyntax.parseTerm("{p :- a & b | c}");
+ }
@SuppressWarnings("unchecked")
private int iteratorSize(Iterator i) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2015-06-15 12:45:29
|
Revision: 1841
http://sourceforge.net/p/jason/svn/1841
Author: jomifred
Date: 2015-06-15 12:45:27 +0000 (Mon, 15 Jun 2015)
Log Message:
-----------
try to fix some problems with mas console
Modified Paths:
--------------
trunk/src/jason/runtime/MASConsoleColorGUI.java
trunk/src/jason/runtime/MASConsoleGUI.java
trunk/src/jason/runtime/OutputStreamAdapter.java
trunk/src/jason/stdlib/term2string.java
trunk/src/templates/logging.properties
Modified: trunk/src/jason/runtime/MASConsoleColorGUI.java
===================================================================
--- trunk/src/jason/runtime/MASConsoleColorGUI.java 2015-05-25 12:41:56 UTC (rev 1840)
+++ trunk/src/jason/runtime/MASConsoleColorGUI.java 2015-06-15 12:45:27 UTC (rev 1841)
@@ -2,7 +2,6 @@
import java.awt.BorderLayout;
import java.awt.Color;
-import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
@@ -77,7 +76,8 @@
if (isTabbed() && agName != null) {
MASColorTextPane ta = agsTextArea.get(agName);
if (ta == null) {
- synchronized (this) {
+ // add new tab for the agent
+ synchronized (this) {
ta = new MASColorTextPane(Color.black);
ta.setEditable(false);
agsTextArea.put(agName, ta);
@@ -101,16 +101,17 @@
}
// print in output
- synchronized (this) {
+ synchronized (output) {
int l = output.getDocument().getLength();
if (l > 60000) {
cleanConsole();
- l = 0;
+ //l = 0;
}
- output.append(c, s);
try {
- output.setCaretPosition(l);
- } catch (IllegalArgumentException e) {}
+ output.append(c, s);
+ //output.setCaretPosition(l);
+ } catch (IllegalArgumentException e) {
+ }
}
} catch (Exception e) {
try {
@@ -169,9 +170,8 @@
AttributeSet as = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
try {
getDocument().insertString(getDocument().getLength(), s, as);
- } catch (BadLocationException e) {
- e.printStackTrace();
- }
+ } catch (BadLocationException e) {
+ }
}
}
Modified: trunk/src/jason/runtime/MASConsoleGUI.java
===================================================================
--- trunk/src/jason/runtime/MASConsoleGUI.java 2015-05-25 12:41:56 UTC (rev 1840)
+++ trunk/src/jason/runtime/MASConsoleGUI.java 2015-06-15 12:45:27 UTC (rev 1841)
@@ -31,7 +31,6 @@
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
-import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
@@ -206,16 +205,17 @@
}
// print in output
- int l = output.getDocument().getLength();
- if (l > 60000) {
- cleanConsole();
- l = 0;
- }
- synchronized (this) {
- output.append(s);
+ synchronized (output) {
+ int l = output.getDocument().getLength();
+ if (l > 60000) {
+ cleanConsole();
+ //l = 0;
+ }
try {
- output.setCaretPosition(l);
- } catch (java.lang.IllegalArgumentException e) {}
+ output.append(s);
+ //output.setCaretPosition(l);
+ } catch (IllegalArgumentException e) {
+ }
}
} catch (Exception e) {
try {
Modified: trunk/src/jason/runtime/OutputStreamAdapter.java
===================================================================
--- trunk/src/jason/runtime/OutputStreamAdapter.java 2015-05-25 12:41:56 UTC (rev 1840)
+++ trunk/src/jason/runtime/OutputStreamAdapter.java 2015-06-15 12:45:27 UTC (rev 1841)
@@ -63,7 +63,8 @@
void append(String s) {
if (masConsole != null) {
masConsole.append(s);
- } if (ta != null) {
+ }
+ if (ta != null) {
ta.append(s);
ta.setCaretPosition(ta.getDocument().getLength());
}
Modified: trunk/src/jason/stdlib/term2string.java
===================================================================
--- trunk/src/jason/stdlib/term2string.java 2015-05-25 12:41:56 UTC (rev 1840)
+++ trunk/src/jason/stdlib/term2string.java 2015-06-15 12:45:27 UTC (rev 1841)
@@ -24,7 +24,8 @@
<p>Examples:<ul>
<li> <code>.term2string(b,"b")</code>: true.
<li> <code>.term2string(b,X)</code>: unifies X with "b".
- <li> <code>.term2string(X,"b")</code>: unified X with b.
+ <li> <code>.term2string(X,"b")</code>: unifies X with b.
+ <li> <code>.term2string(X,"10")</code>: unifies X with 10 (a number term).
</ul>
@see jason.stdlib.concat
Modified: trunk/src/templates/logging.properties
===================================================================
--- trunk/src/templates/logging.properties 2015-05-25 12:41:56 UTC (rev 1840)
+++ trunk/src/templates/logging.properties 2015-06-15 12:45:27 UTC (rev 1841)
@@ -29,7 +29,7 @@
jason.runtime.MASConsoleLogHandler.formatter = jason.runtime.MASConsoleLogFormatter
# set one text area for each agent
jason.runtime.MASConsoleLogHandler.tabbed = false
-jason.runtime.MASConsoleLogHandler.colors = true
+jason.runtime.MASConsoleLogHandler.colors = false
# default file output is in project's directory.
java.util.logging.FileHandler.pattern = mas.log
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2015-09-22 18:47:53
|
Revision: 1844
http://sourceforge.net/p/jason/svn/1844
Author: jomifred
Date: 2015-09-22 18:47:50 +0000 (Tue, 22 Sep 2015)
Log Message:
-----------
the first parameter of .nth can be a variable (to discover the index of same element of a list)
Modified Paths:
--------------
trunk/src/jason/runtime/MASConsoleColorGUI.java
trunk/src/jason/runtime/MASConsoleGUI.java
trunk/src/jason/stdlib/nth.java
trunk/src/test/RuleTest.java
Modified: trunk/src/jason/runtime/MASConsoleColorGUI.java
===================================================================
--- trunk/src/jason/runtime/MASConsoleColorGUI.java 2015-08-04 12:47:36 UTC (rev 1843)
+++ trunk/src/jason/runtime/MASConsoleColorGUI.java 2015-09-22 18:47:50 UTC (rev 1844)
@@ -10,6 +10,7 @@
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
+import javax.swing.SwingUtilities;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultCaret;
@@ -57,7 +58,7 @@
}
@Override
- public void append(String agName, String s) {
+ public void append(final String agName, String s) {
try {
Color c = null;
if (agName != null) {
@@ -77,19 +78,22 @@
MASColorTextPane ta = agsTextArea.get(agName);
if (ta == null) {
// add new tab for the agent
- synchronized (this) {
- ta = new MASColorTextPane(Color.black);
- ta.setEditable(false);
- ((DefaultCaret)ta.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
- agsTextArea.put(agName, ta);
- int i = 0;
- for (; i<tabPane.getTabCount(); i++) {
- if (agName.toUpperCase().compareTo( tabPane.getTitleAt(i).toUpperCase()) < 0)
- break;
+ ta = new MASColorTextPane(Color.black);
+ ta.setEditable(false);
+ ((DefaultCaret)ta.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+ final MASColorTextPane cta = ta;
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ agsTextArea.put(agName, cta);
+ int i = 0;
+ for (; i<tabPane.getTabCount(); i++) {
+ if (agName.toUpperCase().compareTo( tabPane.getTitleAt(i).toUpperCase()) < 0)
+ break;
+ }
+ tabPane.add(new JScrollPane(cta),i);
+ tabPane.setTitleAt(i, agName);
}
- tabPane.add(new JScrollPane(ta),i);
- tabPane.setTitleAt(i, agName);
- }
+ });
}
if (ta != null) {
// print out
Modified: trunk/src/jason/runtime/MASConsoleGUI.java
===================================================================
--- trunk/src/jason/runtime/MASConsoleGUI.java 2015-08-04 12:47:36 UTC (rev 1843)
+++ trunk/src/jason/runtime/MASConsoleGUI.java 2015-09-22 18:47:50 UTC (rev 1844)
@@ -45,6 +45,7 @@
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
import javax.swing.text.DefaultCaret;
/** the GUI console to output log messages */
@@ -178,7 +179,7 @@
append(null, s);
}
- public void append(String agName, String s) {
+ public void append(final String agName, String s) {
try {
if (!frame.isVisible()) {
frame.setVisible(true);
@@ -192,8 +193,13 @@
ta = new JTextArea();
ta.setEditable(false);
((DefaultCaret)ta.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
- agsTextArea.put(agName, ta);
- tabPane.add(agName, new JScrollPane(ta));
+ final JTextArea cta = ta;
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ agsTextArea.put(agName, cta);
+ tabPane.add(agName, new JScrollPane(cta));
+ }
+ });
}
if (ta != null) {
if (ta.getDocument().getLength() > 100000) {
Modified: trunk/src/jason/stdlib/nth.java
===================================================================
--- trunk/src/jason/stdlib/nth.java 2015-08-04 12:47:36 UTC (rev 1843)
+++ trunk/src/jason/stdlib/nth.java 2015-09-22 18:47:50 UTC (rev 1844)
@@ -1,16 +1,24 @@
package jason.stdlib;
-import jason.*;
-import jason.asSemantics.*;
-import jason.asSyntax.*;
+import jason.JasonException;
+import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.InternalAction;
+import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
+import jason.asSyntax.ListTerm;
+import jason.asSyntax.NumberTerm;
+import jason.asSyntax.Term;
+import java.util.Iterator;
+
/**
<p>Internal action: <b><code>.nth</code></b>.
<p>Description: gets the nth term of a list.
<p>Parameters:<ul>
-<li>+ index (integer): the position of the term, the first term is at position 0.<br/>
+<li>-/+ index (integer): the position of the term (the first term is at position 0)<br/>
<li>+ list (list): the list where to get the term from.<br/>
<li>-/+ term (term): the term at position <i>index</i> in the <i>list</i>.<br/>
</ul>
@@ -21,6 +29,7 @@
<li> <code>.nth(0,[a,b,c],d)</code>: false.
<li> <code>.nth(0,[a,b,c],a)</code>: true.
<li> <code>.nth(5,[a,b,c],X)</code>: error.
+<li> <code>.nth(X,[a,b,c,a,e],a)</code>: unifies <code>X</code> with <code>0</code> (and <code>3</code> if it backtracks).
</ul>
@see jason.stdlib.concat
@@ -52,26 +61,69 @@
@Override protected void checkArguments(Term[] args) throws JasonException {
super.checkArguments(args); // check number of arguments
- if (!args[0].isNumeric()) {
- throw JasonException.createWrongArgument(this,"first argument should be numeric and not '"+args[0]+"'.");
+ if (!args[0].isNumeric() && !args[0].isVar()) {
+ throw JasonException.createWrongArgument(this,"the first argument should be numeric or a variable -- not '"+args[0]+"'.");
}
if (!args[1].isList()) {
- throw JasonException.createWrongArgument(this,"second argument should be a list and not '"+args[1]+"'.");
+ throw JasonException.createWrongArgument(this,"the second argument should be a list and not '"+args[1]+"'.");
}
}
@Override
- public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
+ public Object execute(TransitionSystem ts, final Unifier un, final Term[] args) throws Exception {
checkArguments(args);
- int index = (int)((NumberTerm)args[0]).solve();
ListTerm list = (ListTerm)args[1];
- if (index < 0 || index >= list.size()) {
- throw new JasonException("nth: index "+index+" is out of bounds ("+list.size()+")");
+ if (args[0].isNumeric()) {
+ int index = (int)((NumberTerm)args[0]).solve();
+
+ if (index < 0 || index >= list.size()) {
+ throw new JasonException("nth: index "+index+" is out of bounds ("+list.size()+")");
+ }
+
+ return un.unifies(args[2], list.get(index));
}
- Term element = list.get(index);
+
+ if (args[0].isVar()) {
+
+ final Iterator<Term> ilist = list.iterator();
+
+ // return all indexes for thirds arg
+ return new Iterator<Unifier>() {
+ int index = -1;
+ Unifier c = null; // the current response (which is an unifier)
+
+ public boolean hasNext() {
+ if (c == null) // the first call of hasNext should find the first response
+ find();
+ return c != null;
+ }
- return un.unifies(args[2], element);
+ public Unifier next() {
+ if (c == null) find();
+ Unifier b = c;
+ find(); // find next response
+ return b;
+ }
+
+ void find() {
+ while (ilist.hasNext()) {
+ index++;
+ Term candidate = ilist.next();
+ c = un.clone();
+ if (c.unifiesNoUndo( args[2], candidate)) {
+ c.unifies(args[0], ASSyntax.createNumber(index));
+ return; // found another response
+ }
+ }
+ c = null; // no more sublists found
+ }
+
+ public void remove() {}
+ };
+
+ }
+ return false;
}
}
Modified: trunk/src/test/RuleTest.java
===================================================================
--- trunk/src/test/RuleTest.java 2015-08-04 12:47:36 UTC (rev 1843)
+++ trunk/src/test/RuleTest.java 2015-09-22 18:47:50 UTC (rev 1844)
@@ -1,5 +1,6 @@
package test;
+import jason.RevisionFailedException;
import jason.asSemantics.Agent;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
@@ -10,6 +11,9 @@
import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
+import static jason.asSyntax.ASSyntax.parseLiteral;
+import static jason.asSyntax.ASSyntax.parseFormula;
+import static jason.asSyntax.ASSyntax.createRule;
import java.util.HashMap;
import java.util.Iterator;
@@ -163,6 +167,57 @@
assertEquals("+!test4 <- .add_plan({ +!g : v <- .print(ok) },self,end); !test4a.", t.toString());
}
+ public void testMaiquel() throws ParseException, RevisionFailedException {
+ Agent ag = new Agent();
+ ag.initAg();
+ //first rule: rule1(X):-teste(X)¬(prop(X))&X
+ ag.addBel(createRule(parseLiteral("rule1(X)"), parseFormula("teste(X)¬(prop(X))&X")));
+
+ //second rule: rule2(X):-teste(X)&X¬(prop(X))
+ ag.addBel(createRule(parseLiteral("rule2(X)"), parseFormula("teste(X)&X¬(prop(X))")));
+
+ //asserting some facts
+ //ag.addBel(parseLiteral("teste(p(K))")); // original proposal and the cause of the problem => test does not produce a ground literal
+ ag.addBel(parseLiteral("teste(p(tom))")); // correction
+ ag.addBel(parseLiteral("teste(p(bob))")); // correction
+
+
+ ag.addBel(parseLiteral("p(tom)"));
+ ag.addBel(parseLiteral("p(bob)"));
+ /*
+ Iterator<Unifier> it1 = parseFormula("rule1(A)").logicalConsequence(ag, new Unifier());
+ System.out.print("Rule 1: ");
+ while(it1.hasNext()){
+ System.out.print(it1.next());
+ }
+ System.out.print("\n");
+ Iterator<Unifier> it2 = parseFormula("rule2(A)").logicalConsequence(ag, new Unifier());
+ System.out.print("Rule 2: ");
+ while(it2.hasNext()){
+ System.out.print(it2.next());
+ }
+ */
+
+ //asserting a new fact
+ ag.addBel(parseLiteral("prop(p(bob))"));
+ assertEquals(1, iteratorSize(parseFormula("rule1(A)").logicalConsequence(ag, new Unifier())));
+ assertEquals(1, iteratorSize(parseFormula("rule2(A)").logicalConsequence(ag, new Unifier())));
+ /*
+ Iterator<Unifier> it12 = parseFormula("rule1(A)").logicalConsequence(ag, new Unifier());
+ System.out.print("Rule 1: ");
+ while(it12.hasNext()){
+ System.out.print(it12.next());
+ }
+ System.out.print("\n");
+ Iterator<Unifier> it22 = parseFormula("rule2(A)").logicalConsequence(ag, new Unifier());
+ System.out.print("Rule 2: ");
+ while(it22.hasNext()){
+ System.out.print(it22.next());
+ }
+ */
+ }
+
+
@SuppressWarnings("unchecked")
private int iteratorSize(Iterator i) {
int c = 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2015-12-07 17:16:40
|
Revision: 1860
http://sourceforge.net/p/jason/svn/1860
Author: jomifred
Date: 2015-12-07 17:16:38 +0000 (Mon, 07 Dec 2015)
Log Message:
-----------
add vars with name spaces
Modified Paths:
--------------
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/ASSyntax.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/LiteralImpl.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/PredicateIndicator.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/UnnamedVar.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/test/NSTest.java
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSemantics/Unifier.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -24,6 +24,7 @@
package jason.asSemantics;
import jason.asSyntax.ASSyntax;
+import jason.asSyntax.Atom;
import jason.asSyntax.CyclicTerm;
import jason.asSyntax.ListTerm;
import jason.asSyntax.ListTermImpl;
@@ -235,7 +236,7 @@
// deref vars
final VarTerm t1gv = t1gisvar ? deref((VarTerm)t1g) : null;
final VarTerm t2gv = t2gisvar ? deref((VarTerm)t2g) : null;
-
+
// get their values
//final Term t1vl = t1gisvar ? function.get(t1gv) : t1g;
//final Term t2vl = t2gisvar ? function.get(t2gv) : t2g;
@@ -280,9 +281,9 @@
return false;
// different name space
- if (t1s.getNS() != null && t2s.getNS() != null && !unifiesNoUndo(t1s.getNS(),t2s.getNS()))
+ if (!unifiesNamespace(t1s, t2s))
return false;
-
+
// unify inner terms
// do not use iterator! (see ListTermImpl class)
for (int i = 0; i < ts; i++)
@@ -295,6 +296,17 @@
return true;
}
+
+ private boolean unifiesNamespace(Literal t1s, Literal t2s) {
+ if (t1s != Literal.DefaultNS || t2s != Literal.DefaultNS) { // if both are not default NS
+ Atom nst1 = (t1s == Literal.DefaultNS ? Literal.DefaultNS : t1s.getNS()); //(t1s instanceof Atom ? ((Atom)t1s).getNS() : Literal.DefaultNS));
+ Atom nst2 = (t2s == Literal.DefaultNS ? Literal.DefaultNS : t2s.getNS()); //(t2s instanceof Atom ? ((Atom)t2s).getNS() : Literal.DefaultNS));
+ //System.out.println(nst1.getFunctor()+" == "+ nst2.getFunctor()); //+" ==> "+unifiesNoUndo(nst1, nst2));
+ //return nst1.getFunctor().equals(nst2.getFunctor());
+ return unifiesNoUndo(nst1, nst2);
+ }
+ return true;
+ }
public VarTerm deref(VarTerm v) {
Term vl = function.get(v);
@@ -344,11 +356,23 @@
return false;
}
}
+
+ if (vl.isLiteral()) {
+ Literal lvl = (Literal)vl;
+ //if (!vt.getNS().equals( lvl.getNS()) ) {
+ if (! unifiesNamespace(vt, lvl) ) {
+ //System.out.println("f "+vt+ " /== " + vl); //((Literal)vl).getNS() );
+ return false;
+ }
+ if ( lvl.getNS() != Literal.DefaultNS) {
+ vl = lvl.cloneNS(Literal.DefaultNS);
+ }
+ }
if (!vl.isCyclicTerm() && vl.hasVar(vt, this)) {
vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone());
}
-
+ //System.out.println("add bind "+vt+" -> "+vl);
function.put((VarTerm) vt.clone(), vl);
return true;
}
Modified: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -181,7 +181,7 @@
public static VarTerm parseVar(String sVar) throws ParseException {
//return new as2j(new StringReader(sVar)).var();
as2j parser = new as2j(new StringReader(sVar));
- VarTerm v = parser.var();
+ VarTerm v = parser.var(Literal.DefaultNS);
if (parser.getNextToken().kind != as2jConstants.EOF)
throw new ParseException("Expected <EOF> after "+v+" for parameter '"+sVar+"'");
return v;
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/Atom.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -49,7 +49,7 @@
this.ns = DefaultNS;
}
- public Atom(Atom namespace, String functor) {
+ protected Atom(Atom namespace, String functor) {
if (functor == null)
logger.log(Level.WARNING, "The functor of an atom functor should not be null!", new Exception());
this.functor = functor;
@@ -60,13 +60,16 @@
this(l.getNS(), l);
}
- public Atom(Literal l, Unifier u) {
+ public Atom(Literal l, Unifier u) {
this((Atom)l.getNS().capply(u), l);
}
public Atom(Atom namespace, Literal l) {
this.functor = l.getFunctor();
- this.ns = namespace;
+ if (namespace.functor.equals("default")) // in case namespace is an ordinary Atom with functor "default", we need to replace by the Default NS
+ this.ns = DefaultNS;
+ else
+ this.ns = namespace;
predicateIndicatorCache = l.predicateIndicatorCache;
hashCodeCache = l.hashCodeCache;
srcInfo = l.srcInfo;
@@ -83,6 +86,11 @@
public Term clone() {
return this; // since this object is immutable
}
+
+ @Override
+ public Literal cloneNS(Atom newnamespace) {
+ return new Atom(newnamespace, this);
+ }
@Override
public boolean isAtom() {
@@ -144,10 +152,6 @@
@Override
protected int calcHashCode() {
- if (getNS() == null) {
- System.out.println("*** "+this);
- return 0;
- }
return getFunctor().hashCode() + getNS().hashCode();
}
@@ -163,7 +167,7 @@
public Element getAsDOM(Document document) {
Element u = (Element) document.createElement("structure");
u.setAttribute("functor",getFunctor());
- u.setAttribute("name-space", getNS().toString());
+ //u.setAttribute("name-space", getNS().toString());
return u;
}
}
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/Literal.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -94,6 +94,9 @@
public Literal copy() {
return (Literal)clone(); // should call the clone, that is overridden in subclasses
}
+
+ /** clone in another namespace */
+ public abstract Literal cloneNS(Atom newnamespace);
/** returns the functor of this literal */
public abstract String getFunctor();
@@ -109,7 +112,7 @@
/** returns name space :: functor symbol / arity */
public PredicateIndicator getPredicateIndicator() {
if (predicateIndicatorCache == null) {
- predicateIndicatorCache = new PredicateIndicator(getNS(), getFunctor(), getArity());
+ predicateIndicatorCache = new PredicateIndicator( getFunctor(), getArity());
}
return predicateIndicatorCache;
}
@@ -566,7 +569,7 @@
private static final class DefaultNameSpace extends Atom {
public DefaultNameSpace() {
- super("default");
+ super(null, "default");
}
protected int calcHashCode() {
return getFunctor().hashCode();
Modified: trunk/src/jason/asSyntax/LiteralImpl.java
===================================================================
--- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -146,6 +146,10 @@
return new LiteralImpl(this,u);
}
+ public Literal cloneNS(Atom newNameSpace) {
+ return new LiteralImpl(newNameSpace, !negated(), this);
+ }
+
@Override
protected int calcHashCode() {
int result = super.calcHashCode();
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/Pred.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -49,9 +49,6 @@
public Pred(String functor) {
super(functor);
}
- public Pred(Atom namespace, String functor) {
- super(namespace, functor);
- }
public Pred(Literal l) {
this(l.getNS(), l);
@@ -602,6 +599,11 @@
return new Pred(this);
}
+ @Override
+ public Literal cloneNS(Atom newnamespace) {
+ return new Pred(newnamespace, this);
+ }
+
public String toStringAsTerm() {
return super.toString();
}
Modified: trunk/src/jason/asSyntax/PredicateIndicator.java
===================================================================
--- trunk/src/jason/asSyntax/PredicateIndicator.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/PredicateIndicator.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -9,8 +9,6 @@
*/
public final class PredicateIndicator implements Comparable<PredicateIndicator>, Serializable {
-
- private final Atom ns; // name space
private final String functor;
private final int arity;
private final int hash;
@@ -18,26 +16,15 @@
public PredicateIndicator(String functor, int arity) {
this.functor = functor;
this.arity = arity;
- this.ns = Literal.DefaultNS;
hash = calcHash();
}
- public PredicateIndicator(Atom namespace, String functor, int arity) {
- this.functor = functor;
- this.arity = arity;
- this.ns = namespace;
- hash = calcHash();
- }
+
public PredicateIndicator(String prefix, PredicateIndicator pi) {
this.functor = prefix + pi.functor;
this.arity = pi.arity;
- this.ns = Literal.DefaultNS;
hash = calcHash();
}
- public Atom getNS() {
- return ns;
- }
-
public String getFunctor() {
return functor;
}
@@ -51,7 +38,7 @@
if (o == this) return true;
if (o != null && o instanceof PredicateIndicator && o.hashCode() == this.hashCode()) {
final PredicateIndicator pi = (PredicateIndicator)o;
- return arity == pi.arity && functor.equals(pi.functor) && ns.equals(pi.getNS());
+ return arity == pi.arity && functor.equals(pi.functor);
}
return false;
}
@@ -63,12 +50,9 @@
@Override
public int compareTo(PredicateIndicator pi) {
- int c = this.ns.compareTo(pi.ns);
+ int c = this.functor.compareTo(pi.functor);
if (c != 0) return c;
- c = this.functor.compareTo(pi.functor);
- if (c != 0) return c;
-
if (pi.arity > this.arity) return -1;
if (this.arity > pi.arity) return 1;
return 0;
@@ -77,14 +61,10 @@
private int calcHash() {
int t = 31 * arity;
if (functor != null) t = 31 * t + functor.hashCode();
- if (ns != Literal.DefaultNS) t = t + 71 * ns.hashCode();
return t;
}
public String toString() {
- if (ns == Literal.DefaultNS)
- return functor + "/" + arity;
- else
- return ns + "::" + functor + "/" + arity;
+ return functor + "/" + arity;
}
}
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/Structure.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -63,12 +63,6 @@
this.terms = new ArrayList<Term>(5);
}
- public Structure(Atom ns, String functor) {
- //this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did!
- super(ns, functor);
- this.terms = new ArrayList<Term>(5);
- }
-
public Structure(Literal l) {
this(l.getNS(), l);
}
@@ -225,6 +219,11 @@
}
@Override
+ public Literal cloneNS(Atom newnamespace) {
+ return new Structure(newnamespace, this);
+ }
+
+ @Override
public void addTerm(Term t) {
if (t == null) return;
terms.add(t);
Modified: trunk/src/jason/asSyntax/UnnamedVar.java
===================================================================
--- trunk/src/jason/asSyntax/UnnamedVar.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/UnnamedVar.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -38,9 +38,17 @@
public int myId;
public UnnamedVar() {
- this(varCont.incrementAndGet());
+ this(Literal.DefaultNS, varCont.incrementAndGet());
}
+ public UnnamedVar(Atom ns) {
+ this(ns, varCont.incrementAndGet());
+ }
+ public UnnamedVar(Atom ns, int id) {
+ super(ns, "_" + id);
+ myId = id;
+ }
+
public UnnamedVar(int id) {
super("_" + id);
myId = id;
@@ -51,20 +59,26 @@
private UnnamedVar(String name) {
super(name);
}
+ private UnnamedVar(Atom ns, String name) {
+ super(ns, name);
+ }
public static UnnamedVar create(String name) {
+ return create(Literal.DefaultNS, name);
+ }
+ public static UnnamedVar create(Atom ns, String name) {
if (name.length() == 1) { // the case of "_"
- return new UnnamedVar();
+ return new UnnamedVar(ns);
} else {
int id = varCont.incrementAndGet();
- UnnamedVar v = new UnnamedVar("_"+id+name);
+ UnnamedVar v = new UnnamedVar(ns, "_"+id+name);
v.myId = id;
return v;
}
}
public Term clone() {
- UnnamedVar newv = new UnnamedVar(getFunctor());
+ UnnamedVar newv = new UnnamedVar(getNS(), getFunctor());
newv.myId = this.myId;
newv.hashCodeCache = this.hashCodeCache;
if (hasAnnot())
@@ -73,6 +87,16 @@
}
@Override
+ public Literal cloneNS(Atom newNameSpace) {
+ UnnamedVar newv = new UnnamedVar(newNameSpace, getFunctor());
+ newv.myId = this.myId;
+ newv.hashCodeCache = this.hashCodeCache;
+ if (hasAnnot())
+ newv.addAnnots(this.getAnnots().cloneLT());
+ return newv;
+ }
+
+ @Override
public boolean equals(Object t) {
if (t == null) return false;
if (t == this) return true;
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -66,15 +66,24 @@
e.printStackTrace();
}
}
- public VarTerm(boolean negated, String s) {
- super(negated, s);
+ public VarTerm(boolean negated, String functor) {
+ super(negated, functor);
}
+
+ public VarTerm(Atom namespace, String functor) {
+ super(namespace, LPos, new Atom(functor)); // TODO: provide proper constructor
+ //System.out.println("****"+v+" "+this);
+ }
+ public VarTerm(Atom namespace, Literal v) {
+ super(namespace, !v.negated(), v);
+ }
+
/** @deprecated prefer ASSyntax.parseVar(...) */
public static VarTerm parseVar(String sVar) {
as2j parser = new as2j(new StringReader(sVar));
try {
- return parser.var();
+ return parser.var(Literal.DefaultNS);
} catch (Exception e) {
logger.log(Level.SEVERE, "Error parsing var " + sVar, e);
return null;
@@ -109,6 +118,12 @@
}
vl = vl.capply(u); // should clone here, since there is no cloning in unify
+
+ if (getNS() != Literal.DefaultNS && vl.isLiteral()) {
+ // use var ns for the value ns
+ vl = ((Literal)vl).cloneNS(getNS());
+ }
+
// decide whether to use var annots in apply
// X = p[a]
// !X[b]
@@ -129,14 +144,20 @@
public Term clone() {
// do not call constructor with term parameter!
- VarTerm t = new VarTerm(super.getFunctor());
- t.setNegated(!negated());
- t.srcInfo = this.srcInfo;
- t.hashCodeCache = this.hashCodeCache;
- if (hasAnnot())
- t.setAnnots(getAnnots().cloneLT());
+ //VarTerm t = new VarTerm(super.getFunctor());
+ //t.setNegated(!negated());
+ VarTerm t = new VarTerm(this.getNS(), this);
+ //t.srcInfo = this.srcInfo;
+ //t.hashCodeCache = this.hashCodeCache;
+ //if (hasAnnot())
+ // t.setAnnots(getAnnots().cloneLT());
return t;
}
+
+ @Override
+ public Literal cloneNS(Atom newNameSpace) {
+ return new VarTerm( newNameSpace, this);
+ }
/*
public PlanBody clonePB() {
@@ -253,9 +274,11 @@
*/
// is t also a var? (its value must also be null)
if (t instanceof VarTerm) {
- //final VarTerm tAsVT = (VarTerm) t;
+ final VarTerm tAsVT = (VarTerm) t;
//if (tAsVT.getValue() == null) {
- return negated() == ((VarTerm)t).negated() && getFunctor().equals(((VarTerm)t).getFunctor());
+ return negated() == tAsVT.negated() && getFunctor().equals(tAsVT.getFunctor()); // && getNS().equals(tAsVT.getNS());
+ // DO NOT consider ns in equals of hashcode!
+
//}
}
//}
@@ -541,16 +564,14 @@
@Override
public String toString() {
- //if (value == null) {
- String s = getFunctor();
- if (hasAnnot())
- s += getAnnots();
- if (negated())
- s = "~" + s;
- return s;
- //} else {
- // return value.toString();
- //}
+ String s = getFunctor();
+ if (hasAnnot())
+ s += getAnnots();
+ if (negated())
+ s = "~" + s;
+ if (getNS() != Literal.DefaultNS)
+ s = getNS() + "::" + s;
+ return s;
}
// ----------
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-07 17:16:38 UTC (rev 1860)
@@ -591,28 +591,32 @@
/* Literal */
Literal literal() :
- { Pred F = null; Pred V; Token k; boolean type = Literal.LPos; Atom NS = Literal.DefaultNS; Token tns; }
+ { Pred F = null; Pred V; Token k; boolean type = Literal.LPos;
+ Atom NS = Literal.DefaultNS; Token tns = null; }
{
- ( ( [ <TK_NEG> { type = Literal.LNeg; }
- ]
-
+ ( (
+ // namespace
[ LOOKAHEAD(10)
- tns = <ATOM> "::" { if (!tns.image.equals("default"))
+ (tns = <ATOM> { if (!tns.image.equals("default"))
NS = new Atom(tns.image);
- }
+ }
+ |
+ NS = var(NS)
+ )
+ "::"
]
+
+ [ <TK_NEG> { type = Literal.LNeg; }
+ ]
+
(F=pred()
- | V = var()
- [
- "::" F = pred()
- ]
- { VarTerm vt = (VarTerm)V;
+ | V = var(NS) { VarTerm vt = (VarTerm)V;
vt.setNegated(type);
- if (F == null) { // no namespace
+ //if (NS == Literal.DefaultNS) {
return vt;
- } else {
- NS = vt;
- }
+ //} else {
+ // return new VarTerm(NS, vt);
+ //}
}
)
)
@@ -879,10 +883,10 @@
}
-VarTerm var(): { Token K; VarTerm v; ListTerm lt; }
+VarTerm var(Atom ns): { Token K; VarTerm v; ListTerm lt; }
{
- ( K = <VAR> { v = new VarTerm(K.image); v.setSrcInfo(new SourceInfo(asSource, K.beginLine));}
- | K = <UNNAMEDVAR> { v = UnnamedVar.create(K.image); }
+ ( K = <VAR> { v = new VarTerm(ns, K.image); v.setSrcInfo(new SourceInfo(asSource, K.beginLine));}
+ | K = <UNNAMEDVAR> { v = UnnamedVar.create(ns, K.image); }
)
[
lt = list() { v.setAnnots(lt); }
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-03 23:17:22 UTC (rev 1859)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2015-12-07 17:16:38 UTC (rev 1860)
@@ -883,7 +883,8 @@
/* Literal */
final public Literal literal() throws ParseException {
- Pred F = null; Pred V; Token k; boolean type = Literal.LPos; Atom NS = Literal.DefaultNS; Token tns;
+ Pred F = null; Pred V; Token k; boolean type = Literal.LPos;
+ Atom NS = Literal.DefaultNS; Token tns = null;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case VAR:
case TK_NEG:
@@ -891,23 +892,35 @@
case TK_END:
case ATOM:
case UNNAMEDVAR:
+ if (jj_2_4(10)) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case ATOM:
+ tns = jj_consume_token(ATOM);
+ if (!tns.image.equals("default"))
+ NS = new Atom(tns.image);
+ break;
+ case VAR:
+ case UNNAMEDVAR:
+ NS = var(NS);
+ break;
+ default:
+ jj_la1[32] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ jj_consume_token(47);
+ } else {
+ ;
+ }
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TK_NEG:
jj_consume_token(TK_NEG);
type = Literal.LNeg;
break;
default:
- jj_la1[32] = jj_gen;
+ jj_la1[33] = jj_gen;
;
}
- if (jj_2_4(10)) {
- tns = jj_consume_token(ATOM);
- jj_consume_token(47);
- if (!tns.image.equals("default"))
- NS = new Atom(tns.image);
- } else {
- ;
- }
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TK_BEGIN:
case TK_END:
@@ -916,23 +929,15 @@
break;
case VAR:
case UNNAMEDVAR:
- V = var();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 47:
- jj_consume_token(47);
- F = pred();
- break;
- default:
- jj_la1[33] = jj_gen;
- ;
- }
+ V = var(NS);
VarTerm vt = (VarTerm)V;
vt.setNegated(type);
- if (F == null) { // no namespace
+ //if (NS == Literal.DefaultNS) {
{if (true) return vt;}
- } else {
- NS = vt;
- }
+ //} else {
+ // return new VarTerm(NS, vt);
+ //}
+
break;
default:
jj_la1[34] = jj_gen;
@@ -1555,16 +1560,16 @@
throw new Error("Missing return statement in function");
}
- final public VarTerm var() throws ParseException {
- Token K; VarTerm v; ListTerm lt;
+ final public VarTerm var(Atom ns) throws ParseException {
+ Token K; VarTerm v; ListTerm lt;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case VAR:
K = jj_consume_token(VAR);
- v = new VarTerm(K.image); v.setSrcInfo(new SourceInfo(asSource, K.beginLine));
+ v = new VarTerm(ns, K.image); v.setSrcInfo(new SourceInfo(asSource, K.beginLine));
break;
case UNNAMEDVAR:
K = jj_consume_token(UNNAMEDVAR);
- v = UnnamedVar.create(K.image);
+ v = UnnamedVar.create(ns, K.image);
break;
default:
jj_la1[59] = jj_gen;
@@ -1621,25 +1626,18 @@
finally { jj_save(3, xla); }
}
- final private boolean jj_3R_118() {
- if (jj_3R_107()) return true;
+ final private boolean jj_3R_119() {
+ if (jj_3R_108()) return true;
return false;
}
- final private boolean jj_3R_117() {
+ final private boolean jj_3R_118() {
if (jj_scan_token(41)) return true;
return false;
}
- final private boolean jj_3R_65() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_71()) {
- jj_scanpos = xsp;
- if (jj_3R_72()) return true;
- }
- xsp = jj_scanpos;
- if (jj_3R_73()) jj_scanpos = xsp;
+ final private boolean jj_3R_117() {
+ if (jj_3R_124()) return true;
return false;
}
@@ -1658,42 +1656,43 @@
return false;
}
- final private boolean jj_3R_113() {
- if (jj_3R_120()) return true;
- return false;
- }
-
- final private boolean jj_3R_107() {
+ final private boolean jj_3R_108() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_113()) {
- jj_scanpos = xsp;
if (jj_3R_114()) {
jj_scanpos = xsp;
if (jj_3R_115()) {
jj_scanpos = xsp;
- if (jj_3R_116()) return true;
+ if (jj_3R_116()) {
+ jj_scanpos = xsp;
+ if (jj_3R_117()) return true;
}
}
}
xsp = jj_scanpos;
- if (jj_3R_117()) jj_scanpos = xsp;
+ if (jj_3R_118()) jj_scanpos = xsp;
xsp = jj_scanpos;
- if (jj_3R_118()) jj_scanpos = xsp;
+ if (jj_3R_119()) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_100() {
- if (jj_3R_107()) return true;
+ final private boolean jj_3R_101() {
+ if (jj_3R_108()) return true;
return false;
}
- final private boolean jj_3R_57() {
- if (jj_3R_65()) return true;
+ final private boolean jj_3R_61() {
+ if (jj_3R_66()) return true;
return false;
}
- final private boolean jj_3R_45() {
+ final private boolean jj_3R_60() {
+ if (jj_scan_token(TK_NOT)) return true;
+ if (jj_3R_52()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_48() {
if (jj_scan_token(40)) return true;
return false;
}
@@ -1705,33 +1704,37 @@
return false;
}
- final private boolean jj_3R_44() {
- if (jj_scan_token(34)) return true;
+ final private boolean jj_3R_52() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_60()) {
+ jj_scanpos = xsp;
+ if (jj_3R_61()) return true;
+ }
return false;
}
- final private boolean jj_3R_32() {
- if (jj_scan_token(41)) return true;
+ final private boolean jj_3R_47() {
+ if (jj_scan_token(34)) return true;
return false;
}
- final private boolean jj_3R_56() {
- if (jj_scan_token(TK_NOT)) return true;
- if (jj_3R_49()) return true;
+ final private boolean jj_3R_34() {
+ if (jj_scan_token(41)) return true;
return false;
}
- final private boolean jj_3R_31() {
+ final private boolean jj_3R_33() {
if (jj_scan_token(36)) return true;
return false;
}
- final private boolean jj_3R_30() {
+ final private boolean jj_3R_32() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_44()) {
+ if (jj_3R_47()) {
jj_scanpos = xsp;
- if (jj_3R_45()) return true;
+ if (jj_3R_48()) return true;
}
return false;
}
@@ -1745,29 +1748,33 @@
final private boolean jj_3R_18() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_31()) {
+ if (jj_3R_33()) {
jj_scanpos = xsp;
- if (jj_3R_32()) return true;
+ if (jj_3R_34()) return true;
}
return false;
}
- final private boolean jj_3R_49() {
+ final private boolean jj_3R_53() {
+ if (jj_scan_token(52)) return true;
+ if (jj_3R_38()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_38() {
+ if (jj_3R_52()) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_56()) {
- jj_scanpos = xsp;
- if (jj_3R_57()) return true;
- }
+ if (jj_3R_53()) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_29() {
+ final private boolean jj_3R_31() {
if (jj_scan_token(39)) return true;
return false;
}
- final private boolean jj_3R_28() {
+ final private boolean jj_3R_30() {
if (jj_scan_token(38)) return true;
return false;
}
@@ -1778,14 +1785,14 @@
return false;
}
- final private boolean jj_3R_27() {
+ final private boolean jj_3R_29() {
if (jj_scan_token(37)) return true;
return false;
}
- final private boolean jj_3R_50() {
- if (jj_scan_token(52)) return true;
- if (jj_3R_36()) return true;
+ final private boolean jj_3R_39() {
+...
[truncated message content] |
|
From: <jom...@us...> - 2015-12-08 20:19:46
|
Revision: 1864
http://sourceforge.net/p/jason/svn/1864
Author: jomifred
Date: 2015-12-08 20:19:43 +0000 (Tue, 08 Dec 2015)
Log Message:
-----------
update mind inspector to support name spaces
Modified Paths:
--------------
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/ASSyntax.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/LiteralImpl.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/test/NSTest.java
trunk/src/xml/agInspection.xsl
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSemantics/Unifier.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -362,7 +362,7 @@
Literal lvl = (Literal)vl;
if (! unifiesNamespace(vt, lvl) )
return false;
- if ( lvl.getNS() != Literal.DefaultNS)
+ if (lvl.getNS() != Literal.DefaultNS)
vl = lvl.cloneNS(Literal.DefaultNS);
}
@@ -370,7 +370,7 @@
vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone());
}
- function.put((VarTerm) vt.clone(), vl);
+ function.put((VarTerm) vt.cloneNS(Literal.DefaultNS), vl);
return true;
}
Modified: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -66,6 +66,7 @@
static {
keywords.add(new PredicateIndicator("atomic", 0));
+ keywords.add(new PredicateIndicator("default", 0));
keywords.add(new PredicateIndicator("source", 0));
keywords.add(new PredicateIndicator("self", 0));
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/Atom.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -64,7 +64,7 @@
public Atom(Atom namespace, Literal l) {
this.functor = l.getFunctor();
if (namespace.functor.equals("default")) // in case namespace is an ordinary Atom with functor "default", we need to replace by the Default NS
- this.ns = DefaultNS;
+ this.ns = DefaultNS; // TODO: not necessary, the parsers takes care of it
else
this.ns = namespace;
predicateIndicatorCache = l.predicateIndicatorCache;
@@ -172,7 +172,7 @@
public Element getAsDOM(Document document) {
Element u = (Element) document.createElement("structure");
u.setAttribute("functor",getFunctor());
- //u.setAttribute("name-space", getNS().toString());
+ u.setAttribute("name-space", getNS().getFunctor());
return u;
}
}
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/Literal.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -587,6 +587,16 @@
return this;
}
+ @Override
+ public Literal cloneNS(Atom newnamespace) {
+ return this;
+ }
+
+ @Override
+ public Atom getNS() {
+ return this;
+ }
+
public String toString() {
return getFunctor();
};
Modified: trunk/src/jason/asSyntax/LiteralImpl.java
===================================================================
--- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -63,7 +63,7 @@
// used by capply
protected LiteralImpl(Literal l, Unifier u) {
- super(l,u);
+ super(l, u);
type = !l.negated();
}
@@ -149,7 +149,7 @@
@Override
public Term capply(Unifier u) {
- return new LiteralImpl(this,u);
+ return new LiteralImpl(this, u);
}
public Literal cloneNS(Atom newNameSpace) {
@@ -175,6 +175,7 @@
@Override
public Element getAsDOM(Document document) {
Element u = (Element) document.createElement("literal");
+ u.setAttribute("name-space", getNS().getFunctor());
if (negated()) {
u.setAttribute("negated", negated()+"");
}
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/Pred.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -70,7 +70,7 @@
// used by capply
protected Pred(Literal l, Unifier u) {
- super(l,u);
+ super(l, u);
if (l.hasAnnot()) {
setAnnots( (ListTerm)l.getAnnots().capply(u) );
} else {
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -156,7 +156,7 @@
@Override
public Literal cloneNS(Atom newNameSpace) {
- return new VarTerm( newNameSpace, this);
+ return new VarTerm(newNameSpace, this);
}
public ListTerm cloneLT() {
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 20:19:43 UTC (rev 1864)
@@ -603,7 +603,9 @@
( (
// namespace
[ LOOKAHEAD(10)
- (tns = <ATOM> { if (!tns.image.equals("default"))
+ (tns = <ATOM> { if (tns.image.equals("default"))
+ NS = Literal.DefaultNS;
+ else
NS = new Atom(tns.image);
}
|
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -902,7 +902,9 @@
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ATOM:
tns = jj_consume_token(ATOM);
- if (!tns.image.equals("default"))
+ if (tns.image.equals("default"))
+ NS = Literal.DefaultNS;
+ else
NS = new Atom(tns.image);
break;
case VAR:
@@ -1647,13 +1649,19 @@
return false;
}
+ final private boolean jj_3R_61() {
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
final private boolean jj_3R_114() {
if (jj_3R_121()) return true;
return false;
}
- final private boolean jj_3R_61() {
- if (jj_3R_66()) return true;
+ final private boolean jj_3R_60() {
+ if (jj_scan_token(TK_NOT)) return true;
+ if (jj_3R_52()) return true;
return false;
}
@@ -1682,12 +1690,6 @@
return false;
}
- final private boolean jj_3R_60() {
- if (jj_scan_token(TK_NOT)) return true;
- if (jj_3R_52()) return true;
- return false;
- }
-
final private boolean jj_3R_52() {
Token xsp;
xsp = jj_scanpos;
@@ -1720,11 +1722,25 @@
return false;
}
+ final private boolean jj_3R_53() {
+ if (jj_scan_token(52)) return true;
+ if (jj_3R_38()) return true;
+ return false;
+ }
+
final private boolean jj_3R_33() {
if (jj_scan_token(36)) return true;
return false;
}
+ final private boolean jj_3R_38() {
+ if (jj_3R_52()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_53()) jj_scanpos = xsp;
+ return false;
+ }
+
final private boolean jj_3R_32() {
Token xsp;
xsp = jj_scanpos;
@@ -1735,12 +1751,6 @@
return false;
}
- final private boolean jj_3R_53() {
- if (jj_scan_token(52)) return true;
- if (jj_3R_38()) return true;
- return false;
- }
-
final private boolean jj_3R_17() {
if (jj_scan_token(35)) return true;
if (jj_3R_20()) return true;
@@ -1757,11 +1767,9 @@
return false;
}
- final private boolean jj_3R_38() {
- if (jj_3R_52()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_53()) jj_scanpos = xsp;
+ final private boolean jj_3R_39() {
+ if (jj_scan_token(50)) return true;
+ if (jj_3R_20()) return true;
return false;
}
@@ -1781,12 +1789,6 @@
return false;
}
- final private boolean jj_3R_39() {
- if (jj_scan_token(50)) return true;
- if (jj_3R_20()) return true;
- return false;
- }
-
final private boolean jj_3R_29() {
if (jj_scan_token(37)) return true;
return false;
@@ -1804,6 +1806,14 @@
return false;
}
+ final private boolean jj_3R_20() {
+ if (jj_3R_38()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_39()) jj_scanpos = xsp;
+ return false;
+ }
+
final private boolean jj_3R_16() {
Token xsp;
xsp = jj_scanpos;
@@ -1820,14 +1830,6 @@
return false;
}
- final private boolean jj_3R_20() {
- if (jj_3R_38()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_39()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_67() {
if (jj_scan_token(30)) return true;
Token xsp;
@@ -1902,14 +1904,6 @@
return false;
}
- final private boolean jj_3R_46() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_59()) jj_scanpos = xsp;
- if (jj_3R_16()) return true;
- return false;
- }
-
final private boolean jj_3R_56() {
if (jj_3R_42()) return true;
return false;
@@ -1929,6 +1923,14 @@
return false;
}
+ final private boolean jj_3R_46() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_59()) jj_scanpos = xsp;
+ if (jj_3R_16()) return true;
+ return false;
+ }
+
final private boolean jj_3R_75() {
if (jj_scan_token(48)) return true;
if (jj_3R_65()) return true;
@@ -1993,11 +1995,6 @@
return false;
}
- final private boolean jj_3R_45() {
- if (jj_scan_token(34)) return true;
- return false;
- }
-
final private boolean jj_3R_57() {
Token xsp;
xsp = jj_scanpos;
@@ -2011,6 +2008,11 @@
return false;
}
+ final private boolean jj_3R_45() {
+ if (jj_scan_token(34)) return true;
+ return false;
+ }
+
final private boolean jj_3R_120() {
if (jj_3R_19()) return true;
return false;
@@ -2021,16 +2023,6 @@
return false;
}
- final private boolean jj_3R_136() {
- if (jj_scan_token(37)) return true;
- return false;
- }
-
- final private boolean jj_3R_127() {
- if (jj_3R_67()) return true;
- return false;
- }
-
final private boolean jj_3R_79() {
if (jj_scan_token(48)) return true;
if (jj_3R_57()) return true;
@@ -2042,11 +2034,16 @@
return false;
}
- final private boolean jj_3R_139() {
- if (jj_scan_token(46)) return true;
+ final private boolean jj_3R_136() {
+ if (jj_scan_token(37)) return true;
return false;
}
+ final private boolean jj_3R_127() {
+ if (jj_3R_67()) return true;
+ return false;
+ }
+
final private boolean jj_3R_112() {
if (jj_scan_token(42)) return true;
if (jj_3R_20()) return true;
@@ -2054,11 +2051,6 @@
return false;
}
- final private boolean jj_3R_138() {
- if (jj_scan_token(45)) return true;
- return false;
- }
-
final private boolean jj_3R_41() {
if (jj_3R_57()) return true;
Token xsp;
@@ -2069,6 +2061,16 @@
return false;
}
+ final private boolean jj_3R_139() {
+ if (jj_scan_token(46)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_138() {
+ if (jj_scan_token(45)) return true;
+ return false;
+ }
+
final private boolean jj_3R_137() {
if (jj_scan_token(37)) return true;
return false;
@@ -2082,6 +2084,12 @@
return false;
}
+ final private boolean jj_3R_111() {
+ if (jj_scan_token(37)) return true;
+ if (jj_3R_102()) return true;
+ return false;
+ }
+
final private boolean jj_3R_135() {
Token xsp;
xsp = jj_scanpos;
@@ -2095,14 +2103,14 @@
return false;
}
- final private boolean jj_3R_111() {
- if (jj_scan_token(37)) return true;
- if (jj_3R_102()) return true;
+ final private boolean jj_3R_24() {
+ if (jj_3R_42()) return true;
return false;
}
- final private boolean jj_3R_24() {
- if (jj_3R_42()) return true;
+ final private boolean jj_3R_110() {
+ if (jj_scan_token(38)) return true;
+ if (jj_3R_102()) return true;
return false;
}
@@ -2119,12 +2127,6 @@
return false;
}
- final private boolean jj_3R_110() {
- if (jj_scan_token(38)) return true;
- if (jj_3R_102()) return true;
- return false;
- }
-
final private boolean jj_3R_44() {
if (jj_3R_19()) return true;
return false;
@@ -2171,18 +2173,6 @@
return false;
}
- final private boolean jj_3R_124() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_126()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_127()) {
- jj_scanpos = xsp;
- if (jj_3R_128()) return true;
- }
- return false;
- }
-
final private boolean jj_3R_102() {
Token xsp;
xsp = jj_scanpos;
@@ -2202,6 +2192,18 @@
return false;
}
+ final private boolean jj_3R_124() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_126()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_127()) {
+ jj_scanpos = xsp;
+ if (jj_3R_128()) return true;
+ }
+ return false;
+ }
+
final private boolean jj_3R_13() {
Token xsp;
xsp = jj_scanpos;
@@ -2322,6 +2324,11 @@
return false;
}
+ final private boolean jj_3R_49() {
+ if (jj_scan_token(TK_NEG)) return true;
+ return false;
+ }
+
final private boolean jj_3R_122() {
if (jj_scan_token(TK_FOR)) return true;
if (jj_scan_token(42)) return true;
@@ -2331,11 +2338,6 @@
return false;
}
- final private boolean jj_3R_49() {
- if (jj_scan_token(TK_NEG)) return true;
- return false;
- }
-
final private boolean jj_3R_100() {
if (jj_scan_token(38)) return true;
return false;
@@ -2362,11 +2364,6 @@
return false;
}
- final private boolean jj_3R_21() {
- if (jj_scan_token(ATOM)) return true;
- return false;
- }
-
final private boolean jj_3R_77() {
if (jj_3R_95()) return true;
Token xsp;
@@ -2377,6 +2374,11 @@
return false;
}
+ final private boolean jj_3R_21() {
+ if (jj_scan_token(ATOM)) return true;
+ return false;
+ }
+
final private boolean jj_3_4() {
Token xsp;
xsp = jj_scanpos;
@@ -2388,6 +2390,11 @@
return false;
}
+ final private boolean jj_3R_91() {
+ if (jj_3R_67()) return true;
+ return false;
+ }
+
final private boolean jj_3R_35() {
Token xsp;
xsp = jj_scanpos;
@@ -2402,11 +2409,16 @@
return false;
}
- final private boolean jj_3R_91() {
- if (jj_3R_67()) return true;
+ final private boolean jj_3R_90() {
+ if (jj_3R_42()) return true;
return false;
}
+ final private boolean jj_3R_89() {
+ if (jj_3R_78()) return true;
+ return false;
+ }
+
final private boolean jj_3R_19() {
Token xsp;
xsp = jj_scanpos;
@@ -2420,16 +2432,6 @@
return false;
}
- final private boolean jj_3R_90() {
- if (jj_3R_42()) return true;
- return false;
- }
-
- final private boolean jj_3R_89() {
- if (jj_3R_78()) return true;
- return false;
- }
-
final private boolean jj_3R_88() {
if (jj_3R_77()) return true;
return false;
@@ -2440,6 +2442,11 @@
return false;
}
+ final private boolean jj_3R_87() {
+ if (jj_scan_token(58)) return true;
+ return false;
+ }
+
final private boolean jj_3R_125() {
Token xsp;
xsp = jj_scanpos;
@@ -2448,16 +2455,6 @@
return false;
}
- final private boolean jj_3R_87() {
- if (jj_scan_token(58)) return true;
- return false;
- }
-
- final private boolean jj_3R_28() {
- if (jj_3R_46()) return true;
- return false;
- }
-
final private boolean jj_3R_86() {
if (jj_scan_token(57)) return true;
return false;
@@ -2468,6 +2465,11 @@
return false;
}
+ final private boolean jj_3R_28() {
+ if (jj_3R_46()) return true;
+ return false;
+ }
+
final private boolean jj_3R_84() {
if (jj_scan_token(55)) return true;
return false;
@@ -2483,6 +2485,16 @@
return false;
}
+ final private boolean jj_3R_81() {
+ if (jj_scan_token(53)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_80() {
+ if (jj_scan_token(45)) return true;
+ return false;
+ }
+
final private boolean jj_3R_27() {
if (jj_3R_45()) return true;
return false;
@@ -2500,16 +2512,6 @@
return false;
}
- final private boolean jj_3R_81() {
- if (jj_scan_token(53)) return true;
- return false;
- }
-
- final private boolean jj_3R_80() {
- if (jj_scan_token(45)) return true;
- return false;
- }
-
final private boolean jj_3R_74() {
Token xsp;
xsp = jj_scanpos;
@@ -2559,13 +2561,13 @@
return false;
}
- final private boolean jj_3R_25() {
- if (jj_3R_43()) return true;
+ final private boolean jj_3R_72() {
+ if (jj_3R_77()) return true;
return false;
}
- final private boolean jj_3R_72() {
- if (jj_3R_77()) return true;
+ final private boolean jj_3R_25() {
+ if (jj_3R_43()) return true;
return false;
}
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -29,7 +29,6 @@
import jason.asSyntax.Literal;
import jason.asSyntax.PredicateIndicator;
-import java.util.ArrayList;
import java.util.Deque;
import java.util.HashSet;
import java.util.Iterator;
@@ -54,17 +53,17 @@
* belsMap is a table where the key is the bel.getFunctorArity and the value
* is a list of literals with the same functorArity.
*/
- private Map<PredicateIndicator, BelEntry> belsMap = new ConcurrentHashMap<PredicateIndicator, BelEntry>();
+ private Map<PredicateIndicator, BelEntry> belsMapDefaultNS = new ConcurrentHashMap<PredicateIndicator, BelEntry>();
+ private Map<Atom, Map<PredicateIndicator, BelEntry>> nameSpaces = new ConcurrentHashMap<Atom, Map<PredicateIndicator,BelEntry>>();
+
private int size = 0;
/** set of beliefs with percept annot, used to improve performance of buf */
protected Set<Literal> percepts = new HashSet<Literal>();
- protected Set<Atom> nameSpaces = new HashSet<Atom>();
-
public DefaultBeliefBase() {
- nameSpaces.add(Literal.DefaultNS);
+ nameSpaces.put(Literal.DefaultNS, belsMapDefaultNS);
}
public void init(Agent ag, String[] args) {
@@ -74,7 +73,7 @@
}
public Set<Atom> getNameSpaces() {
- return nameSpaces;
+ return nameSpaces.keySet();
}
public void stop() {
@@ -87,7 +86,9 @@
public void clear() {
size = 0;
percepts.clear();
- belsMap.clear();
+ belsMapDefaultNS.clear();
+ nameSpaces.clear();
+ nameSpaces.put(Literal.DefaultNS, belsMapDefaultNS);
}
public Iterator<Literal> getPercepts() {
@@ -148,12 +149,10 @@
return true;
}
} else {
- BelEntry entry = belsMap.get(l.getPredicateIndicator());
- if (entry == null) {
- entry = new BelEntry();
- belsMap.put(l.getPredicateIndicator(), entry);
- }
+ // new bel
+
l = l.copy(); // we need to clone l for the consequent event to not have a ref to this bel (which may change before the event is processed); see bug from Viviana Marcardi
+ BelEntry entry = provideBelEntry(l);
entry.add(l, addInEnd);
// add it in the percepts list
@@ -161,15 +160,29 @@
percepts.add(l);
}
- if (l.getNS() != Literal.DefaultNS)
- nameSpaces.add(l.getNS());
-
size++;
return true;
}
return false;
}
+ private BelEntry provideBelEntry(Literal l) {
+ Map<PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS;
+ if (l.getNS() != Literal.DefaultNS) {
+ belsMap = nameSpaces.get(l.getNS());
+ if (belsMap == null) {
+ belsMap = new ConcurrentHashMap<PredicateIndicator, DefaultBeliefBase.BelEntry>();
+ nameSpaces.put(l.getNS(), belsMap);
+ }
+ }
+ BelEntry entry = belsMap.get(l.getPredicateIndicator());
+ if (entry == null) {
+ entry = new BelEntry();
+ belsMap.put(l.getPredicateIndicator(), entry);
+ }
+ return entry;
+ }
+
public boolean remove(Literal l) {
Literal bl = contains(l);
if (bl != null) {
@@ -181,8 +194,6 @@
boolean result = bl.delAnnots(l.getAnnots()); // note that l annots can be empty, in this case, nothing is deleted!
return removeFromEntry(bl) || result;
}
- } else {
- if (logger.isLoggable(Level.FINE)) logger.fine("Does not contain " + l + " in " + belsMap);
}
return false;
}
@@ -191,6 +202,7 @@
if (l.hasSource()) {
return false;
} else {
+ Map<PredicateIndicator, BelEntry> belsMap = l.getNS() == Literal.DefaultNS ? belsMapDefaultNS : nameSpaces.get(l.getNS());
PredicateIndicator key = l.getPredicateIndicator();
BelEntry entry = belsMap.get(key);
entry.remove(l);
@@ -203,36 +215,38 @@
}
public Iterator<Literal> iterator() {
- final Iterator<BelEntry> ibe = belsMap.values().iterator();
- if (ibe.hasNext()) {
- return new Iterator<Literal>() {
+ final Iterator<Map<PredicateIndicator, BelEntry>> ins = nameSpaces.values().iterator();
+ return new Iterator<Literal>() {
+
+ Iterator<BelEntry> ibe = ins.next().values().iterator();
+ Iterator<Literal> il = ibe.next().list.iterator();
+ Literal l;
+
+ public boolean hasNext() {
+ return il.hasNext();
+ }
- Iterator<Literal> il = ibe.next().list.iterator();
- Literal l;
-
- public boolean hasNext() {
- return il.hasNext();
+ public Literal next() {
+ l = il.next();
+ while (!il.hasNext() && ibe.hasNext()) {
+ il = ibe.next().list.iterator();
}
-
- public Literal next() {
- l = il.next();
- while (!il.hasNext() && ibe.hasNext()) {
- il = ibe.next().list.iterator();
- }
- return l;
+ while (!il.hasNext() && !ibe.hasNext() && ins.hasNext()) {
+ ibe = ins.next().values().iterator();
+ il = ibe.next().list.iterator();
}
+
+ return l;
+ }
- public void remove() {
- il.remove();
- if (l.hasAnnot(TPercept)) {
- percepts.remove(l);
- }
- size--;
+ public void remove() {
+ il.remove();
+ if (l.hasAnnot(TPercept)) {
+ percepts.remove(l);
}
- };
- } else {
- return new ArrayList<Literal>(0).iterator();
- }
+ size--;
+ }
+ };
}
/** @deprecated use iterator() instead of getAll */
@@ -241,7 +255,7 @@
}
public boolean abolish(PredicateIndicator pi) {
- BelEntry entry = belsMap.remove(pi);
+ BelEntry entry = belsMapDefaultNS.remove(pi); // TODO: consider other NS (?) this method is not used by jason
if (entry != null) {
size -= entry.size();
@@ -260,6 +274,9 @@
}
public Literal contains(Literal l) {
+ Map<PredicateIndicator, BelEntry> belsMap = l.getNS() == Literal.DefaultNS ? belsMapDefaultNS : nameSpaces.get(l.getNS());
+ if (belsMap == null)
+ return null;
BelEntry entry = belsMap.get(l.getPredicateIndicator());
if (entry == null) {
return null;
@@ -270,7 +287,7 @@
}
public Iterator<Literal> getCandidateBeliefs(PredicateIndicator pi) {
- BelEntry entry = belsMap.get(pi);
+ BelEntry entry = belsMapDefaultNS.get(pi); // TODO: consider other NS ? this method is not used by jason
if (entry != null)
//return Collections.unmodifiableList(entry.list).iterator();
return entry.list.iterator();
@@ -283,10 +300,21 @@
// all bels are relevant
return iterator();
} else {
+ Map<PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS;
+ if (l.getNS() != Literal.DefaultNS) {
+ Atom ns = l.getNS();
+ if (ns.isVar())
+ ns = (Atom)ns.capply(u);
+ if (ns.isVar()) { // still a var
+ return iterator();
+ }
+ belsMap = nameSpaces.get(ns);
+ }
+ if (belsMap == null)
+ return null;
BelEntry entry = belsMap.get(l.getPredicateIndicator());
if (entry != null) {
- //return Collections.unmodifiableList(entry.list).iterator();
- //System.out.println(l+ " ==> " + entry.list);
+ //System.out.println(l.getNS() + "::::"+ l+ " ==> " + entry.list);
return entry.list.iterator();
} else {
return null;
@@ -300,7 +328,7 @@
}
public String toString() {
- return belsMap.toString();
+ return nameSpaces.toString();
}
public BeliefBase clone() {
@@ -315,8 +343,20 @@
int tries = 0;
Element ebels = null;
while (tries < 10) { // max 10 tries
- ebels = (Element) document.createElement("beliefs");
- try {
+ try {
+ ebels = (Element) document.createElement("beliefs");
+ Element enss = (Element) document.createElement("name-spaces");
+ Element ens = (Element) document.createElement("name-space");
+ ens.setAttribute("id", "default"); // to ensure default is the first
+ enss.appendChild(ens);
+ for (Atom ns: getNameSpaces()) {
+ if (ns == Literal.DefaultNS)
+ continue;
+ ens = (Element) document.createElement("name-space");
+ ens.setAttribute("id", ns.getFunctor());
+ enss.appendChild(ens);
+ }
+ ebels.appendChild(enss);
for (Literal l: this)
ebels.appendChild(l.getAsDOM(document));
break; // quit the loop
Modified: trunk/src/test/NSTest.java
===================================================================
--- trunk/src/test/NSTest.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/test/NSTest.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -1,7 +1,5 @@
package test;
-import java.io.StringReader;
-
import jason.JasonException;
import jason.asSemantics.Agent;
import jason.asSemantics.Unifier;
@@ -12,6 +10,10 @@
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
+
+import java.io.StringReader;
+import java.util.Iterator;
+
import junit.framework.TestCase;
/** JUnit test case for syntax package */
@@ -134,7 +136,6 @@
u = new Unifier();
p6 = ASSyntax.parseLiteral("other::B");
u.unifies(p1, p6);
- System.out.println(u);
assertFalse(u.unifies(p1, p6));
}
@@ -152,6 +153,14 @@
t = t.capply(u);
assertEquals("ns::~bob(10)[a(20)]", t.toString());
+ Literal l = ASSyntax.parseLiteral("f(default)");
+ assertEquals(l.getTerm(0), Literal.DefaultNS);
+ assertTrue(l.getTerm(0) == Literal.DefaultNS);
+ Literal p = ASSyntax.parseLiteral("f(NS)");
+ u = new Unifier();
+ u.unifies(p, l);
+ p = (Literal)p.capply(u);
+ assertTrue(p.getTerm(0) == Literal.DefaultNS);
}
public void testConstants() throws ParseException {
@@ -197,7 +206,8 @@
}
public void testParserNS() throws ParseException, JasonException {
- as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). !g(ok). +!g(X) <- .print(kk, 10, X). "));
+
+ as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). ns71::b(30). default::b(40). !g(ok). +!g(X) <- .print(kk, 10, X). "));
parser.setNS(new Atom("ns33"));
Agent a = new Agent();
a.ini...
[truncated message content] |
|
From: <jom...@us...> - 2015-12-09 14:20:48
|
Revision: 1865
http://sourceforge.net/p/jason/svn/1865
Author: jomifred
Date: 2015-12-09 14:20:46 +0000 (Wed, 09 Dec 2015)
Log Message:
-----------
comment profiling code
Modified Paths:
--------------
trunk/src/jason/architecture/AgArch.java
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/test/BeliefBaseTest.java
Modified: trunk/src/jason/architecture/AgArch.java
===================================================================
--- trunk/src/jason/architecture/AgArch.java 2015-12-08 20:19:43 UTC (rev 1864)
+++ trunk/src/jason/architecture/AgArch.java 2015-12-09 14:20:46 UTC (rev 1865)
@@ -29,7 +29,6 @@
import jason.asSyntax.Literal;
import jason.infra.centralised.CentralisedAgArch;
import jason.mas2j.ClassParameters;
-import jason.profiling.QueryProfiling;
import jason.runtime.RuntimeServicesInfraTier;
import jason.runtime.Settings;
@@ -149,9 +148,9 @@
* when a new reasoning cycle is starting
*/
public void reasoningCycleStarting() {
- QueryProfiling q = getTS().getAg().getQueryProfiling();
- if (q != null)
- q.setNbReasoningCycles(getCycleNumber());
+ //QueryProfiling q = getTS().getAg().getQueryProfiling();
+ //if (q != null)
+ // q.setNbReasoningCycles(getCycleNumber());
if (successor != null)
successor.reasoningCycleStarting();
}
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2015-12-08 20:19:43 UTC (rev 1864)
+++ trunk/src/jason/asSemantics/Agent.java 2015-12-09 14:20:46 UTC (rev 1865)
@@ -49,7 +49,6 @@
import jason.functions.RuleToFunction;
import jason.jeditplugin.Config;
import jason.mas2j.ClassParameters;
-import jason.profiling.QueryProfiling;
import jason.runtime.Settings;
import java.io.File;
@@ -106,8 +105,8 @@
private static ScheduledExecutorService scheduler = null;
//private QueryCache qCache = null;
- private QueryCacheSimple qCache = null;
- private QueryProfiling qProfiling = null;
+ //private QueryCacheSimple qCache = null;
+ //private QueryProfiling qProfiling = null;
protected Logger logger = Logger.getLogger(Agent.class.getName());
@@ -162,8 +161,8 @@
if (ts == null) ts = new TransitionSystem(this, null, null, new AgArch());
//if (ts.getSettings().hasQueryCache()) qCache = new QueryCache(this);
- if (ts.getSettings().hasQueryProfiling()) qProfiling = new QueryProfiling(this);
- if (ts.getSettings().hasQueryCache()) qCache = new QueryCacheSimple(this, qProfiling);
+ //if (ts.getSettings().hasQueryProfiling()) qProfiling = new QueryProfiling(this);
+ //if (ts.getSettings().hasQueryCache()) qCache = new QueryCacheSimple(this, qProfiling);
if (! "false".equals(Config.get().getProperty(Config.START_WEB_MI))) MindInspectorWeb.get().registerAg(this);
}
@@ -273,8 +272,8 @@
public void stopAg() {
bb.stop();
- if (qProfiling != null)
- qProfiling.show();
+ //if (qProfiling != null)
+ // qProfiling.show();
//if (scheduler != null)
// scheduler.shutdownNow();
@@ -722,7 +721,7 @@
// stat
int adds = 0;
int dels = 0;
- long startTime = qProfiling == null ? 0 : System.nanoTime();
+ //long startTime = qProfiling == null ? 0 : System.nanoTime();
// deleting percepts in the BB that is not perceived anymore
Iterator<Literal> perceptsInBB = getBB().getPercepts();
@@ -790,19 +789,21 @@
}
}
- if (qCache != null)
- qCache.reset();
- if (qProfiling != null)
- qProfiling.newUpdateCycle(getTS().getUserAgArch().getCycleNumber(), adds+dels, System.nanoTime()-startTime);
+ //if (qCache != null)
+ // qCache.reset();
+ //if (qProfiling != null)
+ // qProfiling.newUpdateCycle(getTS().getUserAgArch().getCycleNumber(), adds+dels, System.nanoTime()-startTime);
return adds + dels;
}
+ /*
public QueryCacheSimple getQueryCache() {
return qCache;
}
public QueryProfiling getQueryProfiling() {
return qProfiling;
}
+ */
/**
* Returns true if BB contains the literal <i>bel</i> (using unification to test).
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2015-12-08 20:19:43 UTC (rev 1864)
+++ trunk/src/jason/asSyntax/Atom.java 2015-12-09 14:20:46 UTC (rev 1865)
@@ -63,10 +63,7 @@
public Atom(Atom namespace, Literal l) {
this.functor = l.getFunctor();
- if (namespace.functor.equals("default")) // in case namespace is an ordinary Atom with functor "default", we need to replace by the Default NS
- this.ns = DefaultNS; // TODO: not necessary, the parsers takes care of it
- else
- this.ns = namespace;
+ this.ns = namespace;
predicateIndicatorCache = l.predicateIndicatorCache;
hashCodeCache = l.hashCodeCache;
srcInfo = l.srcInfo;
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2015-12-08 20:19:43 UTC (rev 1864)
+++ trunk/src/jason/asSyntax/Literal.java 2015-12-09 14:20:46 UTC (rev 1865)
@@ -26,10 +26,8 @@
import jason.JasonException;
import jason.architecture.AgArch;
import jason.asSemantics.Agent;
-import jason.asSemantics.QueryCacheSimple;
import jason.asSemantics.Unifier;
import jason.asSyntax.parser.as2j;
-import jason.profiling.QueryProfiling;
import java.io.StringReader;
import java.util.ArrayList;
@@ -269,6 +267,7 @@
* Returns an iterator for all unifiers that are logCons.
*/
public Iterator<Unifier> logicalConsequence(final Agent ag, final Unifier un) {
+ /*
final QueryProfiling qProfiling;
final QueryCacheSimple qCache;
final long startTime;
@@ -286,7 +285,8 @@
qProfiling = null;
startTime = 0;
}
-
+ */
+
final Iterator<Literal> il = ag.getBB().getCandidateBeliefs(this, un);
if (il == null) // no relevant bels
return LogExpr.EMPTY_UNIF_LIST.iterator();
@@ -304,23 +304,22 @@
Iterator<List<Term>> annotsOptions = null;
Literal belInBB = null;
- Literal kForChache = null;
- Iterator<Unifier> cacheIt = null;
- //Literal cacheLit = null;
- //Unifier cacheUn = null;
- List<Unifier> cacheResults = null;
+ //Literal kForChache = null;
+ //Iterator<Unifier> cacheIt = null;
+ //List<Unifier> cacheResults = null;
public boolean hasNext() {
if (needsUpdate)
get();
+ /*
if (current == null) { // end of query
if (qCache != null && cacheResults != null)
qCache.queryFinished(kForChache, cacheResults);
if (qProfiling != null)
qProfiling.queryFinished(Literal.this, System.nanoTime() - startTime);
}
-
+ */
return current != null;
}
@@ -338,6 +337,7 @@
if (arch != null && !arch.isRunning()) return;
// try cache iterator
+ /*
if (cacheIt != null) {
while (cacheIt.hasNext()) {
Literal ltmp = (Literal)Literal.this.capply( cacheIt.next() );
@@ -352,6 +352,7 @@
cacheIt = null;
return; // do not try others after cache
}
+ */
// try annots iterator
@@ -381,15 +382,8 @@
Unifier unC = un.clone();
if (unC.unifiesNoUndo(Literal.this, rhead)) {
current = unC;
- /*if (kForChache != null) {
- Unifier uforC = new Unifier();
- if (uforC.unifiesNoUndo(kForChache, rhead))
- qCache.addAnswer(kForChache, uforC);
- cacheResults.add(uforC);
- }*/
- //System.out.println(" sol:"+unC+ " "+cacheResults);
- if (cacheResults != null)
- cacheResults.add(unC);
+ //if (cacheResults != null)
+ // cacheResults.add(unC);
return;
}
}
@@ -412,21 +406,9 @@
}
// try cache
+ /*
if (ag != null && qCache != null) {
- /*if (ag != null && qCache != null && kForChache == null) { // try cache only for the first rule (do not use cache for itself)
- kForChache = cloneAnnon;
- Pair<Literal,Iterator<Unifier>> pair = qCache.getCache(kForChache);
- if (pair != null) {
- cacheIt = pair.getSecond();
- cacheLit = pair.getFirst();
- //cacheUn = new Unifier();
- //cacheUn.unifies(cacheLit, Literal.this);
- //System.out.println("use un "+cacheUn+"/"+cacheLit+" for "+kForChache);
- get();
- return;
- }*/
kForChache = (Literal)Literal.this.capply(un);
- //System.out.println("try "+kForChache);
cacheIt = qCache.getCache(kForChache);
if (cacheIt != null) {
//System.out.println("use cache for "+kForChache);
@@ -437,6 +419,7 @@
//System.out.println("start collecting "+kForChache);
cacheResults = new ArrayList<Unifier>();
}
+ */
Unifier ruleUn = new Unifier();
if (ruleUn.unifiesNoUndo(cloneAnnon, rule)) { // the rule head unifies with the literal
Modified: trunk/src/test/BeliefBaseTest.java
===================================================================
--- trunk/src/test/BeliefBaseTest.java 2015-12-08 20:19:43 UTC (rev 1864)
+++ trunk/src/test/BeliefBaseTest.java 2015-12-09 14:20:46 UTC (rev 1865)
@@ -684,7 +684,7 @@
}
assertEquals(s1,s2);
- ag.getQueryCache().reset();
+ //ag.getQueryCache().reset();
q = ASSyntax.parseLiteral("p(x,B)");
s1 = "";
@@ -695,16 +695,10 @@
assertEquals(s1,s2);
// must have cache for the following
- assertNotNull(ag.getQueryCache().getCache(ASSyntax.parseLiteral("p(x,B)")));
- /*assertNotNull(ag.getQueryCache().getCache(ASSyntax.parseLiteral("p(x,II)")));
- assertNotNull(ag.getQueryCache().getCache(ASSyntax.parseLiteral("p(x,10)")));
-
- // must NOT have cache for the following
- assertNull(ag.getQueryCache().getCache(ASSyntax.parseLiteral("p(UU,II)")));
- */
+ //assertNotNull(ag.getQueryCache().getCache(ASSyntax.parseLiteral("p(x,B)")));
// test partial results
- ag.getQueryCache().reset();
+ //ag.getQueryCache().reset();
q = ASSyntax.parseLiteral("p(A,B)");
i = q.logicalConsequence(ag, new Unifier());
@@ -722,7 +716,7 @@
assertEquals("p(x,10)p(w,10)p(k,10)",s1);
// test order
- ag.getQueryCache().reset();
+ //ag.getQueryCache().reset();
q = ASSyntax.parseLiteral("p(x,10)");
i = q.logicalConsequence(ag, new Unifier());
while (i.hasNext()) {
@@ -781,6 +775,7 @@
}
assertEquals(s1,s2);
//System.out.println(ag.getQueryCache());
+ /*
ag.getQueryProfiling().newUpdateCycle(1,0,0);
i = q.logicalConsequence(ag, new Unifier());
@@ -791,6 +786,7 @@
ag.getQueryProfiling().newUpdateCycle(2,0,0);
assertTrue(1.0 <= ag.getQueryProfiling().getP());
ag.getQueryProfiling().show();
+ */
}
public void testGen() throws ParseException {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2016-01-04 15:15:42
|
Revision: 1869
http://sourceforge.net/p/jason/svn/1869
Author: jomifred
Date: 2016-01-04 15:15:40 +0000 (Mon, 04 Jan 2016)
Log Message:
-----------
fix bug reported by Federico Xella
Modified Paths:
--------------
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/mas2j/AgentParameters.java
trunk/src/test/NSTest.java
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-24 09:26:31 UTC (rev 1868)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2016-01-04 15:15:40 UTC (rev 1869)
@@ -609,7 +609,8 @@
NS = new Atom(tns.image);
}
|
- NS = var(NS) { if (NS.hasAnnot())
+ NS = var(Literal.DefaultNS)
+ { if (NS.hasAnnot())
throw new ParseException(getSourceRef(NS)+" name space cannot have annotations.");
}
)
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-24 09:26:31 UTC (rev 1868)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2016-01-04 15:15:40 UTC (rev 1869)
@@ -909,7 +909,7 @@
break;
case VAR:
case UNNAMEDVAR:
- NS = var(NS);
+ NS = var(Literal.DefaultNS);
if (NS.hasAnnot())
{if (true) throw new ParseException(getSourceRef(NS)+" name space cannot have annotations.");}
break;
@@ -1644,13 +1644,13 @@
return false;
}
- final private boolean jj_3R_115() {
- if (jj_3R_122()) return true;
+ final private boolean jj_3R_61() {
+ if (jj_3R_66()) return true;
return false;
}
- final private boolean jj_3R_61() {
- if (jj_3R_66()) return true;
+ final private boolean jj_3R_115() {
+ if (jj_3R_122()) return true;
return false;
}
@@ -1712,6 +1712,12 @@
return false;
}
+ final private boolean jj_3R_53() {
+ if (jj_scan_token(52)) return true;
+ if (jj_3R_38()) return true;
+ return false;
+ }
+
final private boolean jj_3R_47() {
if (jj_scan_token(34)) return true;
return false;
@@ -1722,9 +1728,11 @@
return false;
}
- final private boolean jj_3R_53() {
- if (jj_scan_token(52)) return true;
- if (jj_3R_38()) return true;
+ final private boolean jj_3R_38() {
+ if (jj_3R_52()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_53()) jj_scanpos = xsp;
return false;
}
@@ -1733,14 +1741,6 @@
return false;
}
- final private boolean jj_3R_38() {
- if (jj_3R_52()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_53()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_32() {
Token xsp;
xsp = jj_scanpos;
@@ -1794,6 +1794,14 @@
return false;
}
+ final private boolean jj_3R_20() {
+ if (jj_3R_38()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_39()) jj_scanpos = xsp;
+ return false;
+ }
+
final private boolean jj_3_2() {
Token xsp;
xsp = jj_scanpos;
@@ -1806,14 +1814,6 @@
return false;
}
- final private boolean jj_3R_20() {
- if (jj_3R_38()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_39()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_16() {
Token xsp;
xsp = jj_scanpos;
@@ -1899,13 +1899,13 @@
return false;
}
- final private boolean jj_3R_59() {
- if (jj_scan_token(TK_LABEL_AT)) return true;
+ final private boolean jj_3R_56() {
+ if (jj_3R_42()) return true;
return false;
}
- final private boolean jj_3R_56() {
- if (jj_3R_42()) return true;
+ final private boolean jj_3R_59() {
+ if (jj_scan_token(TK_LABEL_AT)) return true;
return false;
}
@@ -2008,18 +2008,13 @@
return false;
}
- final private boolean jj_3R_45() {
- if (jj_scan_token(34)) return true;
- return false;
- }
-
final private boolean jj_3R_120() {
if (jj_3R_19()) return true;
return false;
}
- final private boolean jj_3R_128() {
- if (jj_3R_20()) return true;
+ final private boolean jj_3R_45() {
+ if (jj_scan_token(34)) return true;
return false;
}
@@ -2029,11 +2024,23 @@
return false;
}
+ final private boolean jj_3R_128() {
+ if (jj_3R_20()) return true;
+ return false;
+ }
+
final private boolean jj_3R_113() {
if (jj_3R_120()) return true;
return false;
}
+ final private boolean jj_3R_112() {
+ if (jj_scan_token(42)) return true;
+ if (jj_3R_20()) return true;
+ if (jj_scan_token(43)) return true;
+ return false;
+ }
+
final private boolean jj_3R_136() {
if (jj_scan_token(37)) return true;
return false;
@@ -2044,13 +2051,6 @@
return false;
}
- final private boolean jj_3R_112() {
- if (jj_scan_token(42)) return true;
- if (jj_3R_20()) return true;
- if (jj_scan_token(43)) return true;
- return false;
- }
-
final private boolean jj_3R_41() {
if (jj_3R_57()) return true;
Token xsp;
@@ -2137,6 +2137,18 @@
return false;
}
+ final private boolean jj_3R_109() {
+ if (jj_scan_token(NUMBER)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_23() {
+ if (jj_scan_token(42)) return true;
+ if (jj_3R_41()) return true;
+ if (jj_scan_token(43)) return true;
+ return false;
+ }
+
final private boolean jj_3R_130() {
if (jj_scan_token(34)) return true;
return false;
@@ -2161,18 +2173,6 @@
return false;
}
- final private boolean jj_3R_109() {
- if (jj_scan_token(NUMBER)) return true;
- return false;
- }
-
- final private boolean jj_3R_23() {
- if (jj_scan_token(42)) return true;
- if (jj_3R_41()) return true;
- if (jj_scan_token(43)) return true;
- return false;
- }
-
final private boolean jj_3R_102() {
Token xsp;
xsp = jj_scanpos;
@@ -2252,13 +2252,13 @@
return false;
}
- final private boolean jj_3R_43() {
- if (jj_scan_token(30)) return true;
+ final private boolean jj_3R_107() {
+ if (jj_scan_token(TK_INTMOD)) return true;
return false;
}
- final private boolean jj_3R_107() {
- if (jj_scan_token(TK_INTMOD)) return true;
+ final private boolean jj_3R_43() {
+ if (jj_scan_token(30)) return true;
return false;
}
@@ -2348,11 +2348,6 @@
return false;
}
- final private boolean jj_3R_22() {
- if (jj_3R_40()) return true;
- return false;
- }
-
final private boolean jj_3R_96() {
Token xsp;
xsp = jj_scanpos;
@@ -2364,6 +2359,11 @@
return false;
}
+ final private boolean jj_3R_22() {
+ if (jj_3R_40()) return true;
+ return false;
+ }
+
final private boolean jj_3R_77() {
if (jj_3R_95()) return true;
Token xsp;
@@ -2395,6 +2395,11 @@
return false;
}
+ final private boolean jj_3R_90() {
+ if (jj_3R_42()) return true;
+ return false;
+ }
+
final private boolean jj_3R_35() {
Token xsp;
xsp = jj_scanpos;
@@ -2409,13 +2414,13 @@
return false;
}
- final private boolean jj_3R_90() {
- if (jj_3R_42()) return true;
+ final private boolean jj_3R_89() {
+ if (jj_3R_78()) return true;
return false;
}
- final private boolean jj_3R_89() {
- if (jj_3R_78()) return true;
+ final private boolean jj_3R_88() {
+ if (jj_3R_77()) return true;
return false;
}
@@ -2432,11 +2437,6 @@
return false;
}
- final private boolean jj_3R_88() {
- if (jj_3R_77()) return true;
- return false;
- }
-
final private boolean jj_3R_129() {
if (jj_scan_token(TK_ELSE)) return true;
return false;
@@ -2447,6 +2447,11 @@
return false;
}
+ final private boolean jj_3R_86() {
+ if (jj_scan_token(57)) return true;
+ return false;
+ }
+
final private boolean jj_3R_125() {
Token xsp;
xsp = jj_scanpos;
@@ -2455,13 +2460,13 @@
return false;
}
- final private boolean jj_3R_86() {
- if (jj_scan_token(57)) return true;
+ final private boolean jj_3R_85() {
+ if (jj_scan_token(56)) return true;
return false;
}
- final private boolean jj_3R_85() {
- if (jj_scan_token(56)) return true;
+ final private boolean jj_3R_84() {
+ if (jj_scan_token(55)) return true;
return false;
}
@@ -2470,11 +2475,6 @@
return false;
}
- final private boolean jj_3R_84() {
- if (jj_scan_token(55)) return true;
- return false;
- }
-
final private boolean jj_3R_83() {
if (jj_scan_token(54)) return true;
return false;
@@ -2551,13 +2551,13 @@
return false;
}
- final private boolean jj_3R_26() {
- if (jj_3R_44()) return true;
+ final private boolean jj_3R_73() {
+ if (jj_3R_78()) return true;
return false;
}
- final private boolean jj_3R_73() {
- if (jj_3R_78()) return true;
+ final private boolean jj_3R_26() {
+ if (jj_3R_44()) return true;
return false;
}
@@ -2571,6 +2571,18 @@
return false;
}
+ final private boolean jj_3R_66() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_72()) {
+ jj_scanpos = xsp;
+ if (jj_3R_73()) return true;
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_74()) jj_scanpos = xsp;
+ return false;
+ }
+
final private boolean jj_3R_14() {
Token xsp;
while (true) {
@@ -2593,18 +2605,6 @@
return false;
}
- final private boolean jj_3R_66() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_72()) {
- jj_scanpos = xsp;
- if (jj_3R_73()) return true;
- }
- xsp = jj_scanpos;
- if (jj_3R_74()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_119() {
if (jj_3R_108()) return true;
return false;
Modified: trunk/src/jason/mas2j/AgentParameters.java
===================================================================
--- trunk/src/jason/mas2j/AgentParameters.java 2015-12-24 09:26:31 UTC (rev 1868)
+++ trunk/src/jason/mas2j/AgentParameters.java 2016-01-04 15:15:40 UTC (rev 1869)
@@ -105,22 +105,31 @@
public void setAgClass(String c) {
- if (c != null) agClass = new ClassParameters(c);
+ if (c != null)
+ agClass = new ClassParameters(c);
}
public void addArchClass(String... cs) {
+ if (cs == null)
+ return;
for (String c: cs)
archClasses.add(new ClassParameters(c));
}
public void addArchClass(Collection<String> cs) {
+ if (cs == null)
+ return;
for (String c: cs)
archClasses.add(new ClassParameters(c));
}
public void addArchClass(ClassParameters... cps) {
+ if (cps == null)
+ return;
for (ClassParameters c: cps)
archClasses.add(c);
}
public void insertArchClass(ClassParameters... cps) {
+ if (cps == null)
+ return;
for (ClassParameters c: cps)
archClasses.add(0,c);
}
Modified: trunk/src/test/NSTest.java
===================================================================
--- trunk/src/test/NSTest.java 2015-12-24 09:26:31 UTC (rev 1868)
+++ trunk/src/test/NSTest.java 2016-01-04 15:15:40 UTC (rev 1869)
@@ -205,7 +205,7 @@
assertEquals(p1.compareTo(p1), 0);
}
- public void testParserNS() throws ParseException, JasonException {
+ public void testParserNS1() throws ParseException, JasonException {
as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). ns71::b(30). default::b(40). !g(ok). +!g(X) <- .print(kk, 10, X). "));
parser.setNS(new Atom("ns33"));
@@ -233,4 +233,13 @@
}
+ public void testParserNS2() throws ParseException, JasonException {
+
+ as2j parser = new as2j(new StringReader("+NS::tick <- .print(NS). "));
+ parser.setNS(new Atom("ns33"));
+ Agent a = new Agent();
+ a.initAg();
+ parser.agent(a);
+ assertTrue(a.getPL().toString().contains("[source(self)] +NS::tick <- .print(ns33::NS)."));
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2016-02-24 14:32:42
|
Revision: 1871
http://sourceforge.net/p/jason/svn/1871
Author: jomifred
Date: 2016-02-24 14:32:39 +0000 (Wed, 24 Feb 2016)
Log Message:
-----------
namespace directive
Modified Paths:
--------------
trunk/src/jason/asSyntax/directives/DirectiveProcessor.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/jeditplugin/Config.java
trunk/src/test/NSTest.java
Added Paths:
-----------
trunk/src/jason/asSyntax/directives/NameSpace.java
Modified: trunk/src/jason/asSyntax/directives/DirectiveProcessor.java
===================================================================
--- trunk/src/jason/asSyntax/directives/DirectiveProcessor.java 2016-02-21 11:55:00 UTC (rev 1870)
+++ trunk/src/jason/asSyntax/directives/DirectiveProcessor.java 2016-02-24 14:32:39 UTC (rev 1871)
@@ -46,6 +46,7 @@
static {
addDirective("include", new Include());
addDirective("register_function", new FunctionRegister());
+ addDirective("namespace", new NameSpace());
addDirective("dg", new DG());
addDirective("bdg", new BDG());
Added: trunk/src/jason/asSyntax/directives/NameSpace.java
===================================================================
--- trunk/src/jason/asSyntax/directives/NameSpace.java (rev 0)
+++ trunk/src/jason/asSyntax/directives/NameSpace.java 2016-02-24 14:32:39 UTC (rev 1871)
@@ -0,0 +1,51 @@
+package jason.asSyntax.directives;
+
+import jason.asSemantics.Agent;
+import jason.asSyntax.Atom;
+import jason.asSyntax.Pred;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** Implementation of the <code>namespace</code> directive. */
+public class NameSpace implements Directive {
+
+ //static Logger logger = Logger.getLogger(NameSpace.class.getName());
+
+ private Map<Atom,Atom> localNSs = new HashMap<Atom,Atom>();
+
+ public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
+ return innerContent;
+ }
+
+ public Atom declareNS(Pred directive) {
+ Atom ns = new Atom( ((Atom)directive.getTerm(0)).getFunctor() );
+ if (directive.getArity() > 1) {
+ String type = ((Atom)directive.getTerm(1)).getFunctor();
+ if (type.equals("local")) {
+ return addLocalNS(ns);
+ }
+ }
+ return ns;
+ }
+
+ public boolean isLocalNS(Atom ns) {
+ return localNSs.get(ns) != null;
+ }
+
+ public Atom map(Atom ns) {
+ Atom n = localNSs.get(ns);
+ if (n == null)
+ return ns;
+ else
+ return n;
+ }
+
+ static private int nsCounter = 0;
+ private synchronized Atom addLocalNS(Atom ns) {
+ nsCounter++;
+ Atom newNS = new Atom("#"+nsCounter+ns);
+ localNSs.put(ns,newNS);
+ return newNS;
+ }
+}
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2016-02-21 11:55:00 UTC (rev 1870)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2016-02-24 14:32:39 UTC (rev 1871)
@@ -50,9 +50,10 @@
import jason.jeditplugin.*;
public class as2j {
- private String asSource = null;
- private Agent curAg = null;
- private Atom namespace = Literal.DefaultNS;
+ private String asSource = null;
+ private Agent curAg = null;
+ private Atom namespace = Literal.DefaultNS;
+ private NameSpace nsDirective = new NameSpace();
private static Logger logger = Logger.getLogger("aslparser");
private static Set<String> parsedFiles = new HashSet<String>();
@@ -251,24 +252,34 @@
Agent resultOfDirective = null;
Agent bakAg = curAg;
boolean isEOF = false;
+ Atom oldNS = null;
}
{
"{"
( LOOKAHEAD(4)
<TK_BEGIN> dir = pred() "}"
- { Agent innerAg = new Agent(); innerAg.initAg(); }
+ { Agent innerAg = new Agent(); innerAg.initAg();
+ if (dir.getFunctor().equals("namespace")) {
+ Atom newNS = nsDirective.declareNS(dir); // to declare the namespace as local
+ oldNS = namespace;
+ setNS( newNS );
+ }
+ }
isEOF = agent(innerAg)
{ if (isEOF)
throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");
else
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, innerAg);
+ resultOfDirective = DirectiveProcessor.process(dir, outerAg, innerAg);
+ if (oldNS != null)
+ setNS( oldNS );
}
|
dir = pred() "}"
{ if (dir.toString().equals("end"))
return true;
- else
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, null);
+ if (dir.getFunctor().equals("namespace"))
+ nsDirective.declareNS(dir); // to declare the namespace as local
+ resultOfDirective = DirectiveProcessor.process(dir, outerAg, null);
}
)
{ if (resultOfDirective != null && outerAg != null) {
@@ -645,6 +656,7 @@
}
if (ASSyntax.isKeyword(F))
NS = Literal.DefaultNS;
+ NS = nsDirective.map(NS);
return new LiteralImpl(NS, type, F);
}
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2016-02-21 11:55:00 UTC (rev 1870)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2016-02-24 14:32:39 UTC (rev 1871)
@@ -19,9 +19,10 @@
import jason.jeditplugin.*;
public class as2j implements as2jConstants {
- private String asSource = null;
- private Agent curAg = null;
- private Atom namespace = Literal.DefaultNS;
+ private String asSource = null;
+ private Agent curAg = null;
+ private Atom namespace = Literal.DefaultNS;
+ private NameSpace nsDirective = new NameSpace();
private static Logger logger = Logger.getLogger("aslparser");
private static Set<String> parsedFiles = new HashSet<String>();
@@ -259,17 +260,25 @@
Agent resultOfDirective = null;
Agent bakAg = curAg;
boolean isEOF = false;
+ Atom oldNS = null;
jj_consume_token(30);
if (jj_2_1(4)) {
jj_consume_token(TK_BEGIN);
dir = pred();
jj_consume_token(31);
Agent innerAg = new Agent(); innerAg.initAg();
+ if (dir.getFunctor().equals("namespace")) {
+ Atom newNS = nsDirective.declareNS(dir); // to declare the namespace as local
+ oldNS = namespace;
+ setNS( newNS );
+ }
isEOF = agent(innerAg);
if (isEOF)
{if (true) throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");}
else
resultOfDirective = DirectiveProcessor.process(dir, outerAg, innerAg);
+ if (oldNS != null)
+ setNS( oldNS );
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TK_BEGIN:
@@ -279,8 +288,9 @@
jj_consume_token(31);
if (dir.toString().equals("end"))
{if (true) return true;}
- else
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, null);
+ if (dir.getFunctor().equals("namespace"))
+ nsDirective.declareNS(dir); // to declare the namespace as local
+ resultOfDirective = DirectiveProcessor.process(dir, outerAg, null);
break;
default:
jj_la1[8] = jj_gen;
@@ -977,6 +987,7 @@
}
if (ASSyntax.isKeyword(F))
NS = Literal.DefaultNS;
+ NS = nsDirective.map(NS);
{if (true) return new LiteralImpl(NS, type, F);}
throw new Error("Missing return statement in function");
@@ -1634,37 +1645,6 @@
finally { jj_save(3, xla); }
}
- final private boolean jj_3R_117() {
- if (jj_3R_124()) return true;
- return false;
- }
-
- final private boolean jj_3R_116() {
- if (jj_3R_123()) return true;
- return false;
- }
-
- final private boolean jj_3R_61() {
- if (jj_3R_66()) return true;
- return false;
- }
-
- final private boolean jj_3R_115() {
- if (jj_3R_122()) return true;
- return false;
- }
-
- final private boolean jj_3R_114() {
- if (jj_3R_121()) return true;
- return false;
- }
-
- final private boolean jj_3R_60() {
- if (jj_scan_token(TK_NOT)) return true;
- if (jj_3R_52()) return true;
- return false;
- }
-
final private boolean jj_3R_108() {
Token xsp;
xsp = jj_scanpos;
@@ -1700,6 +1680,12 @@
return false;
}
+ final private boolean jj_3R_53() {
+ if (jj_scan_token(52)) return true;
+ if (jj_3R_38()) return true;
+ return false;
+ }
+
final private boolean jj_3R_48() {
if (jj_scan_token(40)) return true;
return false;
@@ -1712,9 +1698,11 @@
return false;
}
- final private boolean jj_3R_53() {
- if (jj_scan_token(52)) return true;
- if (jj_3R_38()) return true;
+ final private boolean jj_3R_38() {
+ if (jj_3R_52()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_53()) jj_scanpos = xsp;
return false;
}
@@ -1728,14 +1716,6 @@
return false;
}
- final private boolean jj_3R_38() {
- if (jj_3R_52()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_53()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_33() {
if (jj_scan_token(36)) return true;
return false;
@@ -1751,6 +1731,12 @@
return false;
}
+ final private boolean jj_3R_39() {
+ if (jj_scan_token(50)) return true;
+ if (jj_3R_20()) return true;
+ return false;
+ }
+
final private boolean jj_3R_17() {
if (jj_scan_token(35)) return true;
if (jj_3R_20()) return true;
@@ -1767,12 +1753,6 @@
return false;
}
- final private boolean jj_3R_39() {
- if (jj_scan_token(50)) return true;
- if (jj_3R_20()) return true;
- return false;
- }
-
final private boolean jj_3R_31() {
if (jj_scan_token(39)) return true;
return false;
@@ -1789,11 +1769,6 @@
return false;
}
- final private boolean jj_3R_29() {
- if (jj_scan_token(37)) return true;
- return false;
- }
-
final private boolean jj_3R_20() {
if (jj_3R_38()) return true;
Token xsp;
@@ -1802,6 +1777,11 @@
return false;
}
+ final private boolean jj_3R_29() {
+ if (jj_scan_token(37)) return true;
+ return false;
+ }
+
final private boolean jj_3_2() {
Token xsp;
xsp = jj_scanpos;
@@ -1904,11 +1884,6 @@
return false;
}
- final private boolean jj_3R_59() {
- if (jj_scan_token(TK_LABEL_AT)) return true;
- return false;
- }
-
final private boolean jj_3R_76() {
if (jj_scan_token(50)) return true;
Token xsp;
@@ -1923,11 +1898,8 @@
return false;
}
- final private boolean jj_3R_46() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_59()) jj_scanpos = xsp;
- if (jj_3R_16()) return true;
+ final private boolean jj_3R_59() {
+ if (jj_scan_token(TK_LABEL_AT)) return true;
return false;
}
@@ -1942,6 +1914,14 @@
return false;
}
+ final private boolean jj_3R_46() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_59()) jj_scanpos = xsp;
+ if (jj_3R_16()) return true;
+ return false;
+ }
+
final private boolean jj_3R_54() {
if (jj_scan_token(VAR)) return true;
return false;
@@ -2024,13 +2004,13 @@
return false;
}
- final private boolean jj_3R_128() {
- if (jj_3R_20()) return true;
+ final private boolean jj_3R_113() {
+ if (jj_3R_120()) return true;
return false;
}
- final private boolean jj_3R_113() {
- if (jj_3R_120()) return true;
+ final private boolean jj_3R_128() {
+ if (jj_3R_20()) return true;
return false;
}
@@ -2041,6 +2021,16 @@
return false;
}
+ final private boolean jj_3R_41() {
+ if (jj_3R_57()) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_79()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
final private boolean jj_3R_136() {
if (jj_scan_token(37)) return true;
return false;
@@ -2051,16 +2041,6 @@
return false;
}
- final private boolean jj_3R_41() {
- if (jj_3R_57()) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_79()) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
final private boolean jj_3R_139() {
if (jj_scan_token(46)) return true;
return false;
@@ -2071,6 +2051,12 @@
return false;
}
+ final private boolean jj_3R_111() {
+ if (jj_scan_token(37)) return true;
+ if (jj_3R_102()) return true;
+ return false;
+ }
+
final private boolean jj_3R_137() {
if (jj_scan_token(37)) return true;
return false;
@@ -2084,12 +2070,6 @@
return false;
}
- final private boolean jj_3R_111() {
- if (jj_scan_token(37)) return true;
- if (jj_3R_102()) return true;
- return false;
- }
-
final private boolean jj_3R_135() {
Token xsp;
xsp = jj_scanpos;
@@ -2127,21 +2107,16 @@
return false;
}
- final private boolean jj_3R_44() {
- if (jj_3R_19()) return true;
+ final private boolean jj_3R_109() {
+ if (jj_scan_token(NUMBER)) return true;
return false;
}
- final private boolean jj_3R_131() {
- if (jj_scan_token(44)) return true;
+ final private boolean jj_3R_44() {
+ if (jj_3R_19()) return true;
return false;
}
- final private boolean jj_3R_109() {
- if (jj_scan_token(NUMBER)) return true;
- return false;
- }
-
final private boolean jj_3R_23() {
if (jj_scan_token(42)) return true;
if (jj_3R_41()) return true;
@@ -2149,6 +2124,11 @@
return false;
}
+ final private boolean jj_3R_131() {
+ if (jj_scan_token(44)) return true;
+ return false;
+ }
+
final private boolean jj_3R_130() {
if (jj_scan_token(34)) return true;
return false;
@@ -2244,24 +2224,11 @@
return false;
}
- final private boolean jj_3_1() {
- if (jj_scan_token(TK_BEGIN)) return true;
- if (jj_3R_13()) return true;
- if (jj_scan_token(31)) return true;
- if (jj_3R_14()) return true;
- return false;
- }
-
final private boolean jj_3R_107() {
if (jj_scan_token(TK_INTMOD)) return true;
return false;
}
- final private boolean jj_3R_43() {
- if (jj_scan_token(30)) return true;
- return false;
- }
-
final private boolean jj_3R_106() {
if (jj_scan_token(TK_INTDIV)) return true;
return false;
@@ -2294,11 +2261,6 @@
return false;
}
- final private boolean jj_3R_37() {
- if (jj_scan_token(TK_FALSE)) return true;
- return false;
- }
-
final private boolean jj_3R_95() {
if (jj_3R_97()) return true;
Token xsp;
@@ -2309,6 +2271,19 @@
return false;
}
+ final private boolean jj_3R_37() {
+ if (jj_scan_token(TK_FALSE)) return true;
+ return false;
+ }
+
+ final private boolean jj_3_1() {
+ if (jj_scan_token(TK_BEGIN)) return true;
+ if (jj_3R_13()) return true;
+ if (jj_scan_token(31)) return true;
+ if (jj_3R_14()) return true;
+ return false;
+ }
+
final private boolean jj_3R_36() {
if (jj_scan_token(TK_TRUE)) return true;
return false;
@@ -2319,6 +2294,11 @@
return false;
}
+ final private boolean jj_3R_43() {
+ if (jj_scan_token(30)) return true;
+ return false;
+ }
+
final private boolean jj_3R_50() {
if (jj_3R_13()) return true;
return false;
@@ -2400,6 +2380,11 @@
return false;
}
+ final private boolean jj_3R_89() {
+ if (jj_3R_78()) return true;
+ return false;
+ }
+
final private boolean jj_3R_35() {
Token xsp;
xsp = jj_scanpos;
@@ -2414,11 +2399,6 @@
return false;
}
- final private boolean jj_3R_89() {
- if (jj_3R_78()) return true;
- return false;
- }
-
final private boolean jj_3R_88() {
if (jj_3R_77()) return true;
return false;
@@ -2437,13 +2417,13 @@
return false;
}
- final private boolean jj_3R_129() {
- if (jj_scan_token(TK_ELSE)) return true;
+ final private boolean jj_3R_87() {
+ if (jj_scan_token(58)) return true;
return false;
}
- final private boolean jj_3R_87() {
- if (jj_scan_token(58)) return true;
+ final private boolean jj_3R_129() {
+ if (jj_scan_token(TK_ELSE)) return true;
return false;
}
@@ -2452,6 +2432,11 @@
return false;
}
+ final private boolean jj_3R_85() {
+ if (jj_scan_token(56)) return true;
+ return false;
+ }
+
final private boolean jj_3R_125() {
Token xsp;
xsp = jj_scanpos;
@@ -2460,21 +2445,11 @@
return false;
}
- final private boolean jj_3R_85() {
- if (jj_scan_token(56)) return true;
- return false;
- }
-
final private boolean jj_3R_84() {
if (jj_scan_token(55)) return true;
return false;
}
- final private boolean jj_3R_28() {
- if (jj_3R_46()) return true;
- return false;
- }
-
final private boolean jj_3R_83() {
if (jj_scan_token(54)) return true;
return false;
@@ -2495,23 +2470,6 @@
return false;
}
- final private boolean jj_3R_27() {
- if (jj_3R_45()) return true;
- return false;
- }
-
- final private boolean jj_3R_121() {
- if (jj_scan_token(TK_IF)) return true;
- if (jj_scan_token(42)) return true;
- if (jj_3R_20()) return true;
- if (jj_scan_token(43)) return true;
- if (jj_3R_67()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_125()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_74() {
Token xsp;
xsp = jj_scanpos;
@@ -2551,13 +2509,20 @@
return false;
}
- final private boolean jj_3R_73() {
- if (jj_3R_78()) return true;
+ final private boolean jj_3R_121() {
+ if (jj_scan_token(TK_IF)) return true;
+ if (jj_scan_token(42)) return true;
+ if (jj_3R_20()) return true;
+ if (jj_scan_token(43)) return true;
+ if (jj_3R_67()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_125()) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_26() {
- if (jj_3R_44()) return true;
+ final private boolean jj_3R_73() {
+ if (jj_3R_78()) return true;
return false;
}
@@ -2566,8 +2531,8 @@
return false;
}
- final private boolean jj_3R_25() {
- if (jj_3R_43()) return true;
+ final private boolean jj_3R_28() {
+ if (jj_3R_46()) return true;
return false;
}
@@ -2583,6 +2548,31 @@
return false;
}
+ final private boolean jj_3R_27() {
+ if (jj_3R_45()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_119() {
+ if (jj_3R_108()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_26() {
+ if (jj_3R_44()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_118() {
+ if (jj_scan_token(41)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_25() {
+ if (jj_3R_43()) return true;
+ return false;
+ }
+
final private boolean jj_3R_14() {
Token xsp;
while (true) {
@@ -2605,16 +2595,37 @@
return false;
}
- final private boolean jj_3R_119() {
- if (jj_3R_108()) return true;
+ final private boolean jj_3R_117() {
+ if (jj_3R_124()) return true;
return false;
}
- final private boolean jj_3R_118() {
- if (jj_scan_token(41)) return true;
+ final private boolean jj_3R_61() {
+ if (jj_3R_66()) return true;
return false;
}
+ final private boolean jj_3R_116() {
+ if (jj_3R_123()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_115() {
+ if (jj_3R_122()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_60() {
+ if (jj_scan_token(TK_NOT)) return true;
+ if (jj_3R_52()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_114() {
+ if (jj_3R_121()) return true;
+ return false;
+ }
+
public as2jTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
Modified: trunk/src/jason/jeditplugin/Config.java
===================================================================
--- trunk/src/jason/jeditplugin/Config.java 2016-02-21 11:55:00 UTC (rev 1870)
+++ trunk/src/jason/jeditplugin/Config.java 2016-02-24 14:32:39 UTC (rev 1871)
@@ -696,8 +696,11 @@
private String getJarFromEclipseInstallation(String file) {
String eclipse = System.getProperty("eclipse.launcher");
//eclipse = "/Applications/eclipse/eclipse";
- if (eclipse != null) {
- File f = new File( (new File(eclipse)).getParentFile()+"/"+getEclipseInstallationDirectory()+"/lib/"+file);
+ if (eclipse != null) {
+ File f = (new File(eclipse)).getParentFile().getParentFile();
+ if (eclipse.contains("Eclipse.app/Contents")) // MacOs case
+ f = f.getParentFile().getParentFile();
+ f = new File(f+"/"+getEclipseInstallationDirectory()+"/lib/"+file);
if (f.exists())
return f.getAbsolutePath();
}
Modified: trunk/src/test/NSTest.java
===================================================================
--- trunk/src/test/NSTest.java 2016-02-21 11:55:00 UTC (rev 1870)
+++ trunk/src/test/NSTest.java 2016-02-24 14:32:39 UTC (rev 1871)
@@ -242,4 +242,33 @@
parser.agent(a);
assertTrue(a.getPL().toString().contains("[source(self)] +NS::tick <- .print(ns33::NS)."));
}
+
+
+ public void testDirective() throws ParseException, JasonException {
+ as2j parser = new as2j(new StringReader(
+ "{begin namespace(ns1)}\n"+
+ " b1(t). "+
+ " +tick <- .print(t); !g(u). "+
+ "{end}\n"+
+ "{begin namespace(ns2,local)}\n"+
+ " b4(t). "+
+ " +tk <- .print(t); !g5(u). "+
+ "{end}\n"+
+ "b5(i)."+
+ "{namespace(ns3,local)}\n"+
+ "b2(t). +!g2(V) <- +b3(h); +ns1::tick; +ns2::tk; +ns3::b5(ns2::t). "
+ ));
+
+ Agent a = new Agent();
+ a.initAg();
+ parser.setNS(new Atom("nsd"));
+ parser.agent(a);
+ a.addInitialBelsInBB();
+ //System.out.println(a.getBB());
+ //System.out.println(a.getPL().toString());
+ assertTrue(a.getPL().toString().contains("+ns1::tick <- .print(ns1::t); !ns1::g(ns1::u)"));
+ assertTrue(a.getPL().toString().contains("+!nsd::g2(nsd::V) <- +nsd::b3(nsd::h); +ns1::tick; +#1ns2::tk; +#2ns3::b5(#1ns2::t)"));
+ assertTrue(a.getPL().toString().contains("+#1ns2::tk <- .print(#1ns2::t); !#1ns2::g5(#1ns2::u)"));
+
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2016-02-24 15:55:07
|
Revision: 1872
http://sourceforge.net/p/jason/svn/1872
Author: jomifred
Date: 2016-02-24 15:55:05 +0000 (Wed, 24 Feb 2016)
Log Message:
-----------
improve directive API
Modified Paths:
--------------
trunk/src/jason/asSyntax/directives/Directive.java
trunk/src/jason/asSyntax/directives/DirectiveProcessor.java
trunk/src/jason/asSyntax/directives/FunctionRegister.java
trunk/src/jason/asSyntax/directives/Include.java
trunk/src/jason/asSyntax/directives/NameSpace.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/asSyntax/patterns/goal/BC.java
trunk/src/jason/asSyntax/patterns/goal/DG.java
trunk/src/jason/asSyntax/patterns/goal/EBDG.java
trunk/src/jason/asSyntax/patterns/goal/MG.java
trunk/src/jason/asSyntax/patterns/goal/OMC.java
trunk/src/jason/asSyntax/patterns/goal/RC.java
trunk/src/jason/asSyntax/patterns/goal/SGA.java
trunk/src/jason/asSyntax/patterns/goal/SMC.java
trunk/src/test/ASParserTest.java
trunk/src/test/NSTest.java
Added Paths:
-----------
trunk/src/jason/asSyntax/directives/DefaultDirective.java
Added: trunk/src/jason/asSyntax/directives/DefaultDirective.java
===================================================================
--- trunk/src/jason/asSyntax/directives/DefaultDirective.java (rev 0)
+++ trunk/src/jason/asSyntax/directives/DefaultDirective.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -0,0 +1,24 @@
+package jason.asSyntax.directives;
+
+import jason.asSemantics.Agent;
+import jason.asSyntax.Pred;
+import jason.asSyntax.parser.as2j;
+
+public abstract class DefaultDirective implements Directive {
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ public void begin(Pred directive, as2j parser) {
+ }
+
+ public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
+ return innerContent;
+ }
+
+ public void end(Pred directive, as2j parser) {
+ }
+
+}
Modified: trunk/src/jason/asSyntax/directives/Directive.java
===================================================================
--- trunk/src/jason/asSyntax/directives/Directive.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/directives/Directive.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -2,6 +2,7 @@
import jason.asSemantics.Agent;
import jason.asSyntax.Pred;
+import jason.asSyntax.parser.as2j;
/**
* Interface for all compiler directives (e.g. include and goal patterns).
@@ -46,6 +47,9 @@
* @author jomi
*/
public interface Directive {
+ /** called when the directive is declared */
+ void begin(Pred directive, as2j parser);
+
/**
* This method is called to process the directive.
*
@@ -55,4 +59,10 @@
* @return the agent (plans, bels, ...) with the result of the directive.
*/
Agent process(Pred directive, Agent outerContent, Agent innerContent);
+
+ /** called when the directive ends */
+ void end(Pred directive, as2j parser);
+
+ /** returns true if the same instance will be used by all agents/parsers in the JVM */
+ boolean isSingleton();
}
Modified: trunk/src/jason/asSyntax/directives/DirectiveProcessor.java
===================================================================
--- trunk/src/jason/asSyntax/directives/DirectiveProcessor.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/directives/DirectiveProcessor.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -1,6 +1,5 @@
package jason.asSyntax.directives;
-import jason.asSemantics.Agent;
import jason.asSyntax.Pred;
import jason.asSyntax.patterns.goal.BC;
import jason.asSyntax.patterns.goal.BDG;
@@ -27,42 +26,101 @@
* @author jomi
*
*/
+@SuppressWarnings("rawtypes")
public class DirectiveProcessor {
static Logger logger = Logger.getLogger(DirectiveProcessor.class.getName());
- private static Map<String,Directive> directives = new HashMap<String,Directive>();
+ private static Map<String,Class> directives = new HashMap<String,Class>();
+ private Map<String,Directive> instances = new HashMap<String,Directive>();
+ private static Map<String,Directive> singletons = new HashMap<String,Directive>();
- public static void addDirective(String id, Directive d) {
+ public static void registerDirective(String id, Class d) {
directives.put(id,d);
}
+
public static Directive getDirective(String id) {
- return directives.get(id);
+ Directive d = singletons.get(id);
+ if (d != null)
+ return d;
+
+ // create the instance
+ Class c = directives.get(id);
+ if (c == null) {
+ logger.log(Level.SEVERE, "Unknown directive "+id);
+ return null;
+ }
+
+ try {
+ d = (Directive)c.newInstance();
+ if (d.isSingleton())
+ singletons.put(id, d);
+ return d;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
}
- public static Directive removeDirective(String id) {
- return directives.remove(id);
- }
+ //public static Directive removeDirective(String id) {
+ // return directives.remove(id);
+ //}
+
// add known directives
static {
- addDirective("include", new Include());
- addDirective("register_function", new FunctionRegister());
- addDirective("namespace", new NameSpace());
+ registerDirective("include", Include.class);
+ registerDirective("register_function", FunctionRegister.class);
+ registerDirective("namespace", NameSpace.class);
- addDirective("dg", new DG());
- addDirective("bdg", new BDG());
- addDirective("ebdg", new EBDG());
- addDirective("bc", new BC());
- addDirective("smc", new SMC());
- addDirective("rc", new RC());
- addDirective("omc", new OMC());
- addDirective("mg", new MG());
- addDirective("sga", new SGA());
+ registerDirective("dg", DG.class);
+ registerDirective("bdg", BDG.class);
+ registerDirective("ebdg",EBDG.class);
+ registerDirective("bc", BC.class);
+ registerDirective("smc", SMC.class);
+ registerDirective("rc", RC.class);
+ registerDirective("omc", OMC.class);
+ registerDirective("mg", MG.class);
+ registerDirective("sga", SGA.class);
}
- public static Agent process(Pred directive, Agent outerAg, Agent innerAg) {
+ public Directive getInstance(Pred directive) {
+ return getInstance(directive.getFunctor());
+ }
+
+ public Directive getInstance(String id) {
+ Directive d = instances.get(id);
+ if (d != null)
+ return d;
+
+ d = singletons.get(id);
+ if (d != null)
+ return d;
+
+ // create the instance
+ Class c = directives.get(id);
+ if (c == null) {
+ logger.log(Level.SEVERE, "Unknown directive "+id);
+ return null;
+ }
+
try {
- logger.fine("Processing directive "+directive);
- Directive d = directives.get(directive.getFunctor());
+ d = (Directive)c.newInstance();
+ if (d.isSingleton())
+ singletons.put(id, d);
+ else
+ instances.put(id, d);
+ return d;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+/*
+ public Agent process(Pred directive, Agent outerAg, Agent innerAg) {
+ try {
+ //logger.fine("Processing directive "+directive);
+ Directive d = get(directive.getFunctor());
if (d != null) {
return d.process(directive, outerAg, innerAg);
} else {
@@ -73,5 +131,6 @@
}
return null;
}
-
+*/
+
}
Modified: trunk/src/jason/asSyntax/directives/FunctionRegister.java
===================================================================
--- trunk/src/jason/asSyntax/directives/FunctionRegister.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/directives/FunctionRegister.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -32,7 +32,7 @@
*
* @author Jomi
*/
-public class FunctionRegister implements Directive {
+public class FunctionRegister extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(FunctionRegister.class.getName());
private static Map<String,ArithFunction> functions = new HashMap<String,ArithFunction>();
Modified: trunk/src/jason/asSyntax/directives/Include.java
===================================================================
--- trunk/src/jason/asSyntax/directives/Include.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/directives/Include.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -18,7 +18,7 @@
import java.util.logging.Logger;
/** Implementation of the <code>include</code> directive. */
-public class Include implements Directive {
+public class Include extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(Include.class.getName());
public static final String CRPrefix = "ClassResource:";
Modified: trunk/src/jason/asSyntax/directives/NameSpace.java
===================================================================
--- trunk/src/jason/asSyntax/directives/NameSpace.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/directives/NameSpace.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -3,9 +3,11 @@
import jason.asSemantics.Agent;
import jason.asSyntax.Atom;
import jason.asSyntax.Pred;
+import jason.asSyntax.parser.as2j;
import java.util.HashMap;
import java.util.Map;
+import java.util.Stack;
/** Implementation of the <code>namespace</code> directive. */
public class NameSpace implements Directive {
@@ -14,21 +16,39 @@
private Map<Atom,Atom> localNSs = new HashMap<Atom,Atom>();
+ @Override
+ public boolean isSingleton() {
+ return false;
+ }
+
+ @Override
public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
return innerContent;
}
- public Atom declareNS(Pred directive) {
+ Stack<Atom> oldNS = new Stack<Atom>();
+
+ @Override
+ public void begin(Pred directive, as2j parser) {
+ oldNS.push(parser.getNS());
Atom ns = new Atom( ((Atom)directive.getTerm(0)).getFunctor() );
if (directive.getArity() > 1) {
String type = ((Atom)directive.getTerm(1)).getFunctor();
if (type.equals("local")) {
- return addLocalNS(ns);
+ ns = addLocalNS(ns);
}
}
- return ns;
+ parser.setNS(ns);
+ //return ns;
}
+ @Override
+ public void end(Pred directive, as2j parser) {
+ Atom ns = oldNS.pop();
+ if (ns != null)
+ parser.setNS(ns);
+ }
+
public boolean isLocalNS(Atom ns) {
return localNSs.get(ns) != null;
}
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2016-02-24 15:55:05 UTC (rev 1872)
@@ -53,7 +53,8 @@
private String asSource = null;
private Agent curAg = null;
private Atom namespace = Literal.DefaultNS;
- private NameSpace nsDirective = new NameSpace();
+ private DirectiveProcessor directiveProcessor = new DirectiveProcessor();
+ private NameSpace nsDirective = (NameSpace)directiveProcessor.getInstance("namespace");
private static Logger logger = Logger.getLogger("aslparser");
private static Set<String> parsedFiles = new HashSet<String>();
@@ -61,7 +62,8 @@
public void setAg(Agent ag) { curAg = ag; }
public void setNS(Atom ns) { namespace = ns; }
-
+ public Atom getNS() { return namespace; }
+
private String getSourceRef(SourceInfo s) {
if (s == null)
return "[]";
@@ -259,27 +261,23 @@
( LOOKAHEAD(4)
<TK_BEGIN> dir = pred() "}"
{ Agent innerAg = new Agent(); innerAg.initAg();
- if (dir.getFunctor().equals("namespace")) {
- Atom newNS = nsDirective.declareNS(dir); // to declare the namespace as local
- oldNS = namespace;
- setNS( newNS );
- }
+ directiveProcessor.getInstance(dir).begin(dir,this);
}
isEOF = agent(innerAg)
{ if (isEOF)
throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");
- else
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, innerAg);
- if (oldNS != null)
- setNS( oldNS );
+
+ resultOfDirective = directiveProcessor.getInstance(dir).process(dir, outerAg, innerAg);
+ directiveProcessor.getInstance(dir).end(dir,this);
}
|
dir = pred() "}"
{ if (dir.toString().equals("end"))
return true;
- if (dir.getFunctor().equals("namespace"))
- nsDirective.declareNS(dir); // to declare the namespace as local
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, null);
+ Directive d = directiveProcessor.getInstance(dir);
+ d.begin(dir, this); // to declare the namespace as local
+ resultOfDirective = d.process(dir, outerAg, null);
+ d.end(dir, this);
}
)
{ if (resultOfDirective != null && outerAg != null) {
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -22,7 +22,8 @@
private String asSource = null;
private Agent curAg = null;
private Atom namespace = Literal.DefaultNS;
- private NameSpace nsDirective = new NameSpace();
+ private DirectiveProcessor directiveProcessor = new DirectiveProcessor();
+ private NameSpace nsDirective = (NameSpace)directiveProcessor.getInstance("namespace");
private static Logger logger = Logger.getLogger("aslparser");
private static Set<String> parsedFiles = new HashSet<String>();
@@ -30,6 +31,7 @@
public void setAg(Agent ag) { curAg = ag; }
public void setNS(Atom ns) { namespace = ns; }
+ public Atom getNS() { return namespace; }
private String getSourceRef(SourceInfo s) {
if (s == null)
@@ -267,18 +269,13 @@
dir = pred();
jj_consume_token(31);
Agent innerAg = new Agent(); innerAg.initAg();
- if (dir.getFunctor().equals("namespace")) {
- Atom newNS = nsDirective.declareNS(dir); // to declare the namespace as local
- oldNS = namespace;
- setNS( newNS );
- }
+ directiveProcessor.getInstance(dir).begin(dir,this);
isEOF = agent(innerAg);
if (isEOF)
{if (true) throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");}
- else
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, innerAg);
- if (oldNS != null)
- setNS( oldNS );
+
+ resultOfDirective = directiveProcessor.getInstance(dir).process(dir, outerAg, innerAg);
+ directiveProcessor.getInstance(dir).end(dir,this);
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TK_BEGIN:
@@ -288,9 +285,10 @@
jj_consume_token(31);
if (dir.toString().equals("end"))
{if (true) return true;}
- if (dir.getFunctor().equals("namespace"))
- nsDirective.declareNS(dir); // to declare the namespace as local
- resultOfDirective = DirectiveProcessor.process(dir, outerAg, null);
+ Directive d = directiveProcessor.getInstance(dir);
+ d.begin(dir, this); // to declare the namespace as local
+ resultOfDirective = d.process(dir, outerAg, null);
+ d.end(dir, this);
break;
default:
jj_la1[8] = jj_gen;
@@ -1645,6 +1643,22 @@
finally { jj_save(3, xla); }
}
+ final private boolean jj_3R_115() {
+ if (jj_3R_122()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_60() {
+ if (jj_scan_token(TK_NOT)) return true;
+ if (jj_3R_52()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_114() {
+ if (jj_3R_121()) return true;
+ return false;
+ }
+
final private boolean jj_3R_108() {
Token xsp;
xsp = jj_scanpos;
@@ -2244,6 +2258,14 @@
return false;
}
+ final private boolean jj_3_1() {
+ if (jj_scan_token(TK_BEGIN)) return true;
+ if (jj_3R_13()) return true;
+ if (jj_scan_token(31)) return true;
+ if (jj_3R_14()) return true;
+ return false;
+ }
+
final private boolean jj_3R_98() {
Token xsp;
xsp = jj_scanpos;
@@ -2271,16 +2293,13 @@
return false;
}
- final private boolean jj_3R_37() {
- if (jj_scan_token(TK_FALSE)) return true;
+ final private boolean jj_3R_43() {
+ if (jj_scan_token(30)) return true;
return false;
}
- final private boolean jj_3_1() {
- if (jj_scan_token(TK_BEGIN)) return true;
- if (jj_3R_13()) return true;
- if (jj_scan_token(31)) return true;
- if (jj_3R_14()) return true;
+ final private boolean jj_3R_37() {
+ if (jj_scan_token(TK_FALSE)) return true;
return false;
}
@@ -2294,11 +2313,6 @@
return false;
}
- final private boolean jj_3R_43() {
- if (jj_scan_token(30)) return true;
- return false;
- }
-
final private boolean jj_3R_50() {
if (jj_3R_13()) return true;
return false;
@@ -2521,6 +2535,11 @@
return false;
}
+ final private boolean jj_3R_28() {
+ if (jj_3R_46()) return true;
+ return false;
+ }
+
final private boolean jj_3R_73() {
if (jj_3R_78()) return true;
return false;
@@ -2531,8 +2550,8 @@
return false;
}
- final private boolean jj_3R_28() {
- if (jj_3R_46()) return true;
+ final private boolean jj_3R_27() {
+ if (jj_3R_45()) return true;
return false;
}
@@ -2548,28 +2567,18 @@
return false;
}
- final private boolean jj_3R_27() {
- if (jj_3R_45()) return true;
- return false;
- }
-
- final private boolean jj_3R_119() {
- if (jj_3R_108()) return true;
- return false;
- }
-
final private boolean jj_3R_26() {
if (jj_3R_44()) return true;
return false;
}
- final private boolean jj_3R_118() {
- if (jj_scan_token(41)) return true;
+ final private boolean jj_3R_25() {
+ if (jj_3R_43()) return true;
return false;
}
- final private boolean jj_3R_25() {
- if (jj_3R_43()) return true;
+ final private boolean jj_3R_119() {
+ if (jj_3R_108()) return true;
return false;
}
@@ -2595,6 +2604,11 @@
return false;
}
+ final private boolean jj_3R_118() {
+ if (jj_scan_token(41)) return true;
+ return false;
+ }
+
final private boolean jj_3R_117() {
if (jj_3R_124()) return true;
return false;
@@ -2610,22 +2624,6 @@
return false;
}
- final private boolean jj_3R_115() {
- if (jj_3R_122()) return true;
- return false;
- }
-
- final private boolean jj_3R_60() {
- if (jj_scan_token(TK_NOT)) return true;
- if (jj_3R_52()) return true;
- return false;
- }
-
- final private boolean jj_3R_114() {
- if (jj_3R_121()) return true;
- return false;
- }
-
public as2jTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
Modified: trunk/src/jason/asSyntax/patterns/goal/BC.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/BC.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/BC.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -4,6 +4,7 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Pred;
import jason.asSyntax.Term;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import jason.asSyntax.directives.DirectiveProcessor;
@@ -15,7 +16,7 @@
*
* @author jomi
*/
-public class BC implements Directive {
+public class BC extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(BC.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/DG.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/DG.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/DG.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -9,6 +9,7 @@
import jason.asSyntax.Plan;
import jason.asSyntax.Pred;
import jason.asSyntax.PlanBody.BodyType;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import java.util.logging.Level;
@@ -19,7 +20,7 @@
*
* @author jomi
*/
-public class DG implements Directive {
+public class DG extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(DG.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/EBDG.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/EBDG.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/EBDG.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -12,6 +12,7 @@
import jason.asSyntax.Pred;
import jason.asSyntax.LogExpr.LogicalOp;
import jason.asSyntax.PlanBody.BodyType;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import java.util.logging.Level;
@@ -22,7 +23,7 @@
*
* @author jomi
*/
-public class EBDG implements Directive {
+public class EBDG extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(EBDG.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/MG.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/MG.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/MG.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -4,6 +4,7 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Literal;
import jason.asSyntax.Pred;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import jason.asSyntax.directives.DirectiveProcessor;
import jason.bb.BeliefBase;
@@ -16,7 +17,7 @@
*
* @author jomi
*/
-public class MG implements Directive {
+public class MG extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(MG.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/OMC.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/OMC.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/OMC.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -6,6 +6,7 @@
import jason.asSyntax.Pred;
import jason.asSyntax.SourceInfo;
import jason.asSyntax.Term;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import jason.asSyntax.directives.DirectiveProcessor;
@@ -17,7 +18,7 @@
*
* @author jomi
*/
-public class OMC implements Directive {
+public class OMC extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(OMC.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/RC.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/RC.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/RC.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -4,6 +4,7 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Pred;
import jason.asSyntax.Term;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import jason.asSyntax.directives.DirectiveProcessor;
@@ -15,7 +16,7 @@
*
* @author jomi
*/
-public class RC implements Directive {
+public class RC extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(RC.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/SGA.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/SGA.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/SGA.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -8,6 +8,7 @@
import jason.asSyntax.StringTerm;
import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import java.util.logging.Level;
@@ -18,7 +19,7 @@
*
* @author jomi
*/
-public class SGA implements Directive {
+public class SGA extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(SGA.class.getName());
Modified: trunk/src/jason/asSyntax/patterns/goal/SMC.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/SMC.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/jason/asSyntax/patterns/goal/SMC.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -4,6 +4,7 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Pred;
import jason.asSyntax.Term;
+import jason.asSyntax.directives.DefaultDirective;
import jason.asSyntax.directives.Directive;
import jason.asSyntax.directives.DirectiveProcessor;
@@ -15,7 +16,7 @@
*
* @author jomi
*/
-public class SMC implements Directive {
+public class SMC extends DefaultDirective implements Directive {
static Logger logger = Logger.getLogger(SMC.class.getName());
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/test/ASParserTest.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -326,6 +326,7 @@
parseDir(f);
} else if (f.getName().endsWith(MAS2JProject.AS_EXT)) {
if (f.getName().equals("search.asl")) continue; // ignore this file
+ if (f.getName().equals("b.asl")) continue; // ignore this file
as2j parser = new as2j(new FileInputStream(f));
//Agent ag = new Agent();
//ag.init();
Modified: trunk/src/test/NSTest.java
===================================================================
--- trunk/src/test/NSTest.java 2016-02-24 14:32:39 UTC (rev 1871)
+++ trunk/src/test/NSTest.java 2016-02-24 15:55:05 UTC (rev 1872)
@@ -6,6 +6,7 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
+import jason.asSyntax.Plan;
import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
@@ -252,7 +253,7 @@
"{end}\n"+
"{begin namespace(ns2,local)}\n"+
" b4(t). "+
- " +tk <- .print(t); !g5(u). "+
+ " +tk <- .print(t); +ns1::tick; !g5(u). "+
"{end}\n"+
"b5(i)."+
"{namespace(ns3,local)}\n"+
@@ -265,10 +266,11 @@
parser.agent(a);
a.addInitialBelsInBB();
//System.out.println(a.getBB());
- //System.out.println(a.getPL().toString());
+ for (Plan p: a.getPL())
+ System.out.println(p);
assertTrue(a.getPL().toString().contains("+ns1::tick <- .print(ns1::t); !ns1::g(ns1::u)"));
+ assertTrue(a.getPL().toString().contains("+#1ns2::tk <- .print(#1ns2::t); +ns1::tick; !#1ns2::g5(#1ns2::u)"));
assertTrue(a.getPL().toString().contains("+!nsd::g2(nsd::V) <- +nsd::b3(nsd::h); +ns1::tick; +#1ns2::tk; +#2ns3::b5(#1ns2::t)"));
- assertTrue(a.getPL().toString().contains("+#1ns2::tk <- .print(#1ns2::t); !#1ns2::g5(#1ns2::u)"));
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2016-04-11 18:35:39
|
Revision: 1898
http://sourceforge.net/p/jason/svn/1898
Author: jomifred
Date: 2016-04-11 18:35:36 +0000 (Mon, 11 Apr 2016)
Log Message:
-----------
change env template to illustrate informAgsEnvironmentChanged
Modified Paths:
--------------
trunk/src/jason/infra/centralised/CentralisedAgArchAsynchronous.java
trunk/src/templates/environment
Modified: trunk/src/jason/infra/centralised/CentralisedAgArchAsynchronous.java
===================================================================
--- trunk/src/jason/infra/centralised/CentralisedAgArchAsynchronous.java 2016-04-11 18:09:37 UTC (rev 1897)
+++ trunk/src/jason/infra/centralised/CentralisedAgArchAsynchronous.java 2016-04-11 18:35:36 UTC (rev 1898)
@@ -1,12 +1,10 @@
package jason.infra.centralised;
-import java.util.Collection;
import java.util.concurrent.ExecutorService;
import jason.asSemantics.ActionExec;
import jason.asSemantics.CircumstanceListener;
import jason.asSemantics.Message;
-import jason.asSyntax.Literal;
import jason.infra.components.ActComponent;
import jason.infra.components.DeliberateComponent;
import jason.infra.components.SenseComponent;
Modified: trunk/src/templates/environment
===================================================================
--- trunk/src/templates/environment 2016-04-11 18:09:37 UTC (rev 1897)
+++ trunk/src/templates/environment 2016-04-11 18:35:36 UTC (rev 1898)
@@ -12,13 +12,16 @@
@Override
public void init(String[] args) {
super.init(args);
- addPercept(Literal.parseLiteral("percept(demo)"));
+ addPercept(ASSyntax.parseLiteral("percept(demo)"));
}
@Override
public boolean executeAction(String agName, Structure action) {
logger.info("executing: "+action+", but not implemented!");
- return true;
+ if (true) { // you may improve this condition
+ informAgsEnvironmentChanged();
+ }
+ return true; // the action was executed with success
}
/** Called before the end of MAS execution */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|