open Genlex let lexer = make_lexer [ "i"; "n"; "["; "]" ] let add_inst s = function [] -> print_string s; print_char ' '; [] crt::t -> (s::crt)::t let end_comp = function _::(s::r)::t -> ((s^" ]")::r)::t _ -> print_string "] "; [] let print_revlvl = let reviter f l = List.iter f (List.rev l) in reviter (reviter (fun s -> print_string s; print_char ' ')) let rec do_compound s lvl = parser [< nlvl = do_ilist ([]::(add_inst (s^" [") lvl)); 'Kwd "]" >] -> end_comp nlvl and do_ilist lvl = let do_instr lvl = parser [< 'Kwd "i" ; p = parser [< 'Kwd "["; pc = do_compound "i" lvl >] -> pc [< >] -> print_revlvl lvl; print_string "i "; [] >] -> p [< 'Kwd "n" ; p = parser [< 'Kwd "["; pc = do_compound "n" lvl >] -> pc [< >] -> add_inst "n" lvl >] -> p [< 'Ident s; 'Kwd "["; p = do_compound s lvl >] -> p in parser [< lvl1 = do_instr lvl; lvl2 = do_ilist lvl1 >] -> lvl2 [< >] -> lvl let () = ignore (do_ilist [] (lexer (Stream.of_channel stdin)))
This document was generated using caml2html