]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/mathql.ml
First very-very-very-very-alfa release of a MathQL Interpreter implemented
[helm.git] / helm / ocaml / mathql_interpreter / mathql.ml
diff --git a/helm/ocaml/mathql_interpreter/mathql.ml b/helm/ocaml/mathql_interpreter/mathql.ml
new file mode 100644 (file)
index 0000000..1fea24c
--- /dev/null
@@ -0,0 +1,106 @@
+(* 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 mquptoken =
+   | MQString of string                     (* a constant string *)
+   | MQSlash                                (* a slash: '/' *)
+   | MQAnyChr                               (* Any single character: '?' *)
+   | MQAst                                  (* single asterisk: '*' *)
+   | MQAstAst                               (* double asterisk: '**' *)
+
+type mqup = mquptoken list                  (* uri pattern (helper) *)
+
+type mqfi = int option * int option
+
+type mqtref = string * mqup * string * mqfi (* HELM preamble,
+                                              uri pattern, 
+                                              extension, 
+                                             fragment identifier *)
+
+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             (*  *)
+   | MQIntersect of mqlist * mqlist         (*  *)
+
+type mquery =
+   | MQList of mqlist
+   
+(* Output types *************************************************************)
+(* main type is mqresult                                                    *)
+
+(* TODO: usare le uri in questo formato *)
+type mquref = UriManager.uri * mqfi         (* uri, fragment identifier *)
+
+type mqrefs = mqtref list                   (* list of references (helper) *)
+
+type mqresult =                         
+   | MQStrUri of string list
+   | MQRefs of mqrefs