summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-07-19 10:29:52 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-07-19 10:29:52 +0200
commit70b40bfb6c032c0dead7069b2178a43e63a8e563 (patch)
treefddf894ab2642aad5d6a87b85c00192833c0d64b /instr-to-kodkod/parser
parent1cac6685e5dc334473c304194d5f816b6ecf3469 (diff)
First shot at the framework (it does compile).
Diffstat (limited to 'instr-to-kodkod/parser')
-rw-r--r--instr-to-kodkod/parser/Makefile8
-rw-r--r--instr-to-kodkod/parser/PropertyParser.g470
2 files changed, 70 insertions, 8 deletions
diff --git a/instr-to-kodkod/parser/Makefile b/instr-to-kodkod/parser/Makefile
new file mode 100644
index 0000000..8f36479
--- /dev/null
+++ b/instr-to-kodkod/parser/Makefile
@@ -0,0 +1,8 @@
+PropertyParser.java: PropertyLexer.g4 PropertyParser.g4
+ java -jar ../antlr-4.7-complete.jar PropertyLexer.g4 PropertyParser.g4
+
+clean:
+ rm -f *.java *.class *.tokens
+
+#test_run:
+# java -cp ".:../antlr-4.7-complete.jar" org.antlr.v4.gui.TestRig Property prog -gui
diff --git a/instr-to-kodkod/parser/PropertyParser.g4 b/instr-to-kodkod/parser/PropertyParser.g4
index 63939d7..5e1ed11 100644
--- a/instr-to-kodkod/parser/PropertyParser.g4
+++ b/instr-to-kodkod/parser/PropertyParser.g4
@@ -20,26 +20,80 @@ options
/* of the class */
}
-prog:
- tag_existing
-;
+tag_existing
+ returns [Formula result]:
-tag_existing:
(WS)* TAG_EXISTING_KW
L_PAREN
- (tag_item)+
+ tag_list
R_PAREN
(WS)* sl_formula
(WS)* R_PAREN
+
+ {
+ final List<String[]> tags;
+
+ $result = ($sl_formula.result);
+
+ tags = ($tag_list.list);
+
+ for (final String[] tag_var: tags)
+ {
+ $result =
+ $result.forSome
+ (
+ Main.get_variable_manager().get_variable
+ (
+ tag_var[0]
+ ).oneOf
+ (
+ Main.get_model().get_type_as_relation(tag_var[1])
+ )
+ );
+
+ Main.get_variable_manager().tag_variable(tag_var[0], tag_var[2]);
+ }
+ }
;
-tag_item:
+tag_list
+ returns [List<String[]> list]
+
+ @init
+ {
+ final List<String[]> result = new ArrayList<String[]>();
+ }
+
+ :
+ (
+ tag_item
+ {
+ result.add(($tag_item.result));
+ }
+ )+
+
+ {
+ $list = result;
+ }
+;
+
+tag_item
+ returns [String[] result]:
+
(WS)* L_PAREN
(WS)* var=ID
(WS)+ type=ID
(WS)+ tag=ID
(WS)* R_PAREN
(WS)*
+
+ {
+ $result = new String[3];
+
+ $result[0] = ($var.text);
+ $result[1] = ($type.text);
+ $result[2] = ($tag.text);
+ }
;
id_list
@@ -53,9 +107,9 @@ id_list
:
(
(WS)+
- var=ID
+ ID
{
- result.add(Main.get_variable_manager().get_variable($var.text));
+ result.add(Main.get_variable_manager().get_variable(($ID.text)));
}
)*