xref: /aosp_15_r20/external/antlr/runtime/Cpp/include/antlr3interfaces.hpp (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot /** \file
2*16467b97STreehugger Robot  * Declarations for all the antlr3 C runtime interfaces/classes. This
3*16467b97STreehugger Robot  * allows the structures that define the interfaces to contain pointers to
4*16467b97STreehugger Robot  * each other without trying to sort out the cyclic interdependencies that
5*16467b97STreehugger Robot  * would otherwise result.
6*16467b97STreehugger Robot  */
7*16467b97STreehugger Robot #ifndef	_ANTLR3_INTERFACES_HPP
8*16467b97STreehugger Robot #define	_ANTLR3_INTERFACES_HPP
9*16467b97STreehugger Robot 
10*16467b97STreehugger Robot // [The "BSD licence"]
11*16467b97STreehugger Robot // Copyright (c) 2005-2009 Gokulakannan Somasundaram, ElectronDB
12*16467b97STreehugger Robot //
13*16467b97STreehugger Robot // All rights reserved.
14*16467b97STreehugger Robot //
15*16467b97STreehugger Robot // Redistribution and use in source and binary forms, with or without
16*16467b97STreehugger Robot // modification, are permitted provided that the following conditions
17*16467b97STreehugger Robot // are met:
18*16467b97STreehugger Robot // 1. Redistributions of source code must retain the above copyright
19*16467b97STreehugger Robot //    notice, this list of conditions and the following disclaimer.
20*16467b97STreehugger Robot // 2. Redistributions in binary form must reproduce the above copyright
21*16467b97STreehugger Robot //    notice, this list of conditions and the following disclaimer in the
22*16467b97STreehugger Robot //    documentation and/or other materials provided with the distribution.
23*16467b97STreehugger Robot // 3. The name of the author may not be used to endorse or promote products
24*16467b97STreehugger Robot //    derived from this software without specific prior written permission.
25*16467b97STreehugger Robot //
26*16467b97STreehugger Robot // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
27*16467b97STreehugger Robot // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
28*16467b97STreehugger Robot // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
29*16467b97STreehugger Robot // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
30*16467b97STreehugger Robot // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31*16467b97STreehugger Robot // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32*16467b97STreehugger Robot // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33*16467b97STreehugger Robot // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34*16467b97STreehugger Robot // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
35*16467b97STreehugger Robot // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36*16467b97STreehugger Robot 
37*16467b97STreehugger Robot ANTLR_BEGIN_NAMESPACE()
38*16467b97STreehugger Robot 
39*16467b97STreehugger Robot template<class ImplTraits, class SuperType>
40*16467b97STreehugger Robot class IntStream;
41*16467b97STreehugger Robot 
42*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_RECOGNIZER_SHARED_STATE
43*16467b97STreehugger Robot /// \ingroup ANTLR3_RECOGNIZER_SHARED_STATE
44*16467b97STreehugger Robot ///
45*16467b97STreehugger Robot template<class ImplTraits, class SuperType>
46*16467b97STreehugger Robot class RecognizerSharedState;
47*16467b97STreehugger Robot 
48*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_BITSET_LIST
49*16467b97STreehugger Robot /// \ingroup ANTLR3_BITSET_LIST
50*16467b97STreehugger Robot ///
51*16467b97STreehugger Robot template<class AllocatorType>
52*16467b97STreehugger Robot class BitsetList;
53*16467b97STreehugger Robot 
54*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_BITSET
55*16467b97STreehugger Robot /// \ingroup ANTLR3_BITSET
56*16467b97STreehugger Robot ///
57*16467b97STreehugger Robot template<class AllocatorType>
58*16467b97STreehugger Robot class Bitset;
59*16467b97STreehugger Robot 
60*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TOKEN
61*16467b97STreehugger Robot /// \ingroup ANTLR3_COMMON_TOKEN
62*16467b97STreehugger Robot ///
63*16467b97STreehugger Robot template<class ImplTraits>
64*16467b97STreehugger Robot class CommonToken;
65*16467b97STreehugger Robot 
66*16467b97STreehugger Robot template<class ImplTraits>
67*16467b97STreehugger Robot class CommonTokenFunctions;
68*16467b97STreehugger Robot 
69*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_EXCEPTION
70*16467b97STreehugger Robot /// \ingroup ANTLR3_EXCEPTION
71*16467b97STreehugger Robot ///
72*16467b97STreehugger Robot enum ExceptionType
73*16467b97STreehugger Robot {
74*16467b97STreehugger Robot 	/** Indicates that the recognizer received a token
75*16467b97STreehugger Robot 	 *  in the input that was not predicted.
76*16467b97STreehugger Robot 	 */
77*16467b97STreehugger Robot 	RECOGNITION_EXCEPTION = 0
78*16467b97STreehugger Robot 	/** Indicates that the recognizer was expecting one token and found a
79*16467b97STreehugger Robot 	 *  a different one.
80*16467b97STreehugger Robot 	 */
81*16467b97STreehugger Robot 	, MISMATCHED_TOKEN_EXCEPTION
82*16467b97STreehugger Robot 
83*16467b97STreehugger Robot 	/** Recognizer could not find a valid alternative from the input
84*16467b97STreehugger Robot 	 */
85*16467b97STreehugger Robot 	, NO_VIABLE_ALT_EXCEPTION
86*16467b97STreehugger Robot 
87*16467b97STreehugger Robot 	/* Character in a set was not found
88*16467b97STreehugger Robot 	 */
89*16467b97STreehugger Robot 	, MISMATCHED_SET_EXCEPTION
90*16467b97STreehugger Robot 
91*16467b97STreehugger Robot 	/* A rule predicting at least n elements found less than that,
92*16467b97STreehugger Robot 	 * such as: WS: " "+;
93*16467b97STreehugger Robot 	 */
94*16467b97STreehugger Robot 	, EARLY_EXIT_EXCEPTION
95*16467b97STreehugger Robot 
96*16467b97STreehugger Robot 	, FAILED_PREDICATE_EXCEPTION
97*16467b97STreehugger Robot 
98*16467b97STreehugger Robot 	, MISMATCHED_TREE_NODE_EXCEPTION
99*16467b97STreehugger Robot 
100*16467b97STreehugger Robot 	, REWRITE_EARLY_EXCEPTION
101*16467b97STreehugger Robot 
102*16467b97STreehugger Robot 	, UNWANTED_TOKEN_EXCEPTION
103*16467b97STreehugger Robot 
104*16467b97STreehugger Robot 	, MISSING_TOKEN_EXCEPTION
105*16467b97STreehugger Robot };
106*16467b97STreehugger Robot 
107*16467b97STreehugger Robot template<class ImplTraits, ExceptionType Ex, class StreamType>
108*16467b97STreehugger Robot class ANTLR_Exception;
109*16467b97STreehugger Robot 
110*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_TOPO
111*16467b97STreehugger Robot /// \ingroup ANTLR3_TOPO
112*16467b97STreehugger Robot ///
113*16467b97STreehugger Robot template<class AllocPolicyType>
114*16467b97STreehugger Robot class Topo;
115*16467b97STreehugger Robot 
116*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_INPUT_STREAM
117*16467b97STreehugger Robot /// \ingroup ANTLR3_INPUT_STREAM
118*16467b97STreehugger Robot ///
119*16467b97STreehugger Robot template<class ImplTraits>
120*16467b97STreehugger Robot class InputStream;
121*16467b97STreehugger Robot 
122*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_LEX_STATE
123*16467b97STreehugger Robot /// \ingroup ANTLR3_LEX_STATE
124*16467b97STreehugger Robot ///
125*16467b97STreehugger Robot template<class ImplTraits>
126*16467b97STreehugger Robot class LexState;
127*16467b97STreehugger Robot 
128*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_TOKEN_SOURCE
129*16467b97STreehugger Robot /// \ingroup ANTLR3_TOKEN_SOURCE
130*16467b97STreehugger Robot ///
131*16467b97STreehugger Robot template<class ImplTraits>
132*16467b97STreehugger Robot class TokenSource;
133*16467b97STreehugger Robot template<class ImplTraits, class SuperType>
134*16467b97STreehugger Robot class TokenSourceFunctions;
135*16467b97STreehugger Robot 
136*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_TOKEN_STREAM
137*16467b97STreehugger Robot /// \ingroup ANTLR3_TOKEN_STREAM
138*16467b97STreehugger Robot ///
139*16467b97STreehugger Robot template<class ImplTraits>
140*16467b97STreehugger Robot class TokenStream;
141*16467b97STreehugger Robot template<class ImplTraits>
142*16467b97STreehugger Robot class TokenStreamFunctions;
143*16467b97STreehugger Robot 
144*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TOKEN_STREAM
145*16467b97STreehugger Robot /// \ingroup ANTLR3_COMMON_TOKEN_STREAM
146*16467b97STreehugger Robot ///
147*16467b97STreehugger Robot template<class ImplTraits>
148*16467b97STreehugger Robot class CommonTokenStream;
149*16467b97STreehugger Robot template<class ImplTraits>
150*16467b97STreehugger Robot class CommonTokenStreamFunctions;
151*16467b97STreehugger Robot 
152*16467b97STreehugger Robot 
153*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_CYCLIC_DFA
154*16467b97STreehugger Robot /// \ingroup ANTLR3_CYCLIC_DFA
155*16467b97STreehugger Robot ///
156*16467b97STreehugger Robot template<class ImplTraits, class ComponentType>
157*16467b97STreehugger Robot class CyclicDFA;
158*16467b97STreehugger Robot 
159*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_LEXER
160*16467b97STreehugger Robot /// \ingroup ANTLR3_LEXER
161*16467b97STreehugger Robot ///
162*16467b97STreehugger Robot template<class ImplTraits>
163*16467b97STreehugger Robot class Lexer;
164*16467b97STreehugger Robot 
165*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_PARSER
166*16467b97STreehugger Robot /// \ingroup ANTLR3_PARSER
167*16467b97STreehugger Robot ///
168*16467b97STreehugger Robot template<class ImplTraits>
169*16467b97STreehugger Robot class Parser;
170*16467b97STreehugger Robot 
171*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_BASE_TREE
172*16467b97STreehugger Robot /// \ingroup ANTLR3_BASE_TREE
173*16467b97STreehugger Robot ///
174*16467b97STreehugger Robot template<class ImplTraits>
175*16467b97STreehugger Robot class BaseTree;
176*16467b97STreehugger Robot template<class ImplTraits>
177*16467b97STreehugger Robot class BaseTreeFunctions;
178*16467b97STreehugger Robot 
179*16467b97STreehugger Robot 
180*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TREE
181*16467b97STreehugger Robot /// \ingroup ANTLR3_COMMON_TREE
182*16467b97STreehugger Robot ///
183*16467b97STreehugger Robot template<class ImplTraits>
184*16467b97STreehugger Robot class CommonTree;
185*16467b97STreehugger Robot template<class ImplTraits>
186*16467b97STreehugger Robot class CommonTreeFunctions;
187*16467b97STreehugger Robot 
188*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_PARSE_TREE
189*16467b97STreehugger Robot /// \ingroup ANTLR3_PARSE_TREE
190*16467b97STreehugger Robot ///
191*16467b97STreehugger Robot template<class ImplTraits>
192*16467b97STreehugger Robot class ParseTree;
193*16467b97STreehugger Robot 
194*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_TREE_NODE_STREAM
195*16467b97STreehugger Robot /// \ingroup ANTLR3_TREE_NODE_STREAM
196*16467b97STreehugger Robot ///
197*16467b97STreehugger Robot template<class ImplTraits>
198*16467b97STreehugger Robot class TreeNodeStream;
199*16467b97STreehugger Robot 
200*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TREE_NODE_STREAM
201*16467b97STreehugger Robot /// \ingroup ANTLR3_COMMON_TREE_NODE_STREAM
202*16467b97STreehugger Robot ///
203*16467b97STreehugger Robot template<class ImplTraits>
204*16467b97STreehugger Robot class CommonTreeNodeStream;
205*16467b97STreehugger Robot 
206*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_TREE_WALK_STATE
207*16467b97STreehugger Robot /// \ingroup ANTLR3_TREE_WALK_STATE
208*16467b97STreehugger Robot ///
209*16467b97STreehugger Robot template<class ImplTraits>
210*16467b97STreehugger Robot class TreeWalkState;
211*16467b97STreehugger Robot 
212*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_BASE_TREE_ADAPTOR
213*16467b97STreehugger Robot /// \ingroup ANTLR3_BASE_TREE_ADAPTOR
214*16467b97STreehugger Robot ///
215*16467b97STreehugger Robot template<class ImplTraits>
216*16467b97STreehugger Robot class BaseTreeAdaptor;
217*16467b97STreehugger Robot template<class ImplTraits>
218*16467b97STreehugger Robot class BaseTreeAdaptorFunctions;
219*16467b97STreehugger Robot 
220*16467b97STreehugger Robot 
221*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TREE_ADAPTOR
222*16467b97STreehugger Robot /// \ingroup ANTLR3_COMMON_TREE_ADAPTOR
223*16467b97STreehugger Robot ///
224*16467b97STreehugger Robot template<class ImplTraits>
225*16467b97STreehugger Robot class CommonTreeAdaptor;
226*16467b97STreehugger Robot template<class ImplTraits>
227*16467b97STreehugger Robot class CommonTreeAdaptorFunctions;
228*16467b97STreehugger Robot 
229*16467b97STreehugger Robot 
230*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_TREE_PARSER
231*16467b97STreehugger Robot /// \ingroup ANTLR3_TREE_PARSER
232*16467b97STreehugger Robot ///
233*16467b97STreehugger Robot template<class ImplTraits>
234*16467b97STreehugger Robot class TreeParser;
235*16467b97STreehugger Robot 
236*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_INT_TRIE
237*16467b97STreehugger Robot /// \ingroup ANTLR3_INT_TRIE
238*16467b97STreehugger Robot ///
239*16467b97STreehugger Robot template< class DataType, class AllocPolicyType >
240*16467b97STreehugger Robot class IntTrie;
241*16467b97STreehugger Robot 
242*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_REWRITE_RULE_ELEMENT_STREAM
243*16467b97STreehugger Robot /// \ingroup ANTLR3_REWRITE_RULE_ELEMENT_STREAM
244*16467b97STreehugger Robot ///
245*16467b97STreehugger Robot template<class ImplTraits, class SuperType>
246*16467b97STreehugger Robot class RewriteRuleElementStream;
247*16467b97STreehugger Robot 
248*16467b97STreehugger Robot template<class ImplTraits>
249*16467b97STreehugger Robot class RewriteRuleTokenStream;
250*16467b97STreehugger Robot 
251*16467b97STreehugger Robot template<class ImplTraits>
252*16467b97STreehugger Robot class RewriteRuleSubtreeStream;
253*16467b97STreehugger Robot 
254*16467b97STreehugger Robot template<class ImplTraits>
255*16467b97STreehugger Robot class RewriteRuleNodeStream;
256*16467b97STreehugger Robot 
257*16467b97STreehugger Robot /// Pointer to an instantiation of 'class' #ANTLR3_DEBUG_EVENT_LISTENER
258*16467b97STreehugger Robot /// \ingroup ANTLR3_DEBUG_EVENT_LISTENER
259*16467b97STreehugger Robot ///
260*16467b97STreehugger Robot template<class ImplTraits>
261*16467b97STreehugger Robot class  DebugEventListener;
262*16467b97STreehugger Robot 
263*16467b97STreehugger Robot //A Class just used for forwarding other classes for simplifying class forwarding
264*16467b97STreehugger Robot //Logic: constructor is made simple
265*16467b97STreehugger Robot template<class A>
266*16467b97STreehugger Robot class ClassForwarder {};
267*16467b97STreehugger Robot 
268*16467b97STreehugger Robot template<bool b>
269*16467b97STreehugger Robot class BoolForwarder {};
270*16467b97STreehugger Robot class Empty {};
271*16467b97STreehugger Robot 
272*16467b97STreehugger Robot template<class ImplTraits, class StreamType>
273*16467b97STreehugger Robot class ComponentTypeFinder
274*16467b97STreehugger Robot {
275*16467b97STreehugger Robot };
276*16467b97STreehugger Robot 
277*16467b97STreehugger Robot template<class ImplTraits>
278*16467b97STreehugger Robot class ComponentTypeFinder< ImplTraits, typename ImplTraits::InputStreamType>
279*16467b97STreehugger Robot {
280*16467b97STreehugger Robot public:
281*16467b97STreehugger Robot 	typedef typename ImplTraits::LexerType ComponentType;
282*16467b97STreehugger Robot };
283*16467b97STreehugger Robot 
284*16467b97STreehugger Robot template<class ImplTraits>
285*16467b97STreehugger Robot class ComponentTypeFinder< ImplTraits, typename ImplTraits::TokenStreamType>
286*16467b97STreehugger Robot {
287*16467b97STreehugger Robot public:
288*16467b97STreehugger Robot 	typedef typename ImplTraits::ParserType ComponentType;
289*16467b97STreehugger Robot };
290*16467b97STreehugger Robot 
291*16467b97STreehugger Robot template<class ImplTraits>
292*16467b97STreehugger Robot class ComponentTypeFinder< ImplTraits, typename ImplTraits::TreeNodeStreamType>
293*16467b97STreehugger Robot {
294*16467b97STreehugger Robot public:
295*16467b97STreehugger Robot 	typedef typename ImplTraits::TreeParserType ComponentType;
296*16467b97STreehugger Robot };
297*16467b97STreehugger Robot 
298*16467b97STreehugger Robot 
299*16467b97STreehugger Robot ANTLR_END_NAMESPACE()
300*16467b97STreehugger Robot 
301*16467b97STreehugger Robot #endif
302