]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql/mathQL.ml
textual parser and other utilities for mathql
[helm.git] / helm / ocaml / mathql / mathQL.ml
diff --git a/helm/ocaml/mathql/mathQL.ml b/helm/ocaml/mathql/mathQL.ml
new file mode 100644 (file)
index 0000000..d1e89de
--- /dev/null
@@ -0,0 +1,107 @@
+(* Copyright (C) 2000, HELM Team.
+ * 
+ * This file is part of HELM, an Hypertextual, Electronic
+ * Library of Mathematics, developed at the Computer Science
+ * Department, University of Bologna, Italy.
+ * 
+ * HELM is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * HELM is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HELM; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA  02111-1307, USA.
+ * 
+ * For details, see the HELM World-Wide-Web page,
+ * http://cs.unibo.it/helm/.
+ *)
+
+(******************************************************************************)
+(*                                                                            *)
+(*                               PROJECT HELM                                 *)
+(*                                                                            *)
+(*                     Ferruccio Guidi <fguidi@cs.unibo.it>                   *)
+(*                     Domenico Lordi  <lordi@cs.unibo.it>                    *)
+(*                                 30/04/2002                                 *)
+(*                                                                            *)
+(*                                                                            *)
+(******************************************************************************)
+
+exception MQInvalidURI of string
+exception MQConnectionFailed of string
+exception MQInvalidConnection of string
+
+(* Input types **************************************************************)
+(* main type is mquery                                                      *)
+
+type mqrvar = string                       (* name *)
+
+type mqsvar = string                       (* name *)
+
+type mqpt = string option                  (* PROTOCOL TOKENS *)
+                                           (* Some = constant string *)
+                                          (* None = single star: '*' *)
+
+type mqbt =                                (* BODY TOKENS *)
+   | MQBC of string                        (* a constant string *)
+   | MQBD                                  (* a slash: '/' *)
+   | MQBQ                                  (* a question mark: '?' *)
+   | MQBS                                  (* a single star: '*' *)
+   | MQBSS                                 (* a double star: '**' *)
+
+type mqft =                                (* FRAGMENT TOKENS *)
+   | MQFC of int                           (* a constant integer *)
+   | MQFS                                  (* a single star: '*' *)
+   | MQFSS                                 (* a double star: '**' *)
+
+type mqtref = mqpt * (mqbt list) * (mqft list) (* tokenized reference *)
+
+type mqpattern = mqtref                     (* constant pattern *)
+
+type mqfunc =
+   | MQName                                 (* NAME *)
+
+type mqstring =
+   | MQCons of string                       (* constant *)
+   | MQFunc of mqfunc * mqrvar              (* function, rvar *)
+   | MQRVar of mqrvar                       (* rvar *)
+   | MQSVar of mqsvar                       (* svar *)
+   | MQMConclusion                          (* main conclusion *)
+   | MQConclusion                           (* inner conclusion *)
+
+type mqbool =
+   | MQTrue
+   | MQFalse
+   | MQAnd of mqbool * mqbool
+   | MQOr of mqbool * mqbool
+   | MQNot of mqbool
+   | MQIs of mqstring * mqstring            (* operands *)
+
+type mqlist =
+   | MQSelect of mqrvar * mqlist * mqbool   (* rvar, list, boolean *) 
+   | MQUse of mqlist * mqsvar               (* list, Position attribute *)
+   | MQUsedBy of mqlist * mqsvar            (* list, Position attribute *)
+   | MQPattern of mqpattern                 (* pattern *)
+   | MQUnion of mqlist * mqlist             (* operands *)
+   | MQIntersect of mqlist * mqlist         (* operands *)
+
+type mquery =
+   | MQList of mqlist
+   
+(* Output types *************************************************************)
+(* main type is mqresult                                                    *)
+
+(* TODO: usare le uri in questo formato *)
+type mquref = UriManager.uri * (int list)   (* uri, fragment identifier *)
+
+type mqrefs = string list                   (* list of references (helper) *)
+
+type mqresult =
+   | MQRefs of mqrefs