Initial public import
[afterthought.git] / aft.ml
1 open Xpath_syntax
2 open Xpath_ext
3 open Aft_parser
4 open Aft_lexer
5 open Aft_minterms
6 open Aft_types
7 open Printf
8 open Python_dict
9 open Python
10 open Globals
11
12 let lookup_term m_syms termid =
13     if (termid<255) then
14       let str = Array.get m_syms termid in
15         (pretty_print_xpath_path str)
16     else
17       let str = Array.get m_syms (termid-255) in
18         String.concat "" ["!";(pretty_print_xpath_path str)]
19
20 let rec print_term m_syms lst = 
21     match lst with
22       |(a::(b::cdr)) ->
23           let str = lookup_term m_syms a in
24             printf "%s." str;print_term m_syms (b::cdr)
25       |(a::cdr) ->
26           let str = lookup_term m_syms a in
27             printf "%s" str;print_term m_syms cdr
28       |[] -> printf "\n"
29
30 let main () =
31   let l_inp = Aft_lexer.parse_from_channel Pervasives.stdin in
32   let l = aft_to_il l_inp in
33   let m_list, m_syms, n_terms = aft_to_minterms l in
34   let opt_order = optimize_minterms m_syms n_terms in
35   let o_aft = minterms_to_aft m_list m_syms opt_order n_terms in
36   let o_py = from_aft o_aft in
37     (*print_minterms m_list;*)
38     (*List.iter (fun x->printf "%d->" x;printf "%s\n" (lookup_term m_syms x))
39       opt_order*)
40     pretty_print_block 0 o_py
41 ;;
42
43 main ()