From 68ba7342ae683c37ad44ae09eb641d17ac2982d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20Wi=C3=9Fmann?= <uni@thorsten-wissmann.de> Date: Wed, 16 Jul 2014 14:23:19 +0200 Subject: [PATCH] Implement sortTable generation --- src/lib/FunctorParsing.ml | 38 +++++++++++++++++++++++++++++++++ src/lib/FunctorParsing.mli | 5 +++++ src/testsuite/cool-testsuite.ml | 5 +---- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/lib/FunctorParsing.ml b/src/lib/FunctorParsing.ml index 6962013..be27697 100644 --- a/src/lib/FunctorParsing.ml +++ b/src/lib/FunctorParsing.ml @@ -1,4 +1,5 @@ (* Parsing strings to sort tables *) +module CM = CoAlgMisc type functorExp = | Choice of functorExp * functorExp @@ -97,3 +98,40 @@ let functorExpFromString str : functorExp = result +let sortTableFromFunctorExp (fe:functorExp) : CoAlgReasoner.sortTable = + let logicName2Functor str = match str with + | "K" -> CM.MultiModalK + | "KD" -> CM.MultiModalKD + | "CL" -> CM.CoalitionLogic + | "GML" -> CM.GML + | "MultiModalK" -> CM.MultiModalK + | "MultiModalKD" -> CM.MultiModalKD + | "CoalitionLogic" -> CM.CoalitionLogic + | _ -> raise (FunctorParsingFailed ("Unknown Functor name "^str)) + in + let line = ref(0) in + let getLineNr () = + let nr = !line in + line := nr + 1; + nr + in + let rec generateSorts (fe:functorExp) : ((CM.functors * int list) list * int) = + (* generate sortTable lines for that functor and tell its line number *) + let nr = getLineNr () in + match fe with + | Unary str -> [ (logicName2Functor str, [0])], nr + | Choice (a,b) -> + let (a_table, a_nr) = generateSorts a in + let (b_table, b_nr) = generateSorts b in + ((CM.Choice, [a_nr; b_nr])::(List.append a_table b_table)), nr + | Fusion (a,b) -> + let (a_table, a_nr) = generateSorts a in + let (b_table, b_nr) = generateSorts b in + ((CM.Fusion, [a_nr; b_nr])::(List.append a_table b_table)), nr + in + let fst (x,_ ) = x in + Array.of_list (fst (generateSorts fe)) + +let sortTableFromString str : CoAlgReasoner.sortTable = + sortTableFromFunctorExp (functorExpFromString str) + diff --git a/src/lib/FunctorParsing.mli b/src/lib/FunctorParsing.mli index 4e2f8c1..0358ba1 100644 --- a/src/lib/FunctorParsing.mli +++ b/src/lib/FunctorParsing.mli @@ -10,4 +10,9 @@ exception FunctorParsingFailed of string val stringFromFunctorExp : functorExp -> string val functorExpFromString : string -> functorExp +val sortTableFromFunctorExp : functorExp -> CoAlgReasoner.sortTable + +val sortTableFromString : string -> CoAlgReasoner.sortTable + +val stringFromSortTable : CoAlgReasoner.sortTable -> string diff --git a/src/testsuite/cool-testsuite.ml b/src/testsuite/cool-testsuite.ml index 498592b..fd36446 100644 --- a/src/testsuite/cool-testsuite.ml +++ b/src/testsuite/cool-testsuite.ml @@ -64,10 +64,7 @@ let cl_testcases : satCheck list = ; c Sat "([{1 3}] C) & ([{ 2 3 }] ~C )" ] -let kAndKd = [| (CoAlgMisc.Fusion, [1; 2]); - (CoAlgMisc.MultiModalK, [0]); - (CoAlgMisc.MultiModalKD, [0]) - |] +let kAndKd = FunctorParsing.sortTableFromString "K * KD" let kAndKd_testcases : satCheck list = let c a b = (a,kAndKd,b) in -- GitLab