]> git.saurik.com Git - bison.git/blame - src/flex-scanner.h
grammar: split %union to group together related aspects
[bison.git] / src / flex-scanner.h
CommitLineData
f9bfc42a 1/* Common parts between scan-code.l, scan-gram.l, and scan-skel.l.
9f936c5e 2
7d6bad19 3 Copyright (C) 2006, 2009-2013 Free Software Foundation, Inc.
9f936c5e
AD
4
5 This file is part of Bison, the GNU Compiler Compiler.
6
f16b0819 7 This program is free software: you can redistribute it and/or modify
9f936c5e 8 it under the terms of the GNU General Public License as published by
f16b0819 9 the Free Software Foundation, either version 3 of the License, or
9f936c5e
AD
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
f16b0819 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
9f936c5e
AD
19
20#ifndef FLEX_PREFIX
21# error "FLEX_PREFIX not defined"
22#endif
23
c49e2f15 24/* Flex full version as a number. */
9318e335 25#define FLEX_VERSION \
c49e2f15
TR
26 ((YY_FLEX_MAJOR_VERSION) * 1000000 \
27 + (YY_FLEX_MINOR_VERSION) * 1000 \
28 + (YY_FLEX_SUBMINOR_VERSION))
c49e2f15 29
9f936c5e 30/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used. */
a99ec53e 31#if FLEX_VERSION <= 2005031
9f936c5e
AD
32int FLEX_PREFIX (get_lineno) (void);
33FILE *FLEX_PREFIX (get_in) (void);
34FILE *FLEX_PREFIX (get_out) (void);
35int FLEX_PREFIX (get_leng) (void);
36char *FLEX_PREFIX (get_text) (void);
37void FLEX_PREFIX (set_lineno) (int);
38void FLEX_PREFIX (set_in) (FILE *);
39void FLEX_PREFIX (set_out) (FILE *);
40int FLEX_PREFIX (get_debug) (void);
41void FLEX_PREFIX (set_debug) (int);
42int FLEX_PREFIX (lex_destroy) (void);
86b08b49 43#endif
9f936c5e
AD
44
45#define last_string FLEX_PREFIX (last_string)
46
47/* It seems to be a nice "feature" of Flex that one cannot use yytext,
48 yyleng etc. when a prefix is given, since there is no longer a
49 #define, but rather the token is actually changed in the output.
9e668899
JD
50 However, this is not true for Flex 2.5.4. */
51#ifndef yyleng
52# define yyleng FLEX_PREFIX (leng)
53#endif
54#ifndef yytext
3c40d0b5 55# define yytext FLEX_PREFIX (text)
9e668899 56#endif
9f936c5e 57
580b8926
JD
58/* Non-reentrant scanners generated by Flex 2.5.9 and later (and some earlier
59 versions according to the Flex manual) leak memory if yylex_destroy is not
60 invoked. However, yylex_destroy is not defined before Flex 2.5.9, so give
61 an implementation here that at least appears to work with Flex 2.5.4. */
b56484a5 62#if FLEX_VERSION <= 2005009
580b8926
JD
63# define yylex_destroy() yy_delete_buffer (YY_CURRENT_BUFFER)
64#endif
65
9f936c5e
AD
66/* OBSTACK_FOR_STRING -- Used to store all the characters that we need to
67 keep (to construct ID, STRINGS etc.). Use the following macros to
68 use it.
69
70 Use STRING_GROW to append what has just been matched, and
71 STRING_FINISH to end the string (it puts the ending 0).
72 STRING_FINISH also stores this string in LAST_STRING, which can be
73 used, and which is used by STRING_FREE to free the last string. */
74
f9bfc42a
JD
75#ifndef FLEX_NO_OBSTACK
76
9f936c5e
AD
77static struct obstack obstack_for_string;
78
c547693a 79# define STRING_GROW \
9f936c5e
AD
80 obstack_grow (&obstack_for_string, yytext, yyleng)
81
c547693a 82# define STRING_FINISH \
6fbe73b6 83 (last_string = obstack_finish0 (&obstack_for_string))
9f936c5e 84
c547693a 85# define STRING_FREE \
f2e690d8 86 obstack_free (&obstack_for_string, last_string)
f9bfc42a
JD
87
88#endif