diff options
Diffstat (limited to 'tools/lemon/lemonflex-head.inc')
-rw-r--r-- | tools/lemon/lemonflex-head.inc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tools/lemon/lemonflex-head.inc b/tools/lemon/lemonflex-head.inc new file mode 100644 index 0000000000..0387b03b4c --- /dev/null +++ b/tools/lemon/lemonflex-head.inc @@ -0,0 +1,34 @@ +/* $Id: lemonflex-head.inc,v 1.1 2001/02/01 20:21:25 gram Exp $ */ + +/* This file is #include'd at the top of a Lex/Flex scanner +for use with the Lemon parser. You must have #define'd: + +LVAL name of lval variable +LVAL_TYPE type of lval variable +LVAL_INIT_VAL Initial value of lval variable + +*/ + +/* Flex has a few routines which help us get the scanner to read + * from a string rather than from a file. POSIX lex only provides + * for reading from a file; any method of reading from a string + * is inherently non-portable. Besides reading from a string, + * we have to worry about resetting the scanner after a bad + * parse; this too is non-portable. Combine the reset with + * a string input, and you have major non-portability. I'll provide + * the routines for flex here. If you really want to modify the + * scanner and use a non-flex lex implementation, you may + * add more ifdef's below. + */ + + +/* If we don't need yyunput, use this macro to get it out of the + * generated C file, avoiding a compiler warning about its lack of use */ +#define YY_NO_UNPUT 1 + + +/* Yup, I'm using a non-standard type for lval, unlike usual lex/yacc implementations. + * I can do so because I'm *not* using yacc, I'm using Lemon, where I have + * more control of the interaction between scanner and parser. */ +LVAL_TYPE LVAL = LVAL_INIT_VAL; + |