home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / src / !runtime / lexing.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-18  |  850 b   |  36 lines  |  [TEXT/R*ch]

  1. /* The "get_next_char" routine for lexers generated by camllex. */
  2.  
  3. #include "mlvalues.h"
  4. #include "stacks.h"
  5. #include "str.h"
  6.  
  7. struct lexer_buffer {
  8.   value refill_buff;
  9.   value lex_buffer;
  10.   value lex_abs_pos;
  11.   value lex_start_pos;
  12.   value lex_curr_pos;
  13.   value lex_last_pos;
  14.   value lex_last_action;
  15. };
  16.  
  17. value get_next_char(lexbuf)     /* ML */
  18.      struct lexer_buffer * lexbuf;
  19. {
  20.   mlsize_t buffer_len, curr_pos;
  21.   
  22.   buffer_len = string_length(lexbuf->lex_buffer);
  23.   curr_pos = Long_val(lexbuf->lex_curr_pos);
  24.   if (curr_pos >= buffer_len) {
  25.     Push_roots (r, 1);
  26.     r[0] = (value) lexbuf;
  27.     callback(lexbuf->refill_buff, (value) lexbuf);
  28.     lexbuf = (struct lexer_buffer *) r[0];
  29.     curr_pos = Long_val(lexbuf->lex_curr_pos);
  30.     Pop_roots ();
  31.   }
  32.   lexbuf->lex_curr_pos += 2;
  33.   return Val_int(Byte_u(lexbuf->lex_buffer, curr_pos));
  34. }
  35.  
  36.