Aprepro 5.0x
Loading...
Searching...
No Matches
FlexLexer.h
Go to the documentation of this file.
1// -*-C++-*-
2// FlexLexer.h -- define interfaces for lexical analyzer classes generated
3// by flex
4
5// Copyright (c) 1993, 2023 The Regents of the University of California.
6// All rights reserved.
7//
8// This code is derived from software contributed to Berkeley by
9// Kent Williams and Tom Epperly.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions
13// are met:
14
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20
21// Neither the name of the University nor the names of its contributors
22// may be used to endorse or promote products derived from this software
23// without specific prior written permission.
24
25// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
26// IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
27// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE.
29
30// This file defines FlexLexer, an abstract class which specifies the
31// external interface provided to flex C++ lexer objects, and yyFlexLexer,
32// which defines a particular lexer class.
33//
34// If you want to create multiple lexer classes, you use the -P flag
35// to rename each yyFlexLexer to some other xxFlexLexer. You then
36// include <FlexLexer.h> in your other sources once per lexer class:
37//
38// #undef yyFlexLexer
39// #define yyFlexLexer xxFlexLexer
40// #include <FlexLexer.h>
41//
42// #undef yyFlexLexer
43// #define yyFlexLexer zzFlexLexer
44// #include <FlexLexer.h>
45// ...
46
47#ifndef __FLEX_LEXER_H
48// Never included before - need to define base class.
49#define __FLEX_LEXER_H
50
51#include "aprepro_parser.h"
52
53extern "C++" {
54// NOLINTBEGIN
55struct yy_buffer_state;
56typedef int yy_state_type;
57
59{
60public:
61 FlexLexer() : yytext(nullptr), yyleng(0), yylineno(0), yy_flex_debug(0) {}
62 virtual ~FlexLexer() {}
63
64 const char *YYText() const { return yytext; }
65 int YYLeng() const { return yyleng; }
66
67 virtual void yy_switch_to_buffer(struct yy_buffer_state *new_buffer) = 0;
68 virtual struct yy_buffer_state *yy_create_buffer(std::istream *s, int size) = 0;
69 virtual void yy_delete_buffer(struct yy_buffer_state *b) = 0;
70 virtual void yyrestart(std::istream *s) = 0;
71
72 virtual int yylex() = 0;
73
74 // Call yylex with new input/output sources.
75 int yylex(std::istream *new_in, std::ostream *new_out = nullptr)
76 {
77 switch_streams(new_in, new_out);
78 return yylex();
79 }
80
81 // Switch to new input/output streams. A nil stream pointer
82 // indicates "keep the current one".
83 virtual void switch_streams(std::istream *new_in = nullptr, std::ostream *new_out = nullptr) = 0;
84
85 int lineno() const { return yylineno; }
86
87 int debug() const { return yy_flex_debug; }
88 void set_debug(int flag) { yy_flex_debug = flag; }
89
90protected:
91 char *yytext;
92 int yyleng;
93 int yylineno; // only maintained if you use %option yylineno
94 int yy_flex_debug; // only has effect with -d or "%option debug"
95};
96}
97#endif // FLEXLEXER_H
98
99#if defined(yyFlexLexer) || !defined(yyFlexLexerOnce)
100// Either this is the first time through (yyFlexLexerOnce not defined),
101// or this is a repeated include to define a different flavor of
102// yyFlexLexer, as discussed in the flex manual.
103#define yyFlexLexerOnce
104
105extern "C++" {
106
107class yyFlexLexer : public FlexLexer
108{
109public:
110 // arg_yyin and arg_yyout default to the cin and cout, but we
111 // only make that assignment when initializing in yylex().
112 explicit yyFlexLexer(std::istream *arg_yyin = nullptr, std::ostream *arg_yyout = nullptr);
113
114 ~yyFlexLexer() override;
115
116 void yy_switch_to_buffer(struct yy_buffer_state *new_buffer) override;
117 struct yy_buffer_state *yy_create_buffer(std::istream *file, int size) override;
118 void yy_delete_buffer(struct yy_buffer_state *b) override;
119 void yyrestart(std::istream *input_file) override;
120
121 void yypush_buffer_state(struct yy_buffer_state *new_buffer);
123
124 int yylex() override;
125 void switch_streams(std::istream *new_in, std::ostream *new_out = nullptr) override;
126 virtual int yywrap();
127
128protected:
129 virtual int LexerInput(char *buf, int max_size);
130 virtual void LexerOutput(const char *buf, int size);
131 virtual void LexerError(const char *msg);
132
133 void yyunput(int c, char *yy_bp);
134 int yyinput();
135
137 void yy_init_buffer(struct yy_buffer_state *b, std::istream *file);
139
143
144 void yy_push_state(int new_state);
147
151
152 std::istream *yyin; // input source for default LexerInput
153 std::ostream *yyout; // output sink for default LexerOutput
154
155 // yy_hold_char holds the character lost when yytext is formed.
157
158 // Number of characters read into yy_ch_buf.
160
161 // Points to current character in buffer.
163
164 int yy_init; // whether we need to initialize
165 int yy_start; // start state number
166
167 // Flag which is used to allow yywrap()'s to do buffer switches
168 // instead of setting up a fresh yyin. A bit of a hack ...
170
171 size_t yy_buffer_stack_top; /**< index of top of stack. */
172 size_t yy_buffer_stack_max; /**< capacity of stack. */
173 struct yy_buffer_state **yy_buffer_stack; /**< Stack as an array. */
175
176 // The following are not always needed, but may be depending
177 // on use of certain flex features (like REJECT or yymore()).
178
181
184
188
189 int yy_lp;
191
196};
197// NOLINTEND
198}
199
200#endif // yyFlexLexer || ! yyFlexLexerOnce
int yy_state_type
Definition FlexLexer.h:56
char * yy_bp
Definition apr_scanner.cc:1213
#define yyFlexLexer
Definition apr_scanner.cc:31
Definition FlexLexer.h:59
virtual int yylex()=0
void set_debug(int flag)
Definition FlexLexer.h:88
char * yytext
Definition FlexLexer.h:91
virtual void yy_switch_to_buffer(struct yy_buffer_state *new_buffer)=0
virtual void yyrestart(std::istream *s)=0
int yylineno
Definition FlexLexer.h:93
virtual ~FlexLexer()
Definition FlexLexer.h:62
virtual struct yy_buffer_state * yy_create_buffer(std::istream *s, int size)=0
FlexLexer()
Definition FlexLexer.h:61
const char * YYText() const
Definition FlexLexer.h:64
virtual void yy_delete_buffer(struct yy_buffer_state *b)=0
int debug() const
Definition FlexLexer.h:87
int yyleng
Definition FlexLexer.h:92
int lineno() const
Definition FlexLexer.h:85
virtual void switch_streams(std::istream *new_in=nullptr, std::ostream *new_out=nullptr)=0
int YYLeng() const
Definition FlexLexer.h:65
int yylex(std::istream *new_in, std::ostream *new_out=nullptr)
Definition FlexLexer.h:75
int yy_flex_debug
Definition FlexLexer.h:94
int * yy_start_stack
Definition FlexLexer.h:142
int yy_more_offset
Definition FlexLexer.h:194
struct yy_buffer_state ** yy_buffer_stack
Definition FlexLexer.h:173
void yyrestart(std::istream *input_file) override
size_t yy_buffer_stack_top
Definition FlexLexer.h:171
std::ostream * yyout
Definition FlexLexer.h:153
void yyensure_buffer_stack(void)
int yy_n_chars
Definition FlexLexer.h:159
virtual void LexerError(const char *msg)
void yy_pop_state()
int yy_start_stack_depth
Definition FlexLexer.h:141
int yylex() override
int * yy_full_state
Definition FlexLexer.h:186
char * yy_full_match
Definition FlexLexer.h:185
size_t yy_buffer_stack_max
Definition FlexLexer.h:172
char * yy_c_buf_p
Definition FlexLexer.h:162
void yy_push_state(int new_state)
int yy_did_buffer_switch_on_eof
Definition FlexLexer.h:169
void switch_streams(std::istream *new_in, std::ostream *new_out=nullptr) override
yy_state_type * yy_state_ptr
Definition FlexLexer.h:183
int yy_init
Definition FlexLexer.h:164
virtual void LexerOutput(const char *buf, int size)
int yy_start_stack_ptr
Definition FlexLexer.h:140
char * yy_last_accepting_cpos
Definition FlexLexer.h:180
yy_state_type yy_get_previous_state()
yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state)
std::istream * yyin
Definition FlexLexer.h:152
int yy_get_next_buffer()
void yy_switch_to_buffer(struct yy_buffer_state *new_buffer) override
int yy_more_len
Definition FlexLexer.h:193
int yy_prev_more_offset
Definition FlexLexer.h:195
void yy_delete_buffer(struct yy_buffer_state *b) override
yy_state_type * yy_state_buf
Definition FlexLexer.h:182
char yy_hold_char
Definition FlexLexer.h:156
virtual int yywrap()
void yypop_buffer_state()
void yy_load_buffer_state()
virtual int LexerInput(char *buf, int max_size)
int yy_more_flag
Definition FlexLexer.h:192
int yy_full_lp
Definition FlexLexer.h:187
void yy_flush_buffer(struct yy_buffer_state *b)
void yyunput(int c, char *yy_bp)
int yy_start
Definition FlexLexer.h:165
yy_state_type yy_last_accepting_state
Definition FlexLexer.h:179
int yy_looking_for_trail_begin
Definition FlexLexer.h:190
void yy_init_buffer(struct yy_buffer_state *b, std::istream *file)
int yy_lp
Definition FlexLexer.h:189
struct yy_buffer_state * yy_create_buffer(std::istream *file, int size) override
void yypush_buffer_state(struct yy_buffer_state *new_buffer)
Definition apr_scanner.cc:243