xref: /aosp_15_r20/external/antlr/runtime/Cpp/include/antlr3defs.hpp (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot /** \file
2*16467b97STreehugger Robot  * Basic type and constant definitions for ANTLR3 Runtime.
3*16467b97STreehugger Robot  */
4*16467b97STreehugger Robot #ifndef	_ANTLR3DEFS_HPP
5*16467b97STreehugger Robot #define	_ANTLR3DEFS_HPP
6*16467b97STreehugger Robot 
7*16467b97STreehugger Robot // [The "BSD licence"]
8*16467b97STreehugger Robot // Copyright (c) 2005-2009 Gokulakannan Somasundaram, ElectronDB
9*16467b97STreehugger Robot 
10*16467b97STreehugger Robot //
11*16467b97STreehugger Robot // All rights reserved.
12*16467b97STreehugger Robot //
13*16467b97STreehugger Robot // Redistribution and use in source and binary forms, with or without
14*16467b97STreehugger Robot // modification, are permitted provided that the following conditions
15*16467b97STreehugger Robot // are met:
16*16467b97STreehugger Robot // 1. Redistributions of source code must retain the above copyright
17*16467b97STreehugger Robot //    notice, this list of conditions and the following disclaimer.
18*16467b97STreehugger Robot // 2. Redistributions in binary form must reproduce the above copyright
19*16467b97STreehugger Robot //    notice, this list of conditions and the following disclaimer in the
20*16467b97STreehugger Robot //    documentation and/or other materials provided with the distribution.
21*16467b97STreehugger Robot // 3. The name of the author may not be used to endorse or promote products
22*16467b97STreehugger Robot //    derived from this software without specific prior written permission.
23*16467b97STreehugger Robot //
24*16467b97STreehugger Robot // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25*16467b97STreehugger Robot // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26*16467b97STreehugger Robot // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27*16467b97STreehugger Robot // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
28*16467b97STreehugger Robot // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
29*16467b97STreehugger Robot // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30*16467b97STreehugger Robot // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31*16467b97STreehugger Robot // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32*16467b97STreehugger Robot // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33*16467b97STreehugger Robot // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*16467b97STreehugger Robot 
35*16467b97STreehugger Robot /* Following are for generated code, they are not referenced internally!!!
36*16467b97STreehugger Robot  */
37*16467b97STreehugger Robot #if !defined(ANTLR_HUGE) && !defined(ANTLR_AVERAGE) && !defined(ANTLR_SMALL)
38*16467b97STreehugger Robot #define	ANTLR_AVERAGE
39*16467b97STreehugger Robot #endif
40*16467b97STreehugger Robot 
41*16467b97STreehugger Robot #ifdef	ANTLR_HUGE
42*16467b97STreehugger Robot #ifndef	ANTLR_SIZE_HINT
43*16467b97STreehugger Robot #define	ANTLR_SIZE_HINT        2049
44*16467b97STreehugger Robot #endif
45*16467b97STreehugger Robot #ifndef	ANTLR_LIST_SIZE_HINT
46*16467b97STreehugger Robot #define	ANTLR_LIST_SIZE_HINT   127
47*16467b97STreehugger Robot #endif
48*16467b97STreehugger Robot #endif
49*16467b97STreehugger Robot 
50*16467b97STreehugger Robot #ifdef	ANTLR_AVERAGE
51*16467b97STreehugger Robot #ifndef	ANTLR_SIZE_HINT
52*16467b97STreehugger Robot #define	ANTLR_SIZE_HINT        1025
53*16467b97STreehugger Robot #define	ANTLR_LIST_SIZE_HINT   63
54*16467b97STreehugger Robot #endif
55*16467b97STreehugger Robot #endif
56*16467b97STreehugger Robot 
57*16467b97STreehugger Robot #ifdef	ANTLR_SMALL
58*16467b97STreehugger Robot #ifndef	ANTLR_SIZE_HINT
59*16467b97STreehugger Robot #define	ANTLR_SIZE_HINT        211
60*16467b97STreehugger Robot #define	ANTLR_LIST_SIZE_HINT   31
61*16467b97STreehugger Robot #endif
62*16467b97STreehugger Robot #endif
63*16467b97STreehugger Robot 
64*16467b97STreehugger Robot // Definitions that indicate the encoding scheme character streams and strings etc
65*16467b97STreehugger Robot //
66*16467b97STreehugger Robot /// Indicates Big Endian for encodings where this makes sense
67*16467b97STreehugger Robot ///
68*16467b97STreehugger Robot #define ANTLR_BE           1
69*16467b97STreehugger Robot 
70*16467b97STreehugger Robot /// Indicates Little Endian for encoidngs where this makes sense
71*16467b97STreehugger Robot ///
72*16467b97STreehugger Robot #define ANTLR_LE           2
73*16467b97STreehugger Robot 
74*16467b97STreehugger Robot /// General latin-1 or other 8 bit encoding scheme such as straight ASCII
75*16467b97STreehugger Robot ///
76*16467b97STreehugger Robot #define ANTLR_ENC_8BIT     4
77*16467b97STreehugger Robot 
78*16467b97STreehugger Robot /// UTF-8 encoding scheme
79*16467b97STreehugger Robot ///
80*16467b97STreehugger Robot #define ANTLR_ENC_UTF8     8
81*16467b97STreehugger Robot 
82*16467b97STreehugger Robot /// UTF-16 encoding scheme (which also covers UCS2 as that does not have surrogates)
83*16467b97STreehugger Robot ///
84*16467b97STreehugger Robot #define ANTLR_ENC_UTF16        16
85*16467b97STreehugger Robot #define ANTLR_ENC_UTF16BE      16 + ANTLR_BE
86*16467b97STreehugger Robot #define ANTLR_ENC_UTF16LE      16 + ANTLR_LE
87*16467b97STreehugger Robot 
88*16467b97STreehugger Robot /// UTF-32 encoding scheme (basically straight 32 bit)
89*16467b97STreehugger Robot ///
90*16467b97STreehugger Robot #define ANTLR_ENC_UTF32        32
91*16467b97STreehugger Robot #define ANTLR_ENC_UTF32BE      32 + ANTLR_BE
92*16467b97STreehugger Robot #define ANTLR_ENC_UTF32LE      32 + ANTLR_LE
93*16467b97STreehugger Robot 
94*16467b97STreehugger Robot /// Input is 8 bit EBCDIC (which we convert to 8 bit ASCII on the fly
95*16467b97STreehugger Robot ///
96*16467b97STreehugger Robot #define ANTLR_ENC_EBCDIC       64
97*16467b97STreehugger Robot 
98*16467b97STreehugger Robot #define ANTLR_BEGIN_NAMESPACE() namespace antlr3 {
99*16467b97STreehugger Robot #define ANTLR_END_NAMESPACE() }
100*16467b97STreehugger Robot 
101*16467b97STreehugger Robot #define ANTLR_USE_64BIT
102*16467b97STreehugger Robot 
103*16467b97STreehugger Robot /* Common definitions come first
104*16467b97STreehugger Robot  */
105*16467b97STreehugger Robot #include    <antlr3errors.hpp>
106*16467b97STreehugger Robot 
107*16467b97STreehugger Robot /* Work out what operating system/compiler this is. We just do this once
108*16467b97STreehugger Robot  * here and use an internal symbol after this.
109*16467b97STreehugger Robot  */
110*16467b97STreehugger Robot #ifdef	_WIN64
111*16467b97STreehugger Robot 
112*16467b97STreehugger Robot # ifndef	ANTLR_WINDOWS
113*16467b97STreehugger Robot #   define	ANTLR_WINDOWS
114*16467b97STreehugger Robot # endif
115*16467b97STreehugger Robot # define	ANTLR_WIN64
116*16467b97STreehugger Robot # define	ANTLR_USE_64BIT
117*16467b97STreehugger Robot 
118*16467b97STreehugger Robot #else
119*16467b97STreehugger Robot 
120*16467b97STreehugger Robot #ifdef	_WIN32
121*16467b97STreehugger Robot # ifndef	ANTLR_WINDOWS
122*16467b97STreehugger Robot #  define	ANTLR_WINDOWS
123*16467b97STreehugger Robot # endif
124*16467b97STreehugger Robot 
125*16467b97STreehugger Robot #define	ANTLR_WIN32
126*16467b97STreehugger Robot #endif
127*16467b97STreehugger Robot 
128*16467b97STreehugger Robot #endif
129*16467b97STreehugger Robot 
130*16467b97STreehugger Robot #ifdef	ANTLR_WINDOWS
131*16467b97STreehugger Robot 
132*16467b97STreehugger Robot #ifndef WIN32_LEAN_AND_MEAN
133*16467b97STreehugger Robot #define	WIN32_LEAN_AND_MEAN
134*16467b97STreehugger Robot #endif
135*16467b97STreehugger Robot 
136*16467b97STreehugger Robot /* Allow VC 8 (vs2005) and above to use 'secure' versions of various functions such as sprintf
137*16467b97STreehugger Robot  */
138*16467b97STreehugger Robot #ifndef	_CRT_SECURE_NO_DEPRECATE
139*16467b97STreehugger Robot #define	_CRT_SECURE_NO_DEPRECATE
140*16467b97STreehugger Robot #endif
141*16467b97STreehugger Robot 
142*16467b97STreehugger Robot #include    <stdlib.h>
143*16467b97STreehugger Robot #include    <winsock2.h>
144*16467b97STreehugger Robot #include    <sys/types.h>
145*16467b97STreehugger Robot #include    <sys/stat.h>
146*16467b97STreehugger Robot #include    <stdarg.h>
147*16467b97STreehugger Robot 
148*16467b97STreehugger Robot #define	ANTLR_API      __declspec(dllexport)
149*16467b97STreehugger Robot #define	ANTLR_CDECL    __cdecl
150*16467b97STreehugger Robot #define ANTLR_FASTCALL __fastcall
151*16467b97STreehugger Robot 
152*16467b97STreehugger Robot 
153*16467b97STreehugger Robot #ifndef __MINGW32__
154*16467b97STreehugger Robot // Standard Windows types
155*16467b97STreehugger Robot //
156*16467b97STreehugger Robot typedef	INT32	ANTLR_CHAR;
157*16467b97STreehugger Robot typedef	UINT32	ANTLR_UCHAR;
158*16467b97STreehugger Robot 
159*16467b97STreehugger Robot typedef	INT8	ANTLR_INT8;
160*16467b97STreehugger Robot typedef	INT16	ANTLR_INT16;
161*16467b97STreehugger Robot typedef	INT32	ANTLR_INT32;
162*16467b97STreehugger Robot typedef	INT64	ANTLR_INT64;
163*16467b97STreehugger Robot typedef	UINT8	ANTLR_UINT8;
164*16467b97STreehugger Robot typedef	UINT16	ANTLR_UINT16;
165*16467b97STreehugger Robot typedef	UINT32	ANTLR_UINT32;
166*16467b97STreehugger Robot typedef	UINT64	ANTLR_UINT64;
167*16467b97STreehugger Robot typedef UINT64  ANTLR_BITWORD;
168*16467b97STreehugger Robot 
169*16467b97STreehugger Robot #else
170*16467b97STreehugger Robot // Mingw uses stdint.h and fails to define standard Microsoft typedefs
171*16467b97STreehugger Robot // such as UINT16, hence we must use stdint.h for Mingw.
172*16467b97STreehugger Robot //
173*16467b97STreehugger Robot #include <stdint.h>
174*16467b97STreehugger Robot typedef int32_t     ANTLR_CHAR;
175*16467b97STreehugger Robot typedef uint32_t    ANTLR_UCHAR;
176*16467b97STreehugger Robot 
177*16467b97STreehugger Robot typedef int8_t	    ANTLR_INT8;
178*16467b97STreehugger Robot typedef int16_t	    ANTLR_INT16;
179*16467b97STreehugger Robot typedef int32_t	    ANTLR_INT32;
180*16467b97STreehugger Robot typedef int64_t	    ANTLR_INT64;
181*16467b97STreehugger Robot 
182*16467b97STreehugger Robot typedef uint8_t	    ANTLR_UINT8;
183*16467b97STreehugger Robot typedef uint16_t    ANTLR_UINT16;
184*16467b97STreehugger Robot typedef uint32_t    ANTLR_UINT32;
185*16467b97STreehugger Robot typedef uint64_t    ANTLR_UINT64;
186*16467b97STreehugger Robot typedef uint64_t    ANTLR_BITWORD;
187*16467b97STreehugger Robot 
188*16467b97STreehugger Robot #endif
189*16467b97STreehugger Robot 
190*16467b97STreehugger Robot 
191*16467b97STreehugger Robot 
192*16467b97STreehugger Robot #define	ANTLR_UINT64_LIT(lit)  lit##ULL
193*16467b97STreehugger Robot 
194*16467b97STreehugger Robot #define	ANTLR_INLINE	        __inline
195*16467b97STreehugger Robot 
196*16467b97STreehugger Robot typedef FILE *	    ANTLR_FDSC;
197*16467b97STreehugger Robot typedef	struct stat ANTLR_FSTAT_STRUCT;
198*16467b97STreehugger Robot 
199*16467b97STreehugger Robot 
200*16467b97STreehugger Robot 
201*16467b97STreehugger Robot #ifdef	ANTLR_USE_64BIT
202*16467b97STreehugger Robot #define ANTLR_UINT64_CAST(ptr) ((ANTLR_UINT64)(ptr))
203*16467b97STreehugger Robot #define	ANTLR_UINT32_CAST(ptr)	(ANTLR_UINT32)((ANTLR_UINT64)(ptr))
204*16467b97STreehugger Robot typedef ANTLR_INT64		ANTLR_MARKER;
205*16467b97STreehugger Robot typedef ANTLR_UINT64		ANTLR_INTKEY;
206*16467b97STreehugger Robot #else
207*16467b97STreehugger Robot #define ANTLR_UINT64_CAST(ptr) (ANTLR_UINT64)((ANTLR_UINT32)(ptr))
208*16467b97STreehugger Robot #define	ANTLR_UINT32_CAST(ptr)	(ANTLR_UINT32)(ptr)
209*16467b97STreehugger Robot typedef	ANTLR_INT32		ANTLR_MARKER;
210*16467b97STreehugger Robot typedef ANTLR_UINT32	ANTLR_INTKEY;
211*16467b97STreehugger Robot #endif
212*16467b97STreehugger Robot 
213*16467b97STreehugger Robot #ifdef	ANTLR_WIN32
214*16467b97STreehugger Robot #endif
215*16467b97STreehugger Robot 
216*16467b97STreehugger Robot #ifdef	ANTLR_WIN64
217*16467b97STreehugger Robot #endif
218*16467b97STreehugger Robot 
219*16467b97STreehugger Robot 
220*16467b97STreehugger Robot typedef	int			ANTLR_SALENT;								// Type used for size of accept structure
221*16467b97STreehugger Robot typedef struct sockaddr_in	ANTLR_SOCKADDRT, * pANTLR_SOCKADDRT;	// Type used for socket address declaration
222*16467b97STreehugger Robot typedef struct sockaddr		ANTLR_SOCKADDRC, * pANTLR_SOCKADDRC;	// Type used for cast on accept()
223*16467b97STreehugger Robot 
224*16467b97STreehugger Robot #define	ANTLR_CLOSESOCKET	closesocket
225*16467b97STreehugger Robot 
226*16467b97STreehugger Robot /* Warnings that are over-zealous such as complaining about strdup, we
227*16467b97STreehugger Robot  * can turn off.
228*16467b97STreehugger Robot  */
229*16467b97STreehugger Robot 
230*16467b97STreehugger Robot /* Don't complain about "deprecated" functions such as strdup
231*16467b97STreehugger Robot  */
232*16467b97STreehugger Robot #pragma warning( disable : 4996 )
233*16467b97STreehugger Robot 
234*16467b97STreehugger Robot #else
235*16467b97STreehugger Robot 
236*16467b97STreehugger Robot #ifdef __LP64__
237*16467b97STreehugger Robot #define ANTLR_USE_64BIT
238*16467b97STreehugger Robot #endif
239*16467b97STreehugger Robot 
240*16467b97STreehugger Robot #include <stdio.h>
241*16467b97STreehugger Robot #include <stdint.h>
242*16467b97STreehugger Robot #include <sys/types.h>
243*16467b97STreehugger Robot #include <sys/stat.h>
244*16467b97STreehugger Robot #include <stdlib.h>
245*16467b97STreehugger Robot #include <stddef.h>
246*16467b97STreehugger Robot #include <stdarg.h>
247*16467b97STreehugger Robot #include <stdlib.h>
248*16467b97STreehugger Robot #include <stdarg.h>
249*16467b97STreehugger Robot #include <inttypes.h>
250*16467b97STreehugger Robot #include <unistd.h>
251*16467b97STreehugger Robot 
252*16467b97STreehugger Robot #define _stat stat
253*16467b97STreehugger Robot 
254*16467b97STreehugger Robot typedef int SOCKET;
255*16467b97STreehugger Robot 
256*16467b97STreehugger Robot /* Inherit type definitions for autoconf
257*16467b97STreehugger Robot  */
258*16467b97STreehugger Robot typedef int32_t	    ANTLR_CHAR;
259*16467b97STreehugger Robot typedef uint32_t    ANTLR_UCHAR;
260*16467b97STreehugger Robot 
261*16467b97STreehugger Robot typedef int8_t	    ANTLR_INT8;
262*16467b97STreehugger Robot typedef int16_t	    ANTLR_INT16;
263*16467b97STreehugger Robot typedef int32_t	    ANTLR_INT32;
264*16467b97STreehugger Robot typedef int64_t	    ANTLR_INT64;
265*16467b97STreehugger Robot 
266*16467b97STreehugger Robot typedef uint8_t	    ANTLR_UINT8;
267*16467b97STreehugger Robot typedef uint16_t    ANTLR_UINT16;
268*16467b97STreehugger Robot typedef uint32_t    ANTLR_UINT32;
269*16467b97STreehugger Robot typedef uint64_t    ANTLR_UINT64;
270*16467b97STreehugger Robot typedef uint64_t    ANTLR_BITWORD;
271*16467b97STreehugger Robot 
272*16467b97STreehugger Robot #define ANTLR_INLINE   inline
273*16467b97STreehugger Robot #define	ANTLR_API
274*16467b97STreehugger Robot 
275*16467b97STreehugger Robot typedef FILE *	    ANTLR_FDSC;
276*16467b97STreehugger Robot typedef	struct stat ANTLR_FSTAT_STRUCT;
277*16467b97STreehugger Robot 
278*16467b97STreehugger Robot #ifdef	ANTLR_USE_64BIT
279*16467b97STreehugger Robot #define	ANTLR_FUNC_PTR(ptr)    (void *)((ANTLR_UINT64)(ptr))
280*16467b97STreehugger Robot #define ANTLR_UINT64_CAST(ptr)	(ANTLR_UINT64)(ptr))
281*16467b97STreehugger Robot #define	ANTLR_UINT32_CAST(ptr) (ANTLR_UINT32)((ANTLR_UINT64)(ptr))
282*16467b97STreehugger Robot typedef ANTLR_INT64		ANTLR_MARKER;
283*16467b97STreehugger Robot typedef ANTLR_UINT64		ANTLR_INTKEY;
284*16467b97STreehugger Robot #else
285*16467b97STreehugger Robot #define	ANTLR_FUNC_PTR(ptr)	(void *)((ANTLR_UINT32)(ptr))
286*16467b97STreehugger Robot #define ANTLR_UINT64_CAST(ptr) (ANTLR_UINT64)((ANTLR_UINT32)(ptr))
287*16467b97STreehugger Robot #define	ANTLR_UINT32_CAST(ptr)	(ANTLR_UINT32)(ptr)
288*16467b97STreehugger Robot typedef	ANTLR_INT32		ANTLR_MARKER;
289*16467b97STreehugger Robot typedef ANTLR_UINT32		ANTLR_INTKEY;
290*16467b97STreehugger Robot #endif
291*16467b97STreehugger Robot #define	ANTLR_UINT64_LIT(lit)	lit##ULL
292*16467b97STreehugger Robot 
293*16467b97STreehugger Robot #endif
294*16467b97STreehugger Robot 
295*16467b97STreehugger Robot #ifdef ANTLR_USE_64BIT
296*16467b97STreehugger Robot #define ANTLR_TRIE_DEPTH 63
297*16467b97STreehugger Robot #else
298*16467b97STreehugger Robot #define ANTLR_TRIE_DEPTH 31
299*16467b97STreehugger Robot #endif
300*16467b97STreehugger Robot /* Pre declare the typedefs for all the interfaces, then
301*16467b97STreehugger Robot  * they can be inter-dependant and we will let the linker
302*16467b97STreehugger Robot  * sort it out for us.
303*16467b97STreehugger Robot  */
304*16467b97STreehugger Robot #include    <antlr3interfaces.hpp>
305*16467b97STreehugger Robot 
306*16467b97STreehugger Robot // Include the unicode.org conversion library header.
307*16467b97STreehugger Robot //
308*16467b97STreehugger Robot #include    <antlr3convertutf.hpp>
309*16467b97STreehugger Robot 
310*16467b97STreehugger Robot enum ChannelType
311*16467b97STreehugger Robot {
312*16467b97STreehugger Robot 	/** Default channel for a token
313*16467b97STreehugger Robot 	*/
314*16467b97STreehugger Robot 	TOKEN_DEFAULT_CHANNEL	 = 0
315*16467b97STreehugger Robot 	/** Reserved channel number for a HIDDEN token - a token that
316*16467b97STreehugger Robot 		*  is hidden from the parser.
317*16467b97STreehugger Robot 		*/
318*16467b97STreehugger Robot 	,	HIDDEN		=		99
319*16467b97STreehugger Robot };
320*16467b97STreehugger Robot 
321*16467b97STreehugger Robot #endif	/* _ANTLR3DEFS_H	*/
322