@@ -2,26 +2,40 @@ type parsed_instruction =
22 | Add of string
33 | Enable_index of bool * int
44 | Enable of bool * string
5- | Parsing_error
5+ | Parsing_error of string
66
77let parse_input s =
8+ let parse_enable_label s bool =
9+ match s with
10+ | "" -> Parsing_error " Empty rule name"
11+ | s ->
12+ let fst = String. sub s 0 1 in
13+ if fst = " '" then
14+ if String. sub s (String. length s - 1 ) 1 = " '" then
15+ Enable (bool , String. sub s 1 (String. length s - 2 ))
16+ else
17+ Parsing_error " Label quotation marks were not closed"
18+ else (
19+ match int_of_string_opt s with
20+ | None ->
21+ Parsing_error
22+ (" Invalid index: " ^ s
23+ ^ " . Please put a label inside of quotation marks, e.g. 'label'." )
24+ | Some i -> Enable_index (true , i)
25+ )
26+ in
827 (* ---- ADD ---- *)
928 if String. starts_with ~prefix: " add" s then (
1029 let s = String. trim (String. sub s 3 (String. length s - 3 )) in
1130 Add s
1231 ) else if String. starts_with ~prefix: " enable" s then (
1332 let s = String. trim (String. sub s 6 (String. length s - 6 )) in
14- match int_of_string_opt s with
15- | None -> Parsing_error
16- | Some i -> Enable_index (true , i)
33+ parse_enable_label s true
1734 ) else if String. starts_with ~prefix: " disable" s then (
1835 let s = String. trim (String. sub s 7 (String. length s - 7 )) in
19- match int_of_string_opt s with
20- | None -> Parsing_error
21- | Some i -> Enable_index (false , i)
36+ parse_enable_label s false
2237 ) else
23- Parsing_error
24- (* TODO enable 'label' *)
38+ Parsing_error (" Unknown command: " ^ s)
2539
2640let main () =
2741 let start_time = Sys. time () in
@@ -101,8 +115,8 @@ let main () =
101115 print_endline (" Enabling rule at index " ^ string_of_int i ^ " ..." )
102116 in
103117 Export_to_KaSa. enable_rule_index i state
104- | _ ->
105- print_endline " ?? " ;
118+ | Parsing_error s ->
119+ print_endline ( " ERROR: Parsing error: " ^ s) ;
106120 state
107121 in
108122 let error = Export_to_KaSa. get_errors state in
0 commit comments