| summaryrefslogtreecommitdiff |
path: root/instr-to-kodkod
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-18 17:47:49 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-18 17:47:49 +0200 |
| commit | 64c8b8413db37494f118c7a2f50c186830fb64dc (patch) | |
| tree | 705edf117c292f751a9f5d5912330c92c94bbf0d /instr-to-kodkod | |
| parent | f9a789dcc77a905849368dcbaaccb894698442e4 (diff) | |
Starting to link parser with the program.
But apparently I messed up some kodkod logic.
Diffstat (limited to 'instr-to-kodkod')
| -rw-r--r-- | instr-to-kodkod/Makefile | 4 | ||||
| -rw-r--r-- | instr-to-kodkod/parser/PropertyParser.g4 | 251 | ||||
| -rw-r--r-- | instr-to-kodkod/src/Main.java | 13 | ||||
| -rw-r--r-- | instr-to-kodkod/src/Parameters.java | 13 | ||||
| -rw-r--r-- | instr-to-kodkod/src/VariableManager.java | 57 |
5 files changed, 208 insertions, 130 deletions
diff --git a/instr-to-kodkod/Makefile b/instr-to-kodkod/Makefile index 59bdeb4..2611f28 100644 --- a/instr-to-kodkod/Makefile +++ b/instr-to-kodkod/Makefile @@ -7,14 +7,14 @@ JAVA = java DOWNLOADER = wget ## Java Config ################################################################# -CLASSPATH = "kodkod.jar:./src/:org.sat4j.core.jar" +CLASSPATH = "kodkod.jar:./src/:./parser/:org.sat4j.core.jar:antlr-4.7-complete.jar" ## Dependencies ################################################################ JAR_SOURCE = https://noot-noot.org/onera_2017/jar/ REQUIRED_JARS = kodkod.jar org.sat4j.core.jar antlr-4.7-complete.jar ## Makefile Magic ############################################################## -SOURCES = $(wildcard src/*.java) +SOURCES = $(wildcard src/*.java parser/*.java) CLASSES = $(SOURCES:.java=.class) ## Makefile Rules ############################################################## diff --git a/instr-to-kodkod/parser/PropertyParser.g4 b/instr-to-kodkod/parser/PropertyParser.g4 index 5394570..d685790 100644 --- a/instr-to-kodkod/parser/PropertyParser.g4 +++ b/instr-to-kodkod/parser/PropertyParser.g4 @@ -18,7 +18,6 @@ options @members { /* of the class */ - } prog: @@ -56,7 +55,7 @@ id_list (WS)+ var=ID { - result.add(VARIABLE_SET.get_variable($var.text)); + result.add(Main.get_variable_manager().get_variable($var.text)); } )* @@ -79,7 +78,7 @@ sl_predicate { /* TODO */ - result = null; + $result = null; } ; @@ -176,12 +175,12 @@ sl_exists_operator $result = ($f.result).forSome ( - VARIABLE_SET.get_variable + Main.get_variable_manager().get_variable ( ($var.text) ).in ( - MODEL.get_type_as_relation(($type.text)) + Main.get_model().get_type_as_relation(($type.text)) ) ); } @@ -201,12 +200,12 @@ sl_forall_operator $result = ($f.result).forAll ( - VARIABLE_SET.get_variable + Main.get_variable_manager().get_variable ( ($var.text) ).in ( - MODEL.get_type_as_relation(($type.text)) + Main.get_model().get_type_as_relation(($type.text)) ) ); } @@ -220,7 +219,7 @@ sl_ctl_verifies_operator { final Variable root_node; - root_node = VARIABLE_SET.generate_new_state_variable(); + root_node = Main.get_variable_manager().generate_new_variable(); } : @@ -237,11 +236,11 @@ sl_ctl_verifies_operator ( root_node.oneOf ( - MODEL.get_type_as_relation("node").in + Main.get_model().get_type_as_relation("node").in ( - VARIABLE_SET.get_variable(($ps.text)).join + Main.get_variable_manager().get_variable(($ps.text)).join ( - MODEL.get_predicate_as_relation("start_node") + Main.get_model().get_predicate_as_relation("start_node") ) ) ) @@ -297,7 +296,7 @@ sl_formula /******************************************************************************/ /** Behavioral Level **********************************************************/ /******************************************************************************/ -bl_predicate [Variable current_state] +bl_predicate [Variable current_node] returns [Formula result]: (WS)* L_PAREN @@ -307,11 +306,11 @@ bl_predicate [Variable current_state] { /* TODO */ - result = null; + $result = null; } ; -bl_formula_list [Variable current_state] +bl_formula_list [Variable current_node] returns [List<Formula> list] @init @@ -321,7 +320,7 @@ bl_formula_list [Variable current_state] : ( - bl_formula[current_state] + bl_formula[current_node] { result.add(($bl_formula.result)); } @@ -333,12 +332,12 @@ bl_formula_list [Variable current_state] ; /**** First Order Expressions *************************************************/ -bl_and_operator [Variable current_state] +bl_and_operator [Variable current_node] returns [Formula result]: (WS)* AND_OPERATOR_KW - bl_formula[current_state] - bl_formula_list[current_state] + bl_formula[current_node] + bl_formula_list[current_node] (WS)* R_PAREN { @@ -347,12 +346,12 @@ bl_and_operator [Variable current_state] } ; -bl_or_operator [Variable current_state] +bl_or_operator [Variable current_node] returns [Formula result]: (WS)* OR_OPERATOR_KW - bl_formula[current_state] - bl_formula_list[current_state] + bl_formula[current_node] + bl_formula_list[current_node] (WS)* R_PAREN { @@ -361,11 +360,11 @@ bl_or_operator [Variable current_state] } ; -bl_not_operator [Variable current_state] +bl_not_operator [Variable current_node] returns [Formula result]: (WS)* NOT_OPERATOR_KW - bl_formula[current_state] + bl_formula[current_node] (WS)* R_PAREN { @@ -374,12 +373,12 @@ bl_not_operator [Variable current_state] } ; -bl_implies_operator [Variable current_state] +bl_implies_operator [Variable current_node] returns [Formula result]: (WS)* IMPLIES_OPERATOR_KW - a=bl_formula[current_state] - b=bl_formula[current_state] + a=bl_formula[current_node] + b=bl_formula[current_node] (WS)* R_PAREN { @@ -389,19 +388,19 @@ bl_implies_operator [Variable current_state] ; /**** Computation Tree Logic Expressions **************************************/ -bl_ax_operator [Variable current_state] +bl_ax_operator [Variable current_node] returns [Formula result] @init { - final Variable next_state; + final Variable next_node; - next_state = VARIABLE_SET.generate_new_state_variable(); + next_node = Main.get_variable_manager().generate_new_variable(); } : (WS)* AX_OPERATOR_KW - bl_formula[next_state] + bl_formula[next_node] (WS)* R_PAREN { @@ -409,30 +408,30 @@ bl_ax_operator [Variable current_state] $result = ($bl_formula.result).forAll ( - next_state.in + next_node.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation("node_connect") + Main.get_model().get_predicate_as_relation("node_connect") ) - ); + ) ); } ; -bl_ex_operator [Variable current_state] +bl_ex_operator [Variable current_node] returns [Formula result] @init { - final Variable next_state; + final Variable next_node; - next_state = VARIABLE_SET.generate_new_state_variable(); + next_node = Main.get_variable_manager().generate_new_variable(); } : (WS)* EX_OPERATOR_KW - bl_formula[next_state] + bl_formula[next_node] (WS)* R_PAREN { @@ -440,30 +439,30 @@ bl_ex_operator [Variable current_state] $result = ($bl_formula.result).forSome ( - next_state.in + next_node.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation("node_connect") + Main.get_model().get_predicate_as_relation("node_connect") ) - ); + ) ); } ; -bl_ag_operator [Variable current_state] +bl_ag_operator [Variable current_node] returns [Formula result] @init { - final Variable next_state; + final Variable next_node; - next_state = VARIABLE_SET.generate_new_state_variable(); + next_node = Main.get_variable_manager().generate_new_variable(); } : (WS)* AG_OPERATOR_KW - bl_formula[next_state] + bl_formula[next_node] (WS)* R_PAREN { @@ -471,37 +470,37 @@ bl_ag_operator [Variable current_state] $result = ($bl_formula.result).forAll ( - next_state.in + next_node.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation + Main.get_model().get_predicate_as_relation ( "is_path_of" ).transpose() /* (is_path_of path node), we want the path. */ ).join ( - MODEL.get_predicate_as_relation("contains_node") - ). + Main.get_model().get_predicate_as_relation("contains_node") + ) ) - ) + ); } ; -bl_eg_operator [Variable current_state] +bl_eg_operator [Variable current_node] returns [Formula result] @init { - final Variable next_state, chosen_path; + final Variable next_node, chosen_path; - next_state = VARIABLE_SET.generate_new_state_variable(); - chosen_path = VARIABLE_SET.generate_new_state_variable(); + next_node = Main.get_variable_manager().generate_new_variable(); + chosen_path = Main.get_variable_manager().generate_new_variable(); } : (WS)* EG_OPERATOR_KW - bl_formula[next_state] + bl_formula[next_node] (WS)* R_PAREN { @@ -509,20 +508,20 @@ bl_eg_operator [Variable current_state] $result = ($bl_formula.result).forAll ( - next_state.in + next_node.in ( chosen_path.join ( - MODEL.get_predicate_as_relation("contains_node") - ). + Main.get_model().get_predicate_as_relation("contains_node") + ) ) ).forSome ( chosen_path.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation + Main.get_model().get_predicate_as_relation ( "is_path_of" ).transpose() /* (is_path_of path node), we want the path. */ @@ -532,20 +531,20 @@ bl_eg_operator [Variable current_state] } ; -bl_af_operator [Variable current_state] +bl_af_operator [Variable current_node] returns [Formula result] @init { - final Variable next_state, chosen_path; + final Variable next_node, chosen_path; - next_state = VARIABLE_SET.generate_new_state_variable(); - chosen_path = VARIABLE_SET.generate_new_state_variable(); + next_node = Main.get_variable_manager().generate_new_variable(); + chosen_path = Main.get_variable_manager().generate_new_variable(); } : (WS)* AF_OPERATOR_KW - bl_formula[next_state] + bl_formula[next_node] (WS)* R_PAREN { @@ -553,20 +552,20 @@ bl_af_operator [Variable current_state] $result = ($bl_formula.result).forSome ( - next_state.in + next_node.in ( chosen_path.join ( - MODEL.get_predicate_as_relation("contains_node") - ). + Main.get_model().get_predicate_as_relation("contains_node") + ) ) ).forAll ( chosen_path.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation + Main.get_model().get_predicate_as_relation ( "is_path_of" ).transpose() /* (is_path_of path node), we want the path. */ @@ -576,20 +575,20 @@ bl_af_operator [Variable current_state] } ; -bl_ef_operator [Variable current_state] +bl_ef_operator [Variable current_node] returns [Formula result] @init { - final Variable next_state, chosen_path; + final Variable next_node, chosen_path; - next_state = VARIABLE_SET.generate_new_state_variable(); - chosen_path = VARIABLE_SET.generate_new_state_variable(); + next_node = Main.get_variable_manager().generate_new_variable(); + chosen_path = Main.get_variable_manager().generate_new_variable(); } : (WS)* EF_OPERATOR_KW - bl_formula[next_state] + bl_formula[next_node] (WS)* R_PAREN { @@ -597,20 +596,20 @@ bl_ef_operator [Variable current_state] $result = ($bl_formula.result).forSome ( - next_state.in + next_node.in ( chosen_path.join ( - MODEL.get_predicate_as_relation("contains_node") - ). + Main.get_model().get_predicate_as_relation("contains_node") + ) ) ).forSome ( chosen_path.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation + Main.get_model().get_predicate_as_relation ( "is_path_of" ).transpose() /* (is_path_of path node), we want the path. */ @@ -620,22 +619,22 @@ bl_ef_operator [Variable current_state] } ; -bl_au_operator [Variable current_state] +bl_au_operator [Variable current_node] returns [Formula result] @init { - final Variable f1_state, f2_state, chosen_path; + final Variable f1_node, f2_node, chosen_path; - f1_state = VARIABLE_SET.generate_new_state_variable(); - f2_state = VARIABLE_SET.generate_new_state_variable(); - chosen_path = VARIABLE_SET.generate_new_state_variable(); + f1_node = Main.get_variable_manager().generate_new_variable(); + f2_node = Main.get_variable_manager().generate_new_variable(); + chosen_path = Main.get_variable_manager().generate_new_variable(); } : (WS)* AU_OPERATOR_KW - f1=bl_formula[f1_state] - f2=bl_formula[f2_state] + f1=bl_formula[f1_node] + f2=bl_formula[f2_node] (WS)* R_PAREN { @@ -643,57 +642,57 @@ bl_au_operator [Variable current_state] $result = ($f1.result).forAll ( - f1_state.in + f1_node.in ( - f2_state.join + f2_node.join ( chosen_path.join ( - MODEL.get_predicate_as_relation("is_before") + Main.get_model().get_predicate_as_relation("is_before") ).transpose() ) - ); + ) ).and ( ($f2.result) ).forSome ( - f2_state.in + f2_node.in ( chosen_path.join ( - MODEL.get_predicate_as_relation("contains_node") + Main.get_model().get_predicate_as_relation("contains_node") ) ) ).forAll ( chosen_path.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation("is_path_of").transpose() + Main.get_model().get_predicate_as_relation("is_path_of").transpose() ) ) ); } ; -bl_eu_operator [Variable current_state] +bl_eu_operator [Variable current_node] returns [Formula result] @init { - final Variable f1_state, f2_state, chosen_path; + final Variable f1_node, f2_node, chosen_path; - f1_state = VARIABLE_SET.generate_new_state_variable(); - f2_state = VARIABLE_SET.generate_new_state_variable(); - chosen_path = VARIABLE_SET.generate_new_state_variable(); + f1_node = Main.get_variable_manager().generate_new_variable(); + f2_node = Main.get_variable_manager().generate_new_variable(); + chosen_path = Main.get_variable_manager().generate_new_variable(); } : (WS)* EU_OPERATOR_KW - f1=bl_formula[f1_state] - f2=bl_formula[f2_state] + f1=bl_formula[f1_node] + f2=bl_formula[f2_node] (WS)* R_PAREN { @@ -701,34 +700,34 @@ bl_eu_operator [Variable current_state] $result = ($f1.result).forAll ( - f1_state.in + f1_node.in ( - f2_state.join + f2_node.join ( chosen_path.join ( - MODEL.get_predicate_as_relation("is_before") + Main.get_model().get_predicate_as_relation("is_before") ).transpose() ) - ); + ) ).and( ($f2.result) ).forSome ( - f2_state.in + f2_node.in ( chosen_path.join ( - MODEL.get_predicate_as_relation("contains_node") + Main.get_model().get_predicate_as_relation("contains_node") ) ) ).forSome ( chosen_path.in ( - current_state.join + current_node.join ( - MODEL.get_predicate_as_relation("is_path_of").transpose() + Main.get_model().get_predicate_as_relation("is_path_of").transpose() ) ) ); @@ -736,58 +735,58 @@ bl_eu_operator [Variable current_state] ; /**** Formula Definition ******************************************************/ -bl_formula [Variable current_state] +bl_formula [Variable current_node] returns [Formula result]: - bl_predicate[current_state] + bl_predicate[current_node] { $result = ($bl_predicate.result); } - | bl_and_operator[current_state] + | bl_and_operator[current_node] { $result = ($bl_and_operator.result); } - | bl_or_operator[current_state] + | bl_or_operator[current_node] { $result = ($bl_or_operator.result); } - | bl_not_operator[current_state] + | bl_not_operator[current_node] { $result = ($bl_not_operator.result); } - | bl_implies_operator[current_state] + | bl_implies_operator[current_node] { $result = ($bl_implies_operator.result); } - | bl_ax_operator[current_state] + | bl_ax_operator[current_node] { $result = ($bl_ax_operator.result); } - | bl_ex_operator[current_state] + | bl_ex_operator[current_node] { $result = ($bl_ex_operator.result); } - | bl_ag_operator[current_state] + | bl_ag_operator[current_node] { $result = ($bl_ag_operator.result); } - | bl_eg_operator[current_state] + | bl_eg_operator[current_node] { $result = ($bl_eg_operator.result); } - | bl_af_operator[current_state] + | bl_af_operator[current_node] { $result = ($bl_af_operator.result); } - | bl_ef_operator[current_state] + | bl_ef_operator[current_node] { $result = ($bl_ef_operator.result); } - | bl_au_operator[current_state] + | bl_au_operator[current_node] { $result = ($bl_au_operator.result); } - | bl_eu_operator[current_state] + | bl_eu_operator[current_node] { $result = ($bl_eu_operator.result); } diff --git a/instr-to-kodkod/src/Main.java b/instr-to-kodkod/src/Main.java index ba9ebaa..41b8ef8 100644 --- a/instr-to-kodkod/src/Main.java +++ b/instr-to-kodkod/src/Main.java @@ -10,6 +10,17 @@ public class Main { private static Parameters PARAMETERS; private static VHDLModel MODEL; + private static VariableManager VARIABLE_MANAGER; + + public static VHDLModel get_model () + { + return MODEL; + } + + public static VariableManager get_variable_manager () + { + return VARIABLE_MANAGER; + } private static Formula get_formula (final VHDLModel model) { @@ -49,6 +60,8 @@ public class Main return; } + VARIABLE_MANAGER = new VariableManager(PARAMETERS.get_variables_prefix()); + MODEL = new VHDLModel(); /* 1/ Load Levels (Types + predicates) */ diff --git a/instr-to-kodkod/src/Parameters.java b/instr-to-kodkod/src/Parameters.java index e9dc648..1face97 100644 --- a/instr-to-kodkod/src/Parameters.java +++ b/instr-to-kodkod/src/Parameters.java @@ -2,6 +2,7 @@ public class Parameters { private final String levels_dir; private final String model_file; + private final String var_prefix; private final boolean are_valid; public static void print_usage () @@ -10,10 +11,11 @@ public class Parameters ( "Instr-to-kodkod\n" + "USAGE:\n" - + "\tjava Main <LEVELS_DIR> <INSTRUCTIONS>\n" + + "\tjava Main <LEVELS_DIR> <INSTRUCTIONS> <VAR_PREFIX>\n" + "PARAMETERS:\n" + "\t<LEVELS_DIR>\tDirectory containing the level definitions.\n" + "\t<INSTRUCTIONS>\tInstruction file describing the model.\n" + + "\t<VAR_PREFIX>\tPrefix for anonymous variables (e.g. \"_anon_\").\n" + "NOTES:\n" + "\tThe properties to be verified still have to be hand coded in the" + " source files (in Main.java)." @@ -22,18 +24,20 @@ public class Parameters public Parameters (String... args) { - if (args.length != 2) + if (args.length != 3) { print_usage(); levels_dir = new String(); model_file = new String(); + var_prefix = new String(); are_valid = false; } else { levels_dir = args[0]; model_file = args[1]; + var_prefix = args[2]; are_valid = true; } } @@ -48,6 +52,11 @@ public class Parameters return model_file; } + public String get_variables_prefix () + { + return var_prefix; + } + public boolean are_valid () { return are_valid; diff --git a/instr-to-kodkod/src/VariableManager.java b/instr-to-kodkod/src/VariableManager.java new file mode 100644 index 0000000..381a774 --- /dev/null +++ b/instr-to-kodkod/src/VariableManager.java @@ -0,0 +1,57 @@ +/* FIXME: finer imports. */ +import java.util.*; + +import kodkod.ast.*; + +public class VariableManager +{ + private final Map<String, Variable> from_string; + private final Map<String, String> tags; + private final String var_prefix; + private int next_id; + + public VariableManager (final String var_prefix) + { + from_string = new HashMap<String, Variable>(); + tags = new HashMap<String, String>(); + + this.var_prefix = var_prefix; + } + + private String generate_new_id () + { + final String result; + + result = var_prefix + next_id; + + next_id += 1; + + return result; + } + + public Variable get_variable (final String name) + { + Variable result; + + result = from_string.get(name); + + if (result == null) + { + result = Variable.unary(name); + + from_string.put(name, result); + } + + return result; + } + + public Variable generate_new_variable () + { + return get_variable(generate_new_id()); + } + + public void tag_variable (final String name, final String tag) + { + tags.put(name, tag); + } +} |


