From 0aa3467526ca026be02ab39a22f9ccca1a41708c Mon Sep 17 00:00:00 2001
From: Christoph Egger <Christoph.Egger@fau.de>
Date: Fri, 30 Oct 2015 18:24:45 +0100
Subject: [PATCH] Read/Write CTL

---
 src/lib/CoAlgFormula.ml | 57 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/src/lib/CoAlgFormula.ml b/src/lib/CoAlgFormula.ml
index 5b44359..fc59e57 100644
--- a/src/lib/CoAlgFormula.ml
+++ b/src/lib/CoAlgFormula.ml
@@ -372,6 +372,28 @@ let rec exportFormula_buffer sb f =
       prio 4 f1
   | VAR s ->
      Buffer.add_string sb s
+  | AF f1 ->
+	 Buffer.add_string sb "AF ";
+	 prio 4 f1
+  | EF f1 ->
+	 Buffer.add_string sb "EF ";
+	 prio 4 f1
+  | AG f1 ->
+	 Buffer.add_string sb "AG ";
+	 prio 4 f1
+  | EG f1 ->
+	 Buffer.add_string sb "EG ";
+	 prio 4 f1
+  | AU (f1, f2) ->
+	 Buffer.add_string sb "A ";
+	 prio 4 f1;
+	 Buffer.add_string sb " U ";
+	 prio 4 f2
+  | EU (f1, f2) ->
+	 Buffer.add_string sb "E ";
+	 prio 4 f1;
+	 Buffer.add_string sb " U ";
+	 prio 4 f2
 
 (** Converts a formula into a string representation.
     Parentheses are ommited where possible
@@ -533,6 +555,7 @@ let lexer = A.make_lexer
     [":";";";"|-";"(";")";"=>";"<=>";"|";"&";"~";"@";"True";"False";"true";"false";"<";">";"[";"]";"{<=";"{>=";"}";"+";"[pi1]";"[pi2]"
      ;"[{";"}]";"<{";"}>";",";"/";"{<";"=";"=o";"O"
      ;"μ";"ν";"."
+	 ;"AX";"EX";"AF";"EF";"AG";"EG";"A";"E";"U"
     ] 
 
 let mk_exn s = CoAlgException s
@@ -759,6 +782,40 @@ and parse_rest ts =
       let (_, _, s) = boxinternals true "." in
       let f1 = parse_rest ts in
       NU (VAR s, f1)
+  | A.Kwd "AF" ->
+	  let f = parse_rest ts in
+	  AF f
+  | A.Kwd "EF" ->
+	  let f = parse_rest ts in
+	  EF f
+  | A.Kwd "AG" ->
+	  let f = parse_rest ts in
+	  AG f
+  | A.Kwd "EG" ->
+	  let f = parse_rest ts in
+	  EG f
+  | A.Kwd "A" ->
+	 let f1 = parse_rest ts in
+	 let _ = match Stream.next ts with
+	   | A.Kwd "U" -> "U"
+	   | t -> A.printError mk_exn ~t ~ts "String \"U\" from CTL expected: "
+	 in
+	 let f2 = parse_rest ts in
+	 AU (f1, f2)
+  | A.Kwd "E" ->
+	 let f1 = parse_rest ts in
+	 let _ = match Stream.next ts with
+	   | A.Kwd "U" -> "U"
+	   | t -> A.printError mk_exn ~t ~ts "String \"U\" from CTL expected: "
+	 in
+	 let f2 = parse_rest ts in
+	 EU (f1, f2)
+  | A.Kwd "AX" ->
+	 let f1 = parse_rest ts in
+	 AX ("", f1)
+  | A.Kwd "EX" ->
+	 let f1 = parse_rest ts in
+	 EX ("", f1)
   | t -> A.printError mk_exn ~t ~ts 
       "\"<\", \"[\", \"{>=\", \"{<=\", \"@\", \"~\", \"(\",
       \"True\", \"False\", \"=\", \"=o\", \"O\" or <ident> expected: "
-- 
GitLab