| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-25 14:45:05 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-25 14:45:05 +0200 |
| commit | 97439a89b5439ce120e5bc2814251ce9dc513ce0 (patch) | |
| tree | cfefd60c8ee3179cd76ac0c54023f5fff77bb6ae | |
| parent | a19063a8dc55750e4ae6d6d6acacdd537fbbdb08 (diff) | |
Improves error reports for the property.
| -rw-r--r-- | data/level/control_flow_level.lvl | 7 | ||||
| -rw-r--r-- | instr-to-kodkod/Makefile | 4 | ||||
| -rw-r--r-- | instr-to-kodkod/parser/PropertyParser.g4 | 147 | ||||
| -rw-r--r-- | instr-to-kodkod/src/Parameters.java | 12 |
4 files changed, 152 insertions, 18 deletions
diff --git a/data/level/control_flow_level.lvl b/data/level/control_flow_level.lvl index 4ae7837..9408409 100644 --- a/data/level/control_flow_level.lvl +++ b/data/level/control_flow_level.lvl @@ -20,6 +20,11 @@ (add_predicate has_option node string) (add_predicate has_depth node node_depth) (add_predicate node_connect node node) + +;;; To be removed soon. (add_predicate expr_writes node waveform) -(add_predicate expr_reads node waveform) + +(add_predicate is_read_structure node string) +(add_predicate is_read_element node string waveform) +(add_predicate is_read_element node string string) (add_predicate is_terminal node) diff --git a/instr-to-kodkod/Makefile b/instr-to-kodkod/Makefile index efcfaa5..c25c95f 100644 --- a/instr-to-kodkod/Makefile +++ b/instr-to-kodkod/Makefile @@ -1,6 +1,7 @@ ## Target(s) Configuration ##################################################### #MODEL_FILES = $(wildcard ../data/instructions/*.mod) MODEL_FILES = ../ast-to-instr/structural.mod $(wildcard ../ast-to-instr/cfg_*.mod) $(wildcard ../cfg-to-paths/*.mod) +MAP_FILES = $(wildcard ../ast-to-instr/*.map) LEVEL_DIR = $(wildcard ../data/level/*.lvl) #PROPERTY_FILE = ../data/property/unread_waveforms.pro #PROPERTY_FILE = ../data/property/impossible_processes.pro @@ -20,7 +21,7 @@ JAR_SOURCE = https://noot-noot.org/onera_2017/jar/ REQUIRED_JARS = kodkod.jar org.sat4j.core.jar antlr-4.7-complete.jar ## Makefile Magic ############################################################## -INPUT_FILES = $(MODEL_FILES) $(LEVEL_DIR) $(PROPERTY_FILE) +INPUT_FILES = $(MODEL_FILES) $(LEVEL_DIR) $(PROPERTY_FILE) $(MAP_FILES) SOURCES = $(wildcard src/*.java parser/*.java) GRAMMARS = $(wildcard parser/*.g4) CLASSES = $(SOURCES:.java=.class) @@ -28,6 +29,7 @@ CLASSES = $(SOURCES:.java=.class) ## Makefile Rules ############################################################## all: parser/PropertyParser.java $(CLASSES) + $(MAKE) -C parser $(MAKE) -C ../ast-to-instr $(MAKE) -C ../cfg-to-paths diff --git a/instr-to-kodkod/parser/PropertyParser.g4 b/instr-to-kodkod/parser/PropertyParser.g4 index b44fbe2..4542130 100644 --- a/instr-to-kodkod/parser/PropertyParser.g4 +++ b/instr-to-kodkod/parser/PropertyParser.g4 @@ -39,6 +39,26 @@ tag_existing for (final String[] tag_var: tags) { + final Relation type_as_relation; + + type_as_relation = Main.get_model().get_type_as_relation(tag_var[1]); + + if (type_as_relation == (Relation) null) + { + System.err.println + ( + "[F] The property uses an unknown type: \"" + + tag_var[1] + + "\" in its tag_existing (l." + + ($TAG_EXISTING_KW.getLine()) + + " c." + + ($TAG_EXISTING_KW.getCharPositionInLine()) + + ")." + ); + + System.exit(-1); + } + $result = $result.forSome ( @@ -47,7 +67,7 @@ tag_existing tag_var[0] ).oneOf ( - Main.get_model().get_type_as_relation(tag_var[1]) + type_as_relation ) ); @@ -143,7 +163,29 @@ sl_predicate { final Expression predicate; final List<Variable> ids; + final Relation predicate_as_relation; + predicate_as_relation = + Main.get_model().get_predicate_as_relation + ( + ($ID.text) + ); + + if (predicate_as_relation == (Relation) null) + { + System.err.println + ( + "[F] The property uses an unknown predicate: \"" + + ($ID.text) + + "\" at structural level. (l." + + ($ID.getLine()) + + " c." + + ($ID.getCharPositionInLine()) + + ")." + ); + + System.exit(-1); + } if (($id_list.has_joker)) { @@ -165,17 +207,14 @@ sl_predicate } predicate = - Main.get_model().get_predicate_as_relation - ( - ($ID.text) - ).project + predicate_as_relation.project ( (IntExpression[]) columns.toArray() ); } else { - predicate = Main.get_model().get_predicate_as_relation(($ID.text)); + predicate = predicate_as_relation; ids = ($id_list.list); } @@ -280,6 +319,30 @@ sl_exists_operator (WS*) R_PAREN { + final Relation type_as_relation; + + type_as_relation = + Main.get_model().get_type_as_relation + ( + ($type.text) + ); + + if (type_as_relation == (Relation) null) + { + System.err.println + ( + "[F] The property uses an unknown type: \"" + + ($type.text) + + "\" in an \"exists\" at structural level (l." + + ($type.getLine()) + + " c." + + ($type.getCharPositionInLine()) + + ")." + ); + + System.exit(-1); + } + $result = ($f.result).forSome ( @@ -288,7 +351,7 @@ sl_exists_operator ($var.text) ).oneOf ( - Main.get_model().get_type_as_relation(($type.text)) + type_as_relation ) ); } @@ -304,6 +367,30 @@ sl_forall_operator (WS*) R_PAREN { + final Relation type_as_relation; + + type_as_relation = + Main.get_model().get_type_as_relation + ( + ($type.text) + ); + + if (type_as_relation == (Relation) null) + { + System.err.println + ( + "[F] The property uses an unknown type: \"" + + ($type.text) + + "\" in a \"forall\" at structural level (l." + + ($type.getLine()) + + " c." + + ($type.getCharPositionInLine()) + + ")." + ); + + System.exit(-1); + } + $result = ($f.result).forAll ( @@ -312,7 +399,7 @@ sl_forall_operator ($var.text) ).oneOf ( - Main.get_model().get_type_as_relation(($type.text)) + type_as_relation ) ); } @@ -344,7 +431,10 @@ sl_ctl_verifies_operator ( Main.get_variable_manager().get_variable(($ps.text)).join ( - Main.get_model().get_predicate_as_relation("is_start_node").transpose() + Main.get_model().get_predicate_as_relation + ( + "is_start_node" + ).transpose() ) ) ); @@ -410,7 +500,29 @@ bl_predicate [Variable current_node] { final Expression predicate; final List<Variable> ids; + final Relation predicate_as_relation; + + predicate_as_relation = + Main.get_model().get_predicate_as_relation + ( + ($ID.text) + ); + if (predicate_as_relation == (Relation) null) + { + System.err.println + ( + "[F] The property uses an unknown predicate: \"" + + ($ID.text) + + "\" at behavioral level (l." + + ($ID.getLine()) + + " c." + + ($ID.getCharPositionInLine()) + + ")." + ); + + System.exit(-1); + } if (($id_list.has_joker)) { @@ -432,17 +544,14 @@ bl_predicate [Variable current_node] } predicate = - Main.get_model().get_predicate_as_relation - ( - ($ID.text) - ).project + predicate_as_relation.project ( (IntExpression[]) columns.toArray() ); } else { - predicate = Main.get_model().get_predicate_as_relation(($ID.text)); + predicate = predicate_as_relation; ids = ($id_list.list); } @@ -811,7 +920,10 @@ bl_au_operator [Variable current_node] ( current_node.join ( - Main.get_model().get_predicate_as_relation("is_path_of").transpose() + Main.get_model().get_predicate_as_relation + ( + "is_path_of" + ).transpose() ) ) ); @@ -867,7 +979,10 @@ bl_eu_operator [Variable current_node] ( current_node.join ( - Main.get_model().get_predicate_as_relation("is_path_of").transpose() + Main.get_model().get_predicate_as_relation + ( + "is_path_of" + ).transpose() ) ) ); diff --git a/instr-to-kodkod/src/Parameters.java b/instr-to-kodkod/src/Parameters.java index 81c9dba..c3fcd51 100644 --- a/instr-to-kodkod/src/Parameters.java +++ b/instr-to-kodkod/src/Parameters.java @@ -5,6 +5,7 @@ public class Parameters { private final List<String> level_files; private final List<String> model_files; + private final List<String> map_files; private final String property_file; private final String var_prefix; @@ -25,6 +26,7 @@ public class Parameters + "\t- Property files have a \".pro\" extension.\n" + "\t- Model files have a \".mod\" extension.\n" + "\t- Level files have a \".lvl\" extension.\n" + + "\t- Map files have a \".map\" extension.\n" + "\t- The files may be given in any order." ); } @@ -36,6 +38,7 @@ public class Parameters level_files = new ArrayList<String>(); model_files = new ArrayList<String>(); + map_files = new ArrayList<String>(); if (args.length < 2) { @@ -65,6 +68,10 @@ public class Parameters { model_files.add(args[i]); } + else if (args[i].endsWith(".map")) + { + map_files.add(args[i]); + } else if (args[i].endsWith(".pro")) { if (has_pro_file) @@ -121,6 +128,11 @@ public class Parameters return model_files; } + public List<String> get_map_files () + { + return model_files; + } + public String get_property_file () { return property_file; |


