]> matita.cs.unibo.it Git - helm.git/commitdiff
* added backtracking in matching code (hairy code!)
authorLuca Padovani <luca.padovani@unito.it>
Mon, 11 Jul 2005 13:54:09 +0000 (13:54 +0000)
committerLuca Padovani <luca.padovani@unito.it>
Mon, 11 Jul 2005 13:54:09 +0000 (13:54 +0000)
helm/ocaml/cic_notation/TODO
helm/ocaml/cic_notation/cicNotationMatcher.ml
helm/ocaml/cic_notation/cicNotationMatcher.mli

index 2ba0283ce6b9c4f9279804df58f7f3c171c4baf1..73a2a49a6f40ed0fd0fd6d7ce6445aafb8732c7a 100644 (file)
@@ -3,25 +3,25 @@ TODO
 
 * implementare trasformazione 1 => 0
 * gestione priorita'/associativita'
-  - annotazioni nel livello 1 generato?
   - triplicare livelli nella grammatica?
 * implementare type-checker per le trasformazioni
 * prestazioni trasformazioni 3 => 2 e 2 => 1
-* problema con pattern overlapping per i magic al livello 2
 * magic per gestione degli array?
 * gestione speciale dei numeri
-* gestione greedyness dei magic in 2 => 1
 * sintassi concreta / prelexing
   - studiare/implementare sintassi con ... per i magic fold
 * integrazione
   - porting della disambiguazione al nuovo ast
   - apportare all'ast le modifiche di CicAst (case, cast non come annotazione,
     tipi opzionali nel let rec e nelle definizioni)
-* href multipli
 
 DONE
 
 * implementare istanziazione dei magic a livello 1 (2 => 1)
 * implementare compilazione dei default in 2 => 1
   -> Tue, 07 Jun 2005 17:17:36 +0200 zack
+* annotazioni nel livello 1 generato
+* problema con pattern overlapping per i magic al livello 2
+* gestione greedyness dei magic in 2 => 1
+* href multipli
 
index 6b1266ec8c41bd62410c3f68f443f1e18af10fa1..1a0c024104feaaab9f730ed16c5101c3f72ce965 100644 (file)
@@ -139,7 +139,18 @@ struct
         k
       else if are_empty t then
         let res = match_cb (matched t) in
-        (fun matched_terms _ -> res matched_terms)
+        (fun matched_terms terms ->
+          match res matched_terms with
+              None ->
+                begin
+                  (* the match has failed, we rollback the last matched term
+                   * into the unmatched ones and call the failure continuation
+                   *)
+                  match matched_terms with
+                      hd :: tl -> k tl (hd :: terms)
+                    | _ -> assert false
+                end
+            | Some v -> Some v)
       else
         match horizontal_split t with
         | _, [], _ -> assert false
@@ -331,12 +342,9 @@ struct
          (fun term env ->
             prerr_endline "GUARDIA?" ;
             match compiled_guard term with
-              | None -> 
-                  prerr_endline "SONO CAZZI H2SO4" ;
-                  None
+              | None -> None
               | Some _ ->
                   begin
-                    prerr_endline "OKKKKKKKKKKKKKK" ;
                     match compiled_p term with
                       | None -> None
                       | Some (env', _) ->
index 55de82999f9aa8537637a7838a0c374324570719..4abb5b8bc9b37127e77243f74172f025f38e8459 100644 (file)
@@ -39,9 +39,9 @@ module Matcher (P: PATTERN) :
 sig
   val compiler:
     (P.pattern_t * int) list ->
-    ((P.pattern_t list * int) list -> P.term_t list -> 'a) ->
-    (unit -> 'a) ->
-      (P.term_t -> 'a)
+    ((P.pattern_t list * int) list -> P.term_t list -> 'a option) ->
+    (unit -> 'a option) ->
+      (P.term_t -> 'a option)
 end
 
 module Matcher21: