Execute a Markov algorithm: Difference between revisions
Content added Content deleted
(Updated D entry) |
m (On seeing this again, the use of a module hinders clarity, so I removed it) |
||
Line 2,076:
Str.replace_first a b s
▲ let parse_rules cin =
▲ let open Str in
▲ let rule = regexp "\\(.+\\)[ \t]+->[ \t]+\\(.*\\)" in
▲ let leader s c = String.length s > 0 && s.[0] = c in
▲ let parse_b s = if leader s '.' then (string_after s 1,true) else (s,false) in
let s = input_line cin in
▲ let rec parse_line rules =
▲ try
else if
parse_line ((a,b,terminate)::rules)
▲ let b,terminate = parse_b (matched_group 2 s) in
▲ parse_line ((a,b,terminate)::rules)
▲ else failwith ("parse error: "^s)
▲ with End_of_file -> rules
▲ in List.rev (parse_line [])
let _ =
Line 2,110 ⟶ 2,107:
print_endline "Expecting one argument: a filename where rules can be found."
else
let rules = try_finally (open_in Sys.argv.(1))
(* Translate lines read from stdin, until EOF *)
let rec translate () =
print_endline (
translate ()
in try translate () with End_of_file -> ()</lang>
|