plugin for sql
[afterthought.git] / python.ml
1 (* To be cleaned up - prototype version *)
2
3 open Globals
4 open Xpath_syntax
5 open Printf
6 open Sql
7
8 type block = If of exp * block * block 
9   | Return of exp
10   | Call of lval option * exp
11   | Set of lval * exp
12 and
13   exp = Expr of Xpath_syntax.expr | Sql of sql
14 and
15   lval = Lval of string
16
17 let rec str_of_expr = function
18   | String_literal(s)->sprintf "\"%s\"" s
19   | Number_literal(f)->if (f=1.0) then "true" else if (f=0.0) then "false" else sprintf "%f" f
20   | Var(s)->s
21   (*| Function of string * (expr list)
22   | PathExpr of path_expr
23     *)
24   | Equal(e1,e2) -> (str_of_expr e1) ^ "=" ^ (str_of_expr e2)
25   | NotEqual(e1,e2) -> (str_of_expr e1) ^ "!=" ^ (str_of_expr e2)
26   | Lower(e1,e2) -> (str_of_expr e1) ^ "<" ^ (str_of_expr e2)
27   | Greater(e1,e2) -> (str_of_expr e1) ^ ">" ^ (str_of_expr e2)
28   | LowerEqual(e1,e2) -> (str_of_expr e1) ^ "<=" ^ (str_of_expr e2)
29   | GreaterEqual(e1,e2) -> (str_of_expr e1) ^ ">=" ^ (str_of_expr e2)
30   | _ -> print "Expression type not supported yet";raise AftError
31   (*
32   | Plus of expr * expr
33   | Minus of expr * expr
34   | Mul of expr * expr
35   | Div of expr * expr
36   | Mod of expr * expr
37   | UnaryMinus of expr
38   | Or of expr * expr
39   | And of expr * expr
40   *)
41
42 let rec pretty_print_block tablevel = function
43   | Return(Expr(e)) -> tabprint tablevel "return %s\n" (str_of_expr(e))
44   | Set(Lval(s),Sql(e)) -> tabprint tablevel "%s = %s" s (pretty_print_statement e)
45   | If(ex, b1, b2) -> 
46       match ex with 
47         | Sql(e) ->
48             tabprint tablevel "if (%s):\n" (pretty_print_statement e);
49             pretty_print_block (tablevel+1) b1;
50             tabprint tablevel "else:\n";
51             pretty_print_block (tablevel+1) b2
52         | Expr(e) ->
53             tabprint tablevel "if (%s):\n" (str_of_expr e);
54             pretty_print_block (tablevel+1) b1;
55             tabprint tablevel "else:\n";
56             pretty_print_block (tablevel+1) b2
57   | _ -> print "Expression type not supported yet";raise AftError