Initial public import
[afterthought.git] / python.ml
1 (* To be cleaned up - prototype version *)
2
3 open Globals
4 open Xpath_syntax
5 open Printf
6
7 type block = If of exp * block * block 
8   | Return of exp
9   | Call of lval option * exp
10
11   | Set of lval * exp
12 and
13   exp = Xpath_syntax.expr
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
43 let rec pretty_print_block tablevel = function
44   | Return(e) -> tabprint tablevel "return %s\n" (str_of_expr(e))
45   | If(e, b1, b2) -> 
46       tabprint tablevel "if (%s):\n" (str_of_expr(e));
47       pretty_print_block (tablevel+1) b1;
48       tabprint tablevel "else:\n";
49       pretty_print_block (tablevel+1) b2
50   | _ -> print "Expression type not supported yet";raise AftError