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