summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-08-30 11:22:16 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-08-30 11:22:16 +0200
commitaebd8f1bd52495b0a787e0cccfa4501141eace2b (patch)
treef2c0339b6cb0767fd858ea21523fd18f1bfdd075
parent882d605d684abf7120a1b5b095e7f5425e77dd34 (diff)
Outputs are now generated.
-rw-r--r--instance-calculator/Makefile2
-rw-r--r--instance-calculator/src/Instances.java22
-rw-r--r--instance-calculator/src/Main.java3
-rw-r--r--instance-calculator/src/ModelFile.java16
-rw-r--r--instance-calculator/src/OutputFile.java135
-rw-r--r--instance-calculator/src/Parameters.java17
-rw-r--r--instance-calculator/src/VHDLArchitecture.java31
-rw-r--r--instance-calculator/src/VHDLComponent.java31
-rw-r--r--instance-calculator/src/VHDLEntity.java17
-rw-r--r--instance-calculator/src/VHDLProcess.java63
-rw-r--r--instance-calculator/src/VHDLWaveform.java51
11 files changed, 350 insertions, 38 deletions
diff --git a/instance-calculator/Makefile b/instance-calculator/Makefile
index 356b681..25d31cc 100644
--- a/instance-calculator/Makefile
+++ b/instance-calculator/Makefile
@@ -67,7 +67,7 @@ clean_solutions:
$(JAVAC) -cp $(CLASSPATH) $<
$(OUTPUT_FILE): $(MODEL_FILE) $(CLASSES)
- $(JAVA) -cp $(CLASSPATH) Main $(MODEL_FILE) "inst_" $@
+ $(JAVA) -cp $(CLASSPATH) Main $(MODEL_FILE) "inst_" $(INSTANCE_MODEL_DIR)
$(INSTANCE_MODEL_DIR):
mkdir -p $(INSTANCE_MODEL_DIR)
diff --git a/instance-calculator/src/Instances.java b/instance-calculator/src/Instances.java
index 5d6ec8b..d4954d9 100644
--- a/instance-calculator/src/Instances.java
+++ b/instance-calculator/src/Instances.java
@@ -2,11 +2,13 @@ import java.util.*;
public class Instances
{
- private static final Map<Integer, String> instances;
+ private static final Map<Integer, String> INSTANCES;
+ private static final OutputFile OUTPUT_FILE;
static
{
- instances = new HashMap<Integer, String>();
+ INSTANCES = new HashMap<Integer, String>();
+ OUTPUT_FILE = OutputFile.new_output_file("instances.mod");
}
public static String get_id_for (final int i)
@@ -16,15 +18,27 @@ public class Instances
j = new Integer(i);
- result = instances.get(j);
+ result = INSTANCES.get(j);
if (result == null)
{
result = (Main.get_parameters().get_id_prefix() + i);
- instances.put(j, result);
+ INSTANCES.put(j, result);
}
return result;
}
+
+ public static void write_predicates ()
+ {
+ for (final String id: INSTANCES.values())
+ {
+ OUTPUT_FILE.write("(add_element instance ");
+ OUTPUT_FILE.write(id);
+ OUTPUT_FILE.write(")");
+
+ OUTPUT_FILE.insert_newline();
+ }
+ }
}
diff --git a/instance-calculator/src/Main.java b/instance-calculator/src/Main.java
index b521324..a23da06 100644
--- a/instance-calculator/src/Main.java
+++ b/instance-calculator/src/Main.java
@@ -37,6 +37,8 @@ public class Main
}
create_instances();
+ Instances.write_predicates();
+ OutputFile.close_all();
}
private static void create_instances ()
@@ -84,6 +86,7 @@ public class Main
e.generate_instance();
+ e.write_predicates();
processed_candidates.add(e);
}
else
diff --git a/instance-calculator/src/ModelFile.java b/instance-calculator/src/ModelFile.java
index 8589116..1f9297e 100644
--- a/instance-calculator/src/ModelFile.java
+++ b/instance-calculator/src/ModelFile.java
@@ -107,6 +107,8 @@ public class ModelFile
}
}
+ VHDLArchitecture.resolve_all_waveforms();
+
return true;
}
@@ -233,8 +235,6 @@ public class ModelFile
final VHDLArchitecture arch;
final VHDLProcess ps;
final VHDLComponent cmp;
- final String wfm_id;
- final VHDLWaveform wfm;
if (input.length != 3)
{
@@ -263,17 +263,7 @@ public class ModelFile
return true;
}
- wfm_id = Waveforms.find_waveform_id_from_id(input[1]);
-
- if (wfm_id != null)
- {
- wfm = VHDLWaveform.get_from_id(wfm_id);
-
- arch.add_waveform(wfm);
- wfm.set_architecture(arch);
-
- return true;
- }
+ arch.add_futur_waveform(input[1]);
return true;
}
diff --git a/instance-calculator/src/OutputFile.java b/instance-calculator/src/OutputFile.java
new file mode 100644
index 0000000..201ca2b
--- /dev/null
+++ b/instance-calculator/src/OutputFile.java
@@ -0,0 +1,135 @@
+import java.util.ArrayList;
+import java.util.Collection;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.BufferedWriter;
+
+public class OutputFile
+{
+ private static Collection<OutputFile> ALL_OUTPUT_FILES;
+
+ static
+ {
+ ALL_OUTPUT_FILES = new ArrayList<OutputFile>();
+ }
+
+ public static void close_all ()
+ {
+ for (final OutputFile f: ALL_OUTPUT_FILES)
+ {
+ f.close();
+ }
+ }
+
+ public static OutputFile new_output_file (final String filename)
+ {
+ final OutputFile result;
+
+ result =
+ new OutputFile
+ (
+ Main.get_parameters().get_output_directory()
+ + "/"
+ + filename
+ );
+
+ ALL_OUTPUT_FILES.add(result);
+
+ return result;
+ }
+
+ /** Non-Static *************************************************************/
+ private final String filename;
+ private final BufferedWriter buffered_writer;
+
+ private OutputFile (final String filename)
+ {
+ BufferedWriter bf;
+
+ this.filename = filename;
+
+ try
+ {
+ bf = new BufferedWriter(new FileWriter(new File(filename)));
+ }
+ catch (final Exception e)
+ {
+ bf = null;
+
+ System.err.println
+ (
+ "[F] Could not create new output file \""
+ + filename
+ + "\":"
+ );
+
+ e.printStackTrace();
+
+ System.exit(-1);
+ }
+
+ buffered_writer = bf;
+ }
+
+ public void write (final String data)
+ {
+ try
+ {
+ buffered_writer.write(data);
+ }
+ catch (final Exception e)
+ {
+ System.err.println
+ (
+ "[F] Could not write to output file \""
+ + filename
+ + "\":"
+ );
+
+ e.printStackTrace();
+
+ System.exit(-1);
+ }
+ }
+
+ public void insert_newline ()
+ {
+ try
+ {
+ buffered_writer.newLine();
+ }
+ catch (final Exception e)
+ {
+ System.err.println
+ (
+ "[F] Could not write to output file \""
+ + filename
+ + "\":"
+ );
+
+ e.printStackTrace();
+
+ System.exit(-1);
+ }
+ }
+
+ private void close ()
+ {
+ try
+ {
+ buffered_writer.close();
+ }
+ catch (final Exception e)
+ {
+ System.err.println
+ (
+ "[E] Could not properly close output file \""
+ + filename
+ + "\":"
+ );
+
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/instance-calculator/src/Parameters.java b/instance-calculator/src/Parameters.java
index e01f912..b8bba30 100644
--- a/instance-calculator/src/Parameters.java
+++ b/instance-calculator/src/Parameters.java
@@ -2,7 +2,7 @@ public class Parameters
{
private final String model_file;
private final String id_prefix;
- private final String output_file;
+ private final String output_dir;
private final boolean are_valid;
public static void print_usage ()
@@ -11,12 +11,12 @@ public class Parameters
(
"Instance-Calculator\n"
+ "USAGE:\n"
- + "\tjava Main <INSTRUCTIONS> <ID_PREFIX> <OUTPUT_FILE>\n"
+ + "\tjava Main <INSTRUCTIONS> <ID_PREFIX> <OUTPUT_DIR>\n"
+ "PARAMETERS:\n"
+ "\t<INSTRUCTIONS>\tInstruction file describing the model.\n"
+ "\t<ID_PREFIX>\tPrefix for the IDs of generated paths.\n"
- + "\t<OUTPUT_FILE>\tFile in which to output the generated"
- + " instructions."
+ + "\t<OUTPUT_DIR>\tDirectory in which to output the generated"
+ + " instruction files."
);
}
@@ -28,7 +28,7 @@ public class Parameters
model_file = new String();
id_prefix = new String();
- output_file = new String();
+ output_dir = new String();
are_valid = false;
}
@@ -36,7 +36,8 @@ public class Parameters
{
model_file = args[0];
id_prefix = args[1];
- output_file = args[2];
+ output_dir = args[2];
+
are_valid = true;
}
}
@@ -51,9 +52,9 @@ public class Parameters
return id_prefix;
}
- public String get_output_file ()
+ public String get_output_directory ()
{
- return output_file;
+ return output_dir;
}
public boolean are_valid ()
diff --git a/instance-calculator/src/VHDLArchitecture.java b/instance-calculator/src/VHDLArchitecture.java
index 5597529..407a09f 100644
--- a/instance-calculator/src/VHDLArchitecture.java
+++ b/instance-calculator/src/VHDLArchitecture.java
@@ -9,6 +9,14 @@ public class VHDLArchitecture
FROM_ID = new HashMap<String, VHDLArchitecture>();
}
+ public static void resolve_all_waveforms ()
+ {
+ for (final VHDLArchitecture arch: FROM_ID.values())
+ {
+ arch.resolve_waveforms();
+ }
+ }
+
public static void add_element (final String id)
{
if (!FROM_ID.containsKey(id))
@@ -48,6 +56,7 @@ public class VHDLArchitecture
private final Collection<VHDLProcess> processes;
private final Collection<VHDLComponent> components;
private final Collection<VHDLWaveform> waveforms;
+ private final Deque<String> futur_waveforms;
private final String id;
private VHDLEntity entity;
@@ -59,6 +68,7 @@ public class VHDLArchitecture
processes = new ArrayList<VHDLProcess>();
components = new ArrayList<VHDLComponent>();
waveforms = new ArrayList<VHDLWaveform>();
+ futur_waveforms = new ArrayDeque<String>();
}
public VHDLEntity get_entity ()
@@ -100,6 +110,27 @@ public class VHDLArchitecture
}
}
+ public void add_futur_waveform (final String fwfm)
+ {
+ if (!futur_waveforms.contains(fwfm))
+ {
+ futur_waveforms.add(fwfm);
+ }
+ }
+
+ public void resolve_waveforms ()
+ {
+ while (!futur_waveforms.isEmpty())
+ {
+ final String src_id, wfm_id;
+
+ src_id = futur_waveforms.pop();
+
+ wfm_id = Waveforms.get_waveform_id_from_id(src_id);
+ add_waveform(VHDLWaveform.get_from_id(wfm_id));
+ }
+ }
+
public void add_instance_to
(
final Collection<VHDLProcess.Instance> process_instances,
diff --git a/instance-calculator/src/VHDLComponent.java b/instance-calculator/src/VHDLComponent.java
index fb05c6e..958a2e4 100644
--- a/instance-calculator/src/VHDLComponent.java
+++ b/instance-calculator/src/VHDLComponent.java
@@ -45,7 +45,7 @@ public class VHDLComponent
}
/******************************************************************************/
- private final Map<String, String> port_map;
+ private final Map<String, String> reverse_port_map;
private final String id;
private VHDLEntity destination;
@@ -68,7 +68,7 @@ public class VHDLComponent
public void add_port_map (final String src, final String dest)
{
- port_map.put(src, dest);
+ reverse_port_map.put(dest, src);
}
public void add_instance_content_to
@@ -89,28 +89,35 @@ public class VHDLComponent
for (final VHDLWaveform.Instance i_wfm: dest_waveform_instances)
{
- final String dest;
+ final String src_wfm, dest_port;
final VHDLWaveform.Instance replacement;
- dest =
- port_map.get
+ dest_port =
+ Waveforms.get_id_from_waveform_id
(
- Waveforms.get_id_from_waveform_id
- (
- i_wfm.get_parent().get_id()
- )
+ i_wfm.get_parent().get_id()
);
- if (dest == null)
+ src_wfm = reverse_port_map.get(dest_port);
+
+ if (src_wfm == null)
{
+ /* i_wfm is not linked to a port, so it needs a new instance. */
replacement = i_wfm.get_parent().add_instance(parent.get_entity());
}
else
{
+ /*
+ * i_wfm is linked to a port. Replace it by what's connected to the
+ * port.
+ */
replacement =
local_conversion.get
(
- Waveforms.get_waveform_id_from_id(dest)
+ VHDLWaveform.get_from_id
+ (
+ src_wfm
+ )
);
}
@@ -131,6 +138,6 @@ public class VHDLComponent
{
this.id = id;
- port_map = new HashMap<String, String>();
+ reverse_port_map = new HashMap<String, String>();
}
}
diff --git a/instance-calculator/src/VHDLEntity.java b/instance-calculator/src/VHDLEntity.java
index 91de6f6..2765229 100644
--- a/instance-calculator/src/VHDLEntity.java
+++ b/instance-calculator/src/VHDLEntity.java
@@ -1,4 +1,5 @@
import java.util.*;
+import java.io.BufferedWriter;
public class VHDLEntity
{
@@ -53,6 +54,7 @@ public class VHDLEntity
private final Collection<VHDLProcess.Instance> process_instances;
private final Collection<VHDLWaveform.Instance> waveform_instances;
+ private final OutputFile output_file;
private final Collection<String> ports;
private final String id;
@@ -67,6 +69,8 @@ public class VHDLEntity
this.process_instances = new ArrayList<VHDLProcess.Instance>();
this.waveform_instances = new ArrayList<VHDLWaveform.Instance>();
+
+ output_file = OutputFile.new_output_file("instances_in_" + id + ".mod");
}
public String get_id ()
@@ -128,4 +132,17 @@ public class VHDLEntity
local_conversion
);
}
+
+ public void write_predicates ()
+ {
+ for (final VHDLWaveform.Instance iwfm: waveform_instances)
+ {
+ iwfm.write_predicates_to(output_file);
+ }
+
+ for (final VHDLProcess.Instance ips: process_instances)
+ {
+ ips.write_predicates_to(output_file);
+ }
+ }
}
diff --git a/instance-calculator/src/VHDLProcess.java b/instance-calculator/src/VHDLProcess.java
index d54e0cc..eba5e46 100644
--- a/instance-calculator/src/VHDLProcess.java
+++ b/instance-calculator/src/VHDLProcess.java
@@ -1,4 +1,5 @@
import java.util.*;
+import java.io.BufferedWriter;
public class VHDLProcess
{
@@ -61,6 +62,11 @@ public class VHDLProcess
architecture = null;
}
+ public String get_id ()
+ {
+ return id;
+ }
+
public void add_accessed_wfm (final VHDLWaveform wfm)
{
if (!accessed_wfm.contains(wfm))
@@ -172,5 +178,62 @@ public class VHDLProcess
return result;
}
+
+ public void write_predicates_to (final OutputFile of)
+ {
+ final Set<Map.Entry<VHDLWaveform.Instance, VHDLWaveform>> iwfm_set;
+
+ iwfm_set = iwfm_map.entrySet();
+
+ try
+ {
+ of.write("(is_process_instance ");
+ of.write(id);
+ of.write(" ");
+ of.write(parent.get_id());
+ of.write(")");
+ of.insert_newline();
+
+ of.write("(is_visible_in ");
+ of.write(id);
+ of.write(" ");
+ of.write(parent.get_id());
+ of.write(" ");
+ of.write(visibility.get_id());
+ of.write(")");
+ of.insert_newline();
+
+ for
+ (
+ final Map.Entry<VHDLWaveform.Instance, VHDLWaveform> iwfm:
+ iwfm_set
+ )
+ {
+ of.write("(process_instance_maps ");
+ of.write(id);
+ of.write(" ");
+ of.write(parent.get_id());
+ of.write(" ");
+ of.write(iwfm.getKey().get_id());
+ of.write(" ");
+ of.write(iwfm.getKey().get_parent().get_id());
+ of.write(" ");
+ of.write(iwfm.getValue().get_id());
+ of.write(")");
+ of.insert_newline();
+ }
+ }
+ catch (final Exception e)
+ {
+ System.err.println
+ (
+ "[F] Could not write to output file:"
+ );
+
+ e.printStackTrace();
+
+ System.exit(-1);
+ }
+ }
}
}
diff --git a/instance-calculator/src/VHDLWaveform.java b/instance-calculator/src/VHDLWaveform.java
index eb5c38e..74edc88 100644
--- a/instance-calculator/src/VHDLWaveform.java
+++ b/instance-calculator/src/VHDLWaveform.java
@@ -1,4 +1,5 @@
import java.util.*;
+import java.io.BufferedWriter;
public class VHDLWaveform
{
@@ -95,6 +96,12 @@ public class VHDLWaveform
architecture = arch;
}
+ @Override
+ public String toString ()
+ {
+ return id;
+ }
+
public static class Instance
{
private final String id;
@@ -113,9 +120,53 @@ public class VHDLWaveform
this.visibility = visibility;
}
+ public String get_id ()
+ {
+ return id;
+ }
+
public VHDLWaveform get_parent ()
{
return parent;
}
+
+ public void write_predicates_to (final OutputFile of)
+ {
+ try
+ {
+ of.write("(is_waveform_instance ");
+ of.write(id);
+ of.write(" ");
+ of.write(parent.get_id());
+ of.write(")");
+ of.insert_newline();
+
+ of.write("(is_visible_in ");
+ of.write(id);
+ of.write(" ");
+ of.write(parent.get_id());
+ of.write(" ");
+ of.write(visibility.get_id());
+ of.write(")");
+ of.insert_newline();
+ }
+ catch (final Exception e)
+ {
+ System.err.println
+ (
+ "[F] Could not write to output file:"
+ );
+
+ e.printStackTrace();
+
+ System.exit(-1);
+ }
+ }
+
+ @Override
+ public String toString ()
+ {
+ return "<" + parent.get_id() + ", " + id + ">";
+ }
}
}