home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Caml Light 0.61 / Source / src / lex / main.ml < prev    next >
Encoding:
Text File  |  1993-09-24  |  1.2 KB  |  50 lines  |  [TEXT/MPS ]

  1. (* The lexer generator. Command-line parsing. *)
  2.  
  3. #open "sys";;
  4. #open "lexing";;
  5. #open "parsing";;
  6. #open "syntax";;
  7. #open "scanner";;
  8. #open "grammar";;
  9. #open "lexgen";;
  10. #open "output";;
  11.  
  12. let main () =
  13.   if vect_length command_line != 2 then begin
  14.     prerr_endline "Usage: camllex <input file>";
  15.     io__exit 2
  16.   end;
  17.   let source_name = command_line.(1) in
  18.   let dest_name =
  19.     if filename__check_suffix source_name ".mll" then
  20.       filename__chop_suffix source_name ".mll" ^ ".ml"
  21.     else
  22.       source_name ^ ".ml" in
  23.   ic := open_in_bin source_name;
  24.   oc := open_out dest_name;
  25.   let lexbuf =
  26.     create_lexer_channel !ic in
  27.   let (Lexdef(header,_) as def) =
  28.     try
  29.       lexer_definition main lexbuf
  30.     with
  31.       Parse_error x ->
  32.         prerr_string "Syntax error around char ";
  33.         prerr_int (get_lexeme_start lexbuf);
  34.         prerr_endline ".";
  35.         exit 2
  36.     | scan_aux__Lexical_error s ->
  37.         prerr_string "Lexical error around char ";
  38.         prerr_int (get_lexeme_start lexbuf);
  39.         prerr_string ": ";
  40.         prerr_string s;
  41.         prerr_endline ".";
  42.         exit 2 in
  43.   let ((init, states, acts) as dfa) = make_dfa def in
  44.   output_lexdef header dfa;
  45.   close_in !ic;
  46.   close_out !oc
  47. ;;
  48.  
  49. printexc__f main ();;
  50.