]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/mathql_interpreter/eval.ml
9a5d90dee13762f5200c273b9e0f14f1a2dc734a
[helm.git] / helm / ocaml / mathql_interpreter / eval.ml
1
2 (*
3  *
4  *)
5
6 open Mathql;;
7
8 (*
9  * conversione di un pattern
10  *)
11 let rec patterneval p =
12  match p with
13    [] -> ""
14  | head::tail ->
15     let h = match head with
16                MQString (s) -> s
17             |  MQSlash -> "/"
18             |  MQAnyChr -> "[^/]?"
19             |  MQAst -> "[^/]*"
20             |  MQAstAst -> ".*"
21     in
22      h ^ (patterneval tail)
23 ;;
24
25 (*
26  * conversione di un fragment identifier
27  *)
28 let fieval fi =
29  match fst fi with
30     None -> ""
31  |  Some i ->
32      let s = "#xpointer\(1/" ^ string_of_int (i) in
33       match snd fi with
34          None ->
35           s ^ "\)"
36       |  Some j ->
37           s ^ "/" ^ string_of_int j ^ "\)"
38 ;;
39
40 (*
41  * trasforma un pattern MathQL in un pattern postgresql
42  *
43  * si utilizzano espressioni regolari POSIX anziche' l'operatore
44  * SQL standard LIKE perche' MathQL prevede esperssioni con "*"
45  * e con "**".
46  *)
47 let pattern_match preamble pattern ext fragid =
48  " ~ '" ^ preamble ^ ":/" ^ (patterneval pattern) ^ "." ^ ext ^ (fieval fragid) ^ "'"
49 ;;