| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-19 10:29:52 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-19 10:29:52 +0200 | 
| commit | 70b40bfb6c032c0dead7069b2178a43e63a8e563 (patch) | |
| tree | fddf894ab2642aad5d6a87b85c00192833c0d64b /instr-to-kodkod/parser | |
| parent | 1cac6685e5dc334473c304194d5f816b6ecf3469 (diff) | |
First shot at the framework (it does compile).
Diffstat (limited to 'instr-to-kodkod/parser')
| -rw-r--r-- | instr-to-kodkod/parser/Makefile | 8 | ||||
| -rw-r--r-- | instr-to-kodkod/parser/PropertyParser.g4 | 70 | 
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)));        }     )* | 


