Recent changes
Sapan Bhatia [Tue, 8 Feb 2011 16:13:38 +0000 (11:13 -0500)]
Makefile
acls/simple.acl
aft.ml
aft_il.ml
python.ml
python_dict.ml

index b436e11..11ba802 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -27,11 +27,11 @@ aft_parser.ml: aft_parser.mly
 
 aft_lexer.ml: aft_lexer.mll 
 
-aft.b: globals.cmo aft_types.cmo aft_lexer.cmo xpath_syntax.cmo aft_parser.cmo xpath_ext.cmo python.cmo python_dict.cmo aft_minterms.cmo aft.cmo
-       ocamlc -g globals.cmo aft_types.cmo xpath_ext.cmo xpath_syntax.cmo aft_parser.cmo aft_lexer.cmo python.cmo python_dict.cmo aft_minterms.cmo aft.cmo -o aft.b
+aft.b: globals.cmo aft_types.cmo aft_lexer.cmo xpath_syntax.cmo aft_parser.cmo xpath_ext.cmo python.cmo python_dict.cmo aft_minterms.cmo aft.cmo sql.cmo
+       ocamlc -g globals.cmo aft_types.cmo xpath_ext.cmo xpath_syntax.cmo aft_parser.cmo aft_lexer.cmo sql.cmo python.cmo python_dict.cmo aft_minterms.cmo aft.cmo -o aft.b
 
 dep:
        ocamldep *.ml *.mly *.mll > .dep
 
 clean:
-       rm -f *.cmo 
+       rm -f *.cmo *.mli *.cmi
index 83a1373..30bfcb2 100644 (file)
@@ -1,4 +1,4 @@
 /X[moo="bla"] -> {
-    /z -> { 1.0 } 
+    /z -> { 0.0 } 
     | /X[Y=/z/bling] -> {1.0}
 }
diff --git a/aft.ml b/aft.ml
index 42d521b..5c4bc35 100644 (file)
--- a/aft.ml
+++ b/aft.ml
@@ -7,6 +7,7 @@ open Aft_types
 open Printf
 open Python_dict
 open Python
+open Sql
 open Globals
 
 let lookup_term m_syms termid =
index 930cec6..f54bedf 100644 (file)
--- a/aft_il.ml
+++ b/aft_il.ml
@@ -113,4 +113,4 @@ let rec aft_to_il l_inp =
             cur_term
   in
   let minterm_list = aft_to_minterms_rec [] [] aft_rep in
-  
+    minterm_list
index 99dcbe0..0a75e49 100644 (file)
--- a/python.ml
+++ b/python.ml
@@ -3,14 +3,14 @@
 open Globals
 open Xpath_syntax
 open Printf
+open Sql
 
 type block = If of exp * block * block 
   | Return of exp
   | Call of lval option * exp
-
   | Set of lval * exp
 and
-  exp = Xpath_syntax.expr
+  exp = Expr of Xpath_syntax.expr | Sql of sql
 and
   lval = Lval of string
 
@@ -39,12 +39,19 @@ let rec str_of_expr = function
   | And of expr * expr
   *)
 
-
 let rec pretty_print_block tablevel = function
-  | Return(e) -> tabprint tablevel "return %s\n" (str_of_expr(e))
-  | If(e, b1, b2) -> 
-      tabprint tablevel "if (%s):\n" (str_of_expr(e));
-      pretty_print_block (tablevel+1) b1;
-      tabprint tablevel "else:\n";
-      pretty_print_block (tablevel+1) b2
+  | Return(Expr(e)) -> tabprint tablevel "return %s\n" (str_of_expr(e))
+  | Set(Lval(s),Sql(e)) -> tabprint tablevel "%s = %s" s (pretty_print_statement e)
+  | If(ex, b1, b2) -> 
+      match ex with 
+        | Sql(e) ->
+            tabprint tablevel "if (%s):\n" (pretty_print_statement e);
+            pretty_print_block (tablevel+1) b1;
+            tabprint tablevel "else:\n";
+            pretty_print_block (tablevel+1) b2
+        | Expr(e) ->
+            tabprint tablevel "if (%s):\n" (str_of_expr e);
+            pretty_print_block (tablevel+1) b1;
+            tabprint tablevel "else:\n";
+            pretty_print_block (tablevel+1) b2
   | _ -> print "Expression type not supported yet";raise AftError
index d39b216..5dac380 100644 (file)
@@ -5,6 +5,7 @@ open Xpath_syntax
 open Printf
 open Python
 open Globals
+open Sql
 
 let rec squash prefix = function
     | Slash(Root, e) ->
@@ -62,6 +63,14 @@ let rec fqe prefix = function
   | And(e1, e2) -> And(fqe prefix e1, fqe prefix e2)
   | l -> l
 
+let rec cond_to_sql_expr = function
+    | Slash(Root,e) -> cond_to_sql_expr e
+    | Condition(e, expr) ->
+        let prefix = squash "" e in
+            Select(["*"],prefix,Some(fqe "" expr))
+    | e -> 
+       Select(["*"],squash "" e,None)
+
 let rec cond_to_expr = function
     | Slash(Root,e) -> cond_to_expr e
     | Condition(e, expr) ->
@@ -73,10 +82,10 @@ let rec cond_to_expr = function
 let rec from_aft acl =
   let rec from_aft' l =
       match l with 
-        | Filter(x) -> Return(fqe "" x)
+        | Filter(x) -> Return(Expr(fqe "" x))
         | INF(path, True(l'), False(l'')) ->
-            let cond = cond_to_expr path in
-              If (cond, from_aft(l'), from_aft(l''))
+            let cond = cond_to_sql_expr path in
+              If (Sql(cond), from_aft(l'), from_aft(l''))
         | PatternMatch(_) -> print "Expression not reduced";raise AftError
   in
     from_aft' acl