diff options
Diffstat (limited to 'tools/lemon/lemonflex-tail.inc')
-rw-r--r-- | tools/lemon/lemonflex-tail.inc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tools/lemon/lemonflex-tail.inc b/tools/lemon/lemonflex-tail.inc new file mode 100644 index 0000000000..04eaf2ab2d --- /dev/null +++ b/tools/lemon/lemonflex-tail.inc @@ -0,0 +1,59 @@ +/* $Id: lemonflex-tail.inc,v 1.1 2001/02/01 20:21:25 gram Exp $ */ + +/* This file is #include'd at the bottom of a Lex/Flex scanner +for use with the Lemon parser. You must have #define'd: + +MODNAME module name for creating function names: + +Prototypes: + +void MODNAME_scanner_text(char *text); +void MODNAME_scanner_cleanup(void); +int MODNAME_wrap(void); +*/ + +#include <cppmagic.h> + +#define TEXT_FUNC CONCAT(MODNAME,_scanner_text) +#define FILE_FUNC CONCAT(MODNAME,_scanner_file) +#define CLEANUP_FUNC CONCAT(MODNAME,_scanner_cleanup) +#define WRAP_FUNC CONCAT(MODNAME,_wrap) + + +/* Resets scanner and assigns the char* argument + * as the text to scan + */ +void +TEXT_FUNC (const char *text) +{ + yy_scan_string(text); +} + +void +FILE_FUNC (FILE* fh) +{ + YY_BUFFER_STATE new_buffer; + + new_buffer = yy_create_buffer(fh, YY_BUF_SIZE); + yy_switch_to_buffer(new_buffer); +} + +void +CLEANUP_FUNC (void) +{ + BEGIN(INITIAL); + yy_delete_buffer(YY_CURRENT_BUFFER); +} + +/* Flex has an option '%option noyywrap' so that I don't have to + * provide this yywrap function, but in order to maintain portability, + * I'll just use this yywrap() function. + */ +int +WRAP_FUNC () +{ + return 1; /* stop at EOF, instead of looking for next file */ +} + + + |