blob: 63ecfb968db55842a1bec68d35b5a0b20313677b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
module Ast = Modal.Ast
module Parse = Modal.Parse
module Eval = Modal.Eval
module Program = Modal.Program
let () =
let usage = "Usage: modal [-q] [-a] [-n] RULES.modal [INPUT]" in
if Array.length Sys.argv < 2 then (prerr_endline usage; exit 2);
let cfg = Eval.default_config () in
let rec parse_flags i =
if i < Array.length Sys.argv && String.length Sys.argv.(i) > 0 && Sys.argv.(i).[0] = '-' then (
(match Sys.argv.(i) with
| "-q" -> cfg.quiet <- true
| "-a" -> cfg.allow_access <- true
| "-n" -> cfg.cycles <- 0x7fffffff
| _ -> ());
parse_flags (i + 1))
else i
in
let i = parse_flags 1 in
if i >= Array.length Sys.argv then (prerr_endline usage; exit 2);
let rules_path = Sys.argv.(i) in
let input_arg = if i + 1 < Array.length Sys.argv then Some Sys.argv.(i + 1) else None in
let rules, file_input = Program.load_file rules_path in
let input =
match input_arg with
| Some s -> Parse.parse s
| None -> (
match file_input with Some n -> n | None -> Ast.List [])
in
let result = Eval.eval ~config:cfg rules input in
Format.printf "%a\n" Ast.pp result
|