| 1 |
(* To test PXP pull parsers *)
|
| 2 |
|
| 3 |
open Pxp_yacc
|
| 4 |
open Pxp_lexer_types
|
| 5 |
open Pxp_types
|
| 6 |
open Printf
|
| 7 |
|
| 8 |
|
| 9 |
(* dump_event: dumps a single parsing event *)
|
| 10 |
|
| 11 |
let dump_event e = ()
|
| 12 |
|
| 13 |
(*
|
| 14 |
let dump_event =
|
| 15 |
function
|
| 16 |
E_start_doc(v,sa,dtd) ->
|
| 17 |
printf "E_start_doc version=%s standalone=%b\n" v sa
|
| 18 |
| E_end_doc ->
|
| 19 |
printf "E_end_doc\n"
|
| 20 |
| E_start_tag(name,attlist,_) ->
|
| 21 |
printf "E_start_tag %s %s\n" name
|
| 22 |
(String.concat " " (List.map (fun (n,v) -> n ^ "=" ^ v) attlist))
|
| 23 |
| E_end_tag(name,_) ->
|
| 24 |
printf "E_end_tag %s\n" name
|
| 25 |
| E_char_data data ->
|
| 26 |
printf "E_char_data %s\n" data
|
| 27 |
| E_pinstr(target,data) ->
|
| 28 |
printf "E_pinstr %s %s\n" target data
|
| 29 |
| E_comment data ->
|
| 30 |
printf "E_comment %s\n" data
|
| 31 |
| E_position(ent,line,col) ->
|
| 32 |
printf "E_position %s line=%d col=%d\n" ent line col
|
| 33 |
| E_error e ->
|
| 34 |
printf "E_error %s\n" (Pxp_types.string_of_exn e)
|
| 35 |
| E_end_of_stream ->
|
| 36 |
printf "E_end_of_stream\n"
|
| 37 |
*)
|
| 38 |
|
| 39 |
|
| 40 |
(* parse: prints the events while parsing the passed string *)
|
| 41 |
|
| 42 |
let pull s =
|
| 43 |
let config = default_config in
|
| 44 |
let mgr = create_entity_manager config (from_file s) in
|
| 45 |
let next_event =
|
| 46 |
create_pull_parser config (`Entry_document [`Extend_dtd_fully]) mgr in
|
| 47 |
let event = ref (Some E_end_of_stream) in
|
| 48 |
while !event <> None do
|
| 49 |
event := next_event();
|
| 50 |
match !event with
|
| 51 |
Some e -> dump_event e
|
| 52 |
| None -> ()
|
| 53 |
done
|
| 54 |
|
| 55 |
|
| 56 |
let push s =
|
| 57 |
process_entity
|
| 58 |
default_config
|
| 59 |
(`Entry_document[(* `Extend_dtd_fully *)])
|
| 60 |
(create_entity_manager default_config (from_file s))
|
| 61 |
dump_event
|
| 62 |
|
| 63 |
let () = push Sys.argv.(1)
|