diff --git a/bin/dl2u.ml b/bin/dl2u.ml new file mode 100644 index 0000000..40ef1d1 --- /dev/null +++ b/bin/dl2u.ml @@ -0,0 +1,17 @@ +open Birds +let _ = + if Array.length Sys.argv < 2 then + print_endline "Invalid arguments. File name must be passed." + else begin + let filename = Sys.argv.(1) in + let chan = open_in filename in + let lexbuf = Lexing.from_channel chan in + let ast = Parser.main Lexer.token lexbuf in + match Ast2sql.convert_expr_to_operation_based_sql ast with + | Result.Error err -> + print_endline @@ Ast2sql.show_error err + | Result.Ok operations -> + List.iter (fun op -> + print_endline @@ Ast2sql.stringify_sql_operation op + ) operations + end diff --git a/bin/dune b/bin/dune index 11bfd81..fdc1e85 100644 --- a/bin/dune +++ b/bin/dune @@ -4,6 +4,12 @@ (modules u2dl) (libraries birds sql)) +(executable + (public_name dl2u) + (name dl2u) + (modules dl2u) + (libraries birds)) + (executable (public_name parse) (name parse) diff --git a/examples/dl2u_sample.dl b/examples/dl2u_sample.dl new file mode 100644 index 0000000..5575e67 --- /dev/null +++ b/examples/dl2u_sample.dl @@ -0,0 +1,5 @@ +source ed('EMP_NAME':string,'DEPT_NAME':string). +source eed('EMP_NAME':string,'DEPT_NAME':string). ++eed(E, D) :- ed(E, D), D = 'A', E <> 'Joe', ¬eed(E, D). +-eed(E, D) :- ed(V1, D), eed(E, D), E = 'Joe', D = 'A', V1 <> 'Joe', ¬eed(V1, D). ++ed(E, D) :- ed(V1, D), E = 'Joe', D = 'A', V1 <> 'Joe', ¬ed(E, D), ¬eed(V1, D).