123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990(* This file is free software, part of dolmen. See file "LICENSE" for more information *)moduleMake(L:Dolmen_intf.Location.S)(I:Dolmen_intf.Id.Logic)(T:Dolmen_intf.Term.Logicwithtypelocation:=L.tandtypeid:=I.t)(S:Dolmen_intf.Stmt.Logicwithtypelocation:=L.tandtypeid:=I.tandtypeterm:=T.t)=structexceptionExtension_not_foundofstringmoduletypeS=Dolmen_intf.Language.Swithtypestatement:=S.ttypelanguage=|Dimacs|ICNF|Smtlib|Tptp|Zfletenum=["dimacs",Dimacs;"iCNF",ICNF;"smt2",Smtlib;"tptp",Tptp;"zf",Zf;]letstring_of_languagel=fst(List.find(fun(_,l')->l=l')enum)letassoc=[Dimacs,".cnf",(moduleDolmen_dimacs.Make(L)(T)(S):S);ICNF,".icnf",(moduleDolmen_icnf.Make(L)(T)(S):S);Smtlib,".smt2",(moduleDolmen_smtlib.Make(L)(I)(T)(S):S);Tptp,".p",(moduleDolmen_tptp.Make(L)(I)(T)(S):S);Zf,".zf",(moduleDolmen_zf.Make(L)(I)(T)(S):S);]letof_languagel=List.find(fun(l',_,_)->l=l')assocletof_extensionext=tryList.find(fun(_,ext',_)->ext=ext')assocwithNot_found->raise(Extension_not_foundext)letof_filenames=of_extension(Dolmen_std.Misc.get_extensions)letfind?language?(dir="")file=matchlanguagewith|None->letf=ifFilename.is_relativefilethenFilename.concatdirfileelsefileinifSys.file_existsfthenSomefelseNone|Somel->let_,_,(moduleP:S)=of_languagelinP.find~dirfileletparse_file?languagefile=letl,_,(moduleP:S)=matchlanguagewith|None->of_filenamefile|Somel->of_languagelinl,P.parse_filefileletparse_input?language=function|`Filefile->letl,_,(moduleP:S)=matchlanguagewith|Somel->of_languagel|None->of_extension(Dolmen_std.Misc.get_extensionfile)inletgen,cl=P.parse_input(`Filefile)inl,gen,cl|`Stdinl->let_,_,(moduleP:S)=of_language(matchlanguagewith|Somel'->l'|None->l)inletgen,cl=P.parse_input`Stdininl,gen,clend