1#ifndef _scanner_h 2#define _scanner_h 3 4#include <stdio.h> 5#include "tools/re2c/token.h" 6 7typedef struct Scanner { 8 FILE *in; 9 unsigned char *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; 10 unsigned int tchar, tline, cline; 11} Scanner; 12 13void Scanner_init(Scanner*, FILE *); 14static Scanner *Scanner_new(FILE *); 15 16int Scanner_echo(Scanner*, FILE *); 17int Scanner_scan(Scanner*); 18void Scanner_fatal(Scanner*, const char*); 19static SubStr Scanner_token(Scanner*); 20static unsigned int Scanner_line(Scanner*); 21 22static SubStr 23Scanner_token(Scanner *s) 24{ 25 SubStr r; 26 SubStr_init_u(&r, s->tok, s->cur - s->tok); 27 return r; 28} 29 30static unsigned int 31Scanner_line(Scanner *s) 32{ 33 return s->cline; 34} 35 36static Scanner * 37Scanner_new(FILE *i) 38{ 39 Scanner *r = malloc(sizeof(Scanner)); 40 Scanner_init(r, i); 41 return r; 42} 43 44#endif 45