]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/eval.ml
debian release -3
[helm.git] / helm / ocaml / mathql_interpreter / eval.ml
index c36b92fd2bedc004bd3b3cfba9d9ac38f4ed2c06..43296cd0732d27fa226cc68143f2d09b40921b31 100644 (file)
@@ -27,7 +27,7 @@
  *
  *)
 
-open Mathql;;
+open MathQL;;
 
 (*
  * conversione di un pattern
@@ -37,28 +37,31 @@ let rec patterneval p =
    [] -> ""
  | head::tail ->
     let h = match head with
-               MQString (s) -> Str.global_replace (Str.regexp "\.") "\\\\\." s
-            |  MQSlash -> "/"
-            |  MQAnyChr -> "[^/]?"
-            |  MQAst -> "[^/]*"
-            |  MQAstAst -> ".*"
+               MQBC s -> Str.global_replace (Str.regexp "\.") "\\\\\." s
+            |  MQBD -> "/"
+            |  MQBQ -> "[^/#]?"
+            |  MQBS -> "[^/#]*"
+            |  MQBSS -> "[^#]*"
     in
      h ^ (patterneval tail)
 ;;
 
+let rec fieval fi =
+ match fi with
+    [] -> ""
+  | MQFC i :: tail -> "/" ^ (string_of_int i) ^ (fieval tail)
+  | MQFS :: tail -> "[^/]*" ^ (fieval tail)
+  | MQFSS :: tail -> ".*"  ^ (fieval tail)
+;;
+
 (*
  * conversione di un fragment identifier
  *)
 let fieval fi =
- match fst fi with
-    None -> ""
- |  Some i ->
-     let s = "#xpointer\\\\(1/" ^ string_of_int (i) in
-      match snd fi with
-         None ->
-         s ^ "\\\\)"
-      |  Some j ->
-         s ^ "/" ^ string_of_int j ^ "\\\\)"
+ if fi = [] then
+  ""
+ else
+  "#xpointer\\\\(1" ^ fieval fi ^ "\\\\)"
 ;;
 
 (*
@@ -77,7 +80,9 @@ let exteval ext =
  * valuta il preambolo
  *)
 let preeval p =
- p
+ match p with 
+    Some s -> s
+  | None -> "[^/]*"
 ;;
 
 (*
@@ -87,7 +92,7 @@ let preeval p =
  * SQL standard LIKE perche' MathQL prevede esperssioni con "*"
  * e con "**".
  *)
-let pattern_match preamble pattern fragid =
- " ~ '" ^ (preeval preamble) ^ ":/" ^ (patterneval pattern) ^ (fieval fragid) ^ "'"
+let pattern_match (preamble, pattern, fragid) =
+ " ~ '^" ^ (preeval preamble) ^ ":/" ^ (patterneval pattern) ^ (fieval fragid) ^ "$'"
 ;;