program markov_algorithm; magic := false; if command_line(1) = om then print("error: no ruleset file given"); stop; elseif command_line(2) = om then print("error: no input string given"); stop; end if; rules := read_file(command_line(1)); input := command_line(2); loop do loop for [pat, repl, trm] in rules do if pat in input then input(pat) := repl; if trm then quit; else continue loop do; end if; end if; end loop; quit; end loop; print(input); proc read_file(file_name); if (rulefile := open(file_name, "r")) = om then print("error: cannot open ruleset file"); stop; end if; rules := []; loop doing line := getline(rulefile); while line /= om do rule := parse_rule(line); if rule /= om then rules with:= rule; end if; end loop; return rules; end proc; proc parse_rule(rule); if rule(1) = "#" then return om; end if; $ comment if " -> " notin rule then return om; end if; $ not a rule [s, e] := mark(rule, " -> "); pattern := rule(..s-1); repl := rule(e+1..); whitespace := "\t\r\n "; span(pattern, whitespace); rspan(pattern, whitespace); span(repl, whitespace); rspan(repl, whitespace); trm := match(repl, ".") /= ""; return [pattern, repl, trm]; end proc; end program;