--- /dev/null
+/** \file\r
+ * This C source file was generated by $ANTLR version 3.2 Sep 23, 2009 12:02:23\r
+ *\r
+ * - From the grammar source file : Lang.g\r
+ * - On : 2010-02-24 13:27:55\r
+ * - for the lexer : LangLexerLexer *\r
+ * Editing it, at least manually, is not wise. \r
+ *\r
+ * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.\r
+ *\r
+ *\r
+*/\r
+// [The "BSD licence"]\r
+// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC\r
+// http://www.temporal-wave.com\r
+// http://www.linkedin.com/in/jimidle\r
+//\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions\r
+// are met:\r
+// 1. Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// 2. Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the distribution.\r
+// 3. The name of the author may not be used to endorse or promote products\r
+// derived from this software without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r
+// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r
+// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r
+// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
+// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
+// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+/* -----------------------------------------\r
+ * Include the ANTLR3 generated header file.\r
+ */\r
+#include "LangLexer.h"\r
+/* ----------------------------------------- */\r
+\r
+\r
+/** String literals used by LangLexer that we must do things like MATCHS() with.\r
+ * C will normally just lay down 8 bit characters, and you can use L"xxx" to\r
+ * get wchar_t, but wchar_t is 16 bits on Windows, which is not UTF32 and so\r
+ * we perform this little trick of defining the literals as arrays of UINT32\r
+ * and passing in the address of these.\r
+ */\r
+static ANTLR3_UCHAR lit_1[] = { 0x69, 0x6E, 0x74, ANTLR3_STRING_TERMINATOR};\r
+static ANTLR3_UCHAR lit_2[] = { 0x66, 0x6C, 0x6F, 0x61, 0x74, ANTLR3_STRING_TERMINATOR};\r
+\r
+\r
+\r
+\r
+/* MACROS that hide the C interface implementations from the\r
+ * generated code, which makes it a little more understandable to the human eye.\r
+ * I am very much against using C pre-processor macros for function calls and bits\r
+ * of code as you cannot see what is happening when single stepping in debuggers\r
+ * and so on. The exception (in my book at least) is for generated code, where you are\r
+ * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()\r
+ * hides some indirect calls, but is always referring to the input stream. This is\r
+ * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig\r
+ * the runtime interfaces without changing the generated code too often, without\r
+ * confusing the reader of the generated output, who may not wish to know the gory\r
+ * details of the interface inheritance.\r
+ */\r
+ \r
+#define CTX ctx\r
+\r
+/* Aids in accessing scopes for grammar programmers\r
+ */\r
+#undef SCOPE_TYPE\r
+#undef SCOPE_STACK\r
+#undef SCOPE_TOP\r
+#define SCOPE_TYPE(scope) pLangLexer_##scope##_SCOPE\r
+#define SCOPE_STACK(scope) pLangLexer_##scope##Stack\r
+#define SCOPE_TOP(scope) ctx->pLangLexer_##scope##Top\r
+#define SCOPE_SIZE(scope) ctx->pLangLexer_##scope##Stack_limit\r
+#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))\r
+\r
+ \r
+/* Macros for accessing things in a lexer\r
+ */\r
+#undef LEXER\r
+#undef RECOGNIZER \r
+#undef RULEMEMO \r
+#undef GETCHARINDEX\r
+#undef GETLINE\r
+#undef GETCHARPOSITIONINLINE\r
+#undef EMIT\r
+#undef EMITNEW\r
+#undef MATCHC\r
+#undef MATCHS\r
+#undef MATCHRANGE\r
+#undef LTOKEN\r
+#undef HASFAILED\r
+#undef FAILEDFLAG\r
+#undef INPUT\r
+#undef STRSTREAM\r
+#undef LA\r
+#undef HASEXCEPTION\r
+#undef EXCEPTION\r
+#undef CONSTRUCTEX\r
+#undef CONSUME\r
+#undef LRECOVER\r
+#undef MARK\r
+#undef REWIND\r
+#undef REWINDLAST\r
+#undef BACKTRACKING\r
+#undef MATCHANY\r
+#undef MEMOIZE\r
+#undef HAVEPARSEDRULE\r
+#undef GETTEXT\r
+#undef INDEX\r
+#undef SEEK\r
+#undef PUSHSTREAM\r
+#undef POPSTREAM\r
+#undef SETTEXT\r
+#undef SETTEXT8\r
+\r
+#define LEXER ctx->pLexer\r
+#define RECOGNIZER LEXER->rec\r
+#define LEXSTATE RECOGNIZER->state\r
+#define TOKSOURCE LEXSTATE->tokSource\r
+#define GETCHARINDEX() LEXER->getCharIndex(LEXER)\r
+#define GETLINE() LEXER->getLine(LEXER)\r
+#define GETTEXT() LEXER->getText(LEXER)\r
+#define GETCHARPOSITIONINLINE() LEXER->getCharPositionInLine(LEXER)\r
+#define EMIT() LEXSTATE->type = _type; LEXER->emit(LEXER)\r
+#define EMITNEW(t) LEXER->emitNew(LEXER, t)\r
+#define MATCHC(c) LEXER->matchc(LEXER, c)\r
+#define MATCHS(s) LEXER->matchs(LEXER, s)\r
+#define MATCHRANGE(c1,c2) LEXER->matchRange(LEXER, c1, c2)\r
+#define MATCHANY() LEXER->matchAny(LEXER)\r
+#define LTOKEN LEXSTATE->token\r
+#define HASFAILED() (LEXSTATE->failed == ANTLR3_TRUE)\r
+#define BACKTRACKING LEXSTATE->backtracking\r
+#define FAILEDFLAG LEXSTATE->failed\r
+#define INPUT LEXER->input\r
+#define STRSTREAM INPUT\r
+#define ISTREAM INPUT->istream\r
+#define INDEX() ISTREAM->index(ISTREAM)\r
+#define SEEK(n) ISTREAM->seek(ISTREAM, n)\r
+#define EOF_TOKEN &(LEXSTATE->tokSource->eofToken)\r
+#define HASEXCEPTION() (LEXSTATE->error == ANTLR3_TRUE)\r
+#define EXCEPTION LEXSTATE->exception\r
+#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)\r
+#define LRECOVER() LEXER->recover(LEXER)\r
+#define MARK() ISTREAM->mark(ISTREAM)\r
+#define REWIND(m) ISTREAM->rewind(ISTREAM, m)\r
+#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)\r
+#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)\r
+#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)\r
+#define PUSHSTREAM(str) LEXER->pushCharStream(LEXER, str)\r
+#define POPSTREAM() LEXER->popCharStream(LEXER)\r
+#define SETTEXT(str) LEXSTATE->text = str\r
+#define SKIP() LEXSTATE->token = &(TOKSOURCE->skipToken)\r
+#define USER1 LEXSTATE->user1\r
+#define USER2 LEXSTATE->user2\r
+#define USER3 LEXSTATE->user3\r
+#define CUSTOM LEXSTATE->custom\r
+#define RULEMEMO LEXSTATE->ruleMemo\r
+#define DBG RECOGNIZER->debugger\r
+\r
+/* If we have been told we can rely on the standard 8 bit or 16 bit input\r
+ * stream, then we can define our macros to use the direct pointers\r
+ * in the input object, which is much faster than indirect calls. This\r
+ * is really only significant to lexers with a lot of fragment rules (which\r
+ * do not place LA(1) in a temporary at the moment) and even then\r
+ * only if there is a lot of input (order of say 1M or so).\r
+ */\r
+#if defined(ANTLR3_INLINE_INPUT_ASCII) || defined(ANTLR3_INLINE_INPUT_UTF16)\r
+\r
+# ifdef ANTLR3_INLINE_INPUT_ASCII\r
+\r
+/* 8 bit "ASCII" (actually any 8 bit character set) */\r
+\r
+# define NEXTCHAR ((pANTLR3_UINT8)(INPUT->nextChar))\r
+# define DATAP ((pANTLR3_UINT8)(INPUT->data))\r
+\r
+# else\r
+\r
+# define NEXTCHAR ((pANTLR3_UINT16)(INPUT->nextChar)) \r
+# define DATAP ((pANTLR3_UINT16)(INPUT->data))\r
+\r
+# endif\r
+\r
+# define LA(n) ((NEXTCHAR + n) > (DATAP + INPUT->sizeBuf) ? ANTLR3_CHARSTREAM_EOF : (ANTLR3_UCHAR)(*(NEXTCHAR + n - 1)))\r
+# define CONSUME() \\r
+{ \\r
+ if (NEXTCHAR < (DATAP + INPUT->sizeBuf)) \\r
+ { \\r
+ INPUT->charPositionInLine++; \\r
+ if ((ANTLR3_UCHAR)(*NEXTCHAR) == INPUT->newlineChar) \\r
+ { \\r
+ INPUT->line++; \\r
+ INPUT->charPositionInLine = 0; \\r
+ INPUT->currentLine = (void *)(NEXTCHAR + 1); \\r
+ } \\r
+ INPUT->nextChar = (void *)(NEXTCHAR + 1); \\r
+ } \\r
+}\r
+\r
+#else\r
+\r
+// Pick up the input character by calling the input stream implementation.\r
+//\r
+#define CONSUME() INPUT->istream->consume(INPUT->istream)\r
+#define LA(n) INPUT->istream->_LA(INPUT->istream, n)\r
+\r
+#endif\r
+#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt\r
+\r
+/* The 4 tokens defined below may well clash with your own #defines or token types. If so\r
+ * then for the present you must use different names for your defines as these are hard coded\r
+ * in the code generator. It would be better not to use such names internally, and maybe\r
+ * we can change this in a forthcoming release. I deliberately do not #undef these\r
+ * here as this will at least give you a redefined error somewhere if they clash.\r
+ */\r
+#define UP ANTLR3_TOKEN_UP\r
+#define DOWN ANTLR3_TOKEN_DOWN\r
+#define EOR ANTLR3_TOKEN_EOR\r
+#define INVALID ANTLR3_TOKEN_INVALID\r
+\r
+\r
+/* =============================================================================\r
+ * Functions to create and destroy scopes. First come the rule scopes, followed\r
+ * by the global declared scopes.\r
+ */\r
+\r
+\r
+\r
+/* ============================================================================= */\r
+\r
+/* =============================================================================\r
+ * Start of recognizer\r
+ */\r
+\r
+\r
+/* Forward declare the locally static matching functions we have generated and any predicate functions.\r
+ */\r
+static ANTLR3_INLINE void mT__10 (pLangLexer ctx);\r
+static ANTLR3_INLINE void mINTTYPE (pLangLexer ctx);\r
+static ANTLR3_INLINE void mFLOATTYPE (pLangLexer ctx);\r
+static ANTLR3_INLINE void mID (pLangLexer ctx);\r
+static ANTLR3_INLINE void mINT (pLangLexer ctx);\r
+static ANTLR3_INLINE void mWS (pLangLexer ctx);\r
+static ANTLR3_INLINE void mTokens (pLangLexer ctx);\r
+static void LangLexerFree(pLangLexer ctx);\r
+\r
+/* =========================================================================\r
+ * Lexer matching rules end.\r
+ * =========================================================================\r
+ */\r
+\r
+\r
+\r
+static void\r
+LangLexerFree (pLangLexer ctx)\r
+{\r
+ LEXER->free(LEXER);\r
+ \r
+ ANTLR3_FREE(ctx);\r
+}\r
+\r
+/** \brief Name of the grammar file that generated this code\r
+ */\r
+static const char fileName[] = "Lang.g";\r
+\r
+/** \brief Return the name of the grammar file that generated this code.\r
+ */\r
+static const char * getGrammarFileName()\r
+{\r
+ return fileName;\r
+}\r
+\r
+/** \brief Create a new lexer called LangLexer\r
+ *\r
+ * \param[in] instream Pointer to an initialized input stream\r
+ * \return \r
+ * - Success pLangLexer initialized for the lex start\r
+ * - Fail NULL\r
+ */\r
+ANTLR3_API pLangLexer LangLexerNew \r
+(pANTLR3_INPUT_STREAM instream)\r
+{\r
+ // See if we can create a new lexer with the standard constructor\r
+ //\r
+ return LangLexerNewSSD(instream, NULL);\r
+}\r
+\r
+/** \brief Create a new lexer called LangLexer\r
+ *\r
+ * \param[in] instream Pointer to an initialized input stream\r
+ * \param[state] state Previously created shared recognizer stat\r
+ * \return \r
+ * - Success pLangLexer initialized for the lex start\r
+ * - Fail NULL\r
+ */\r
+ANTLR3_API pLangLexer LangLexerNewSSD \r
+(pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)\r
+{\r
+ pLangLexer ctx; // Context structure we will build and return\r
+\r
+ ctx = (pLangLexer) ANTLR3_CALLOC(1, sizeof(LangLexer));\r
+\r
+ if (ctx == NULL)\r
+ {\r
+ // Failed to allocate memory for lexer context\r
+ return NULL;\r
+ }\r
+\r
+ /* -------------------------------------------------------------------\r
+ * Memory for basic structure is allocated, now to fill in\r
+ * in base ANTLR3 structures. We initialize the function pointers\r
+ * for the standard ANTLR3 lexer function set, but upon return\r
+ * from here, the programmer may set the pointers to provide custom\r
+ * implementations of each function. \r
+ *\r
+ * We don't use the macros defined in LangLexer.h here so you can get a sense\r
+ * of what goes where.\r
+ */\r
+ \r
+ /* Create a base lexer, using the supplied input stream\r
+ */\r
+ ctx->pLexer = antlr3LexerNewStream(ANTLR3_SIZE_HINT, instream, state);\r
+ \r
+ /* Check that we allocated the memory correctly\r
+ */\r
+ if (ctx->pLexer == NULL)\r
+ {\r
+ ANTLR3_FREE(ctx);\r
+ return NULL;\r
+ }\r
+ /* Install the implementation of our LangLexer interface\r
+ */\r
+ ctx->mT__10 = mT__10;\r
+ ctx->mINTTYPE = mINTTYPE;\r
+ ctx->mFLOATTYPE = mFLOATTYPE;\r
+ ctx->mID = mID;\r
+ ctx->mINT = mINT;\r
+ ctx->mWS = mWS;\r
+ ctx->mTokens = mTokens;\r
+ \r
+ /** When the nextToken() call is made to this lexer's pANTLR3_TOKEN_SOURCE\r
+ * it will call mTokens() in this generated code, and will pass it the ctx\r
+ * pointer of this lexer, not the context of the base lexer, so store that now.\r
+ */\r
+ ctx->pLexer->ctx = ctx;\r
+ \r
+ /**Install the token matching function\r
+ */\r
+ ctx->pLexer->mTokens = (void (*) (void *))(mTokens);\r
+ \r
+ ctx->getGrammarFileName = getGrammarFileName;\r
+ ctx->free = LangLexerFree;\r
+\r
+ \r
+ \r
+\r
+\r
+ /* Return the newly built lexer to the caller\r
+ */\r
+ return ctx;\r
+}\r
+ \r
+\r
+/* =========================================================================\r
+ * Functions to match the lexer grammar defined tokens from the input stream\r
+ */\r
+\r
+// Comes from: 7:7: ( ';' )\r
+/** \brief Lexer rule generated by ANTLR3\r
+ *\r
+ * $ANTLR start T__10\r
+ *\r
+ * Looks to match the characters the constitute the token T__10\r
+ * from the attached input stream.\r
+ *\r
+ *\r
+ * \remark\r
+ * - lexer->error == ANTLR3_TRUE if an exception was thrown.\r
+ */\r
+static ANTLR3_INLINE\r
+void mT__10(pLangLexer ctx)\r
+{\r
+ ANTLR3_UINT32 _type;\r
+\r
+ _type = T__10;\r
+ \r
+ \r
+ // Lang.g:7:7: ( ';' )\r
+ // Lang.g:7:9: ';'\r
+ {\r
+ MATCHC(';'); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleT__10Ex;\r
+ }\r
+\r
+\r
+ }\r
+\r
+ LEXSTATE->type = _type;\r
+\r
+ // This is where rules clean up and exit\r
+ //\r
+ goto ruleT__10Ex; /* Prevent compiler warnings */\r
+ ruleT__10Ex: ;\r
+\r
+}\r
+// $ANTLR end T__10\r
+\r
+// Comes from: 30:13: ( 'int' )\r
+/** \brief Lexer rule generated by ANTLR3\r
+ *\r
+ * $ANTLR start INTTYPE\r
+ *\r
+ * Looks to match the characters the constitute the token INTTYPE\r
+ * from the attached input stream.\r
+ *\r
+ *\r
+ * \remark\r
+ * - lexer->error == ANTLR3_TRUE if an exception was thrown.\r
+ */\r
+static ANTLR3_INLINE\r
+void mINTTYPE(pLangLexer ctx)\r
+{\r
+ ANTLR3_UINT32 _type;\r
+\r
+ _type = INTTYPE;\r
+ \r
+ \r
+ // Lang.g:30:13: ( 'int' )\r
+ // Lang.g:30:15: 'int'\r
+ {\r
+ MATCHS(lit_1); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleINTTYPEEx;\r
+ }\r
+\r
+\r
+\r
+ }\r
+\r
+ LEXSTATE->type = _type;\r
+\r
+ // This is where rules clean up and exit\r
+ //\r
+ goto ruleINTTYPEEx; /* Prevent compiler warnings */\r
+ ruleINTTYPEEx: ;\r
+\r
+}\r
+// $ANTLR end INTTYPE\r
+\r
+// Comes from: 31:13: ( 'float' )\r
+/** \brief Lexer rule generated by ANTLR3\r
+ *\r
+ * $ANTLR start FLOATTYPE\r
+ *\r
+ * Looks to match the characters the constitute the token FLOATTYPE\r
+ * from the attached input stream.\r
+ *\r
+ *\r
+ * \remark\r
+ * - lexer->error == ANTLR3_TRUE if an exception was thrown.\r
+ */\r
+static ANTLR3_INLINE\r
+void mFLOATTYPE(pLangLexer ctx)\r
+{\r
+ ANTLR3_UINT32 _type;\r
+\r
+ _type = FLOATTYPE;\r
+ \r
+ \r
+ // Lang.g:31:13: ( 'float' )\r
+ // Lang.g:31:15: 'float'\r
+ {\r
+ MATCHS(lit_2); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleFLOATTYPEEx;\r
+ }\r
+\r
+\r
+\r
+ }\r
+\r
+ LEXSTATE->type = _type;\r
+\r
+ // This is where rules clean up and exit\r
+ //\r
+ goto ruleFLOATTYPEEx; /* Prevent compiler warnings */\r
+ ruleFLOATTYPEEx: ;\r
+\r
+}\r
+// $ANTLR end FLOATTYPE\r
+\r
+// Comes from: 32:8: ( ( 'a' .. 'z' )+ )\r
+/** \brief Lexer rule generated by ANTLR3\r
+ *\r
+ * $ANTLR start ID\r
+ *\r
+ * Looks to match the characters the constitute the token ID\r
+ * from the attached input stream.\r
+ *\r
+ *\r
+ * \remark\r
+ * - lexer->error == ANTLR3_TRUE if an exception was thrown.\r
+ */\r
+static ANTLR3_INLINE\r
+void mID(pLangLexer ctx)\r
+{\r
+ ANTLR3_UINT32 _type;\r
+\r
+ _type = ID;\r
+ \r
+ \r
+ // Lang.g:32:8: ( ( 'a' .. 'z' )+ )\r
+ // Lang.g:32:10: ( 'a' .. 'z' )+\r
+ {\r
+ // Lang.g:32:10: ( 'a' .. 'z' )+\r
+ {\r
+ int cnt1=0;\r
+\r
+ for (;;)\r
+ {\r
+ int alt1=2;\r
+ switch ( LA(1) ) \r
+ {\r
+ case 'a':\r
+ case 'b':\r
+ case 'c':\r
+ case 'd':\r
+ case 'e':\r
+ case 'f':\r
+ case 'g':\r
+ case 'h':\r
+ case 'i':\r
+ case 'j':\r
+ case 'k':\r
+ case 'l':\r
+ case 'm':\r
+ case 'n':\r
+ case 'o':\r
+ case 'p':\r
+ case 'q':\r
+ case 'r':\r
+ case 's':\r
+ case 't':\r
+ case 'u':\r
+ case 'v':\r
+ case 'w':\r
+ case 'x':\r
+ case 'y':\r
+ case 'z':\r
+ {\r
+ alt1=1;\r
+ }\r
+ break;\r
+\r
+ }\r
+\r
+ switch (alt1) \r
+ {\r
+ case 1:\r
+ // Lang.g:32:10: 'a' .. 'z'\r
+ {\r
+ MATCHRANGE('a', 'z'); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleIDEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ \r
+ if ( cnt1 >= 1 )\r
+ {\r
+ goto loop1;\r
+ }\r
+ /* mismatchedSetEx()\r
+ */\r
+ CONSTRUCTEX();\r
+ EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;\r
+ EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;\r
+\r
+\r
+ goto ruleIDEx;\r
+ }\r
+ cnt1++;\r
+ }\r
+ loop1: ; /* Jump to here if this rule does not match */\r
+ }\r
+\r
+ }\r
+\r
+ LEXSTATE->type = _type;\r
+\r
+ // This is where rules clean up and exit\r
+ //\r
+ goto ruleIDEx; /* Prevent compiler warnings */\r
+ ruleIDEx: ;\r
+\r
+}\r
+// $ANTLR end ID\r
+\r
+// Comes from: 33:9: ( ( '0' .. '9' )+ )\r
+/** \brief Lexer rule generated by ANTLR3\r
+ *\r
+ * $ANTLR start INT\r
+ *\r
+ * Looks to match the characters the constitute the token INT\r
+ * from the attached input stream.\r
+ *\r
+ *\r
+ * \remark\r
+ * - lexer->error == ANTLR3_TRUE if an exception was thrown.\r
+ */\r
+static ANTLR3_INLINE\r
+void mINT(pLangLexer ctx)\r
+{\r
+ ANTLR3_UINT32 _type;\r
+\r
+ _type = INT;\r
+ \r
+ \r
+ // Lang.g:33:9: ( ( '0' .. '9' )+ )\r
+ // Lang.g:33:11: ( '0' .. '9' )+\r
+ {\r
+ // Lang.g:33:11: ( '0' .. '9' )+\r
+ {\r
+ int cnt2=0;\r
+\r
+ for (;;)\r
+ {\r
+ int alt2=2;\r
+ switch ( LA(1) ) \r
+ {\r
+ case '0':\r
+ case '1':\r
+ case '2':\r
+ case '3':\r
+ case '4':\r
+ case '5':\r
+ case '6':\r
+ case '7':\r
+ case '8':\r
+ case '9':\r
+ {\r
+ alt2=1;\r
+ }\r
+ break;\r
+\r
+ }\r
+\r
+ switch (alt2) \r
+ {\r
+ case 1:\r
+ // Lang.g:33:11: '0' .. '9'\r
+ {\r
+ MATCHRANGE('0', '9'); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleINTEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ \r
+ if ( cnt2 >= 1 )\r
+ {\r
+ goto loop2;\r
+ }\r
+ /* mismatchedSetEx()\r
+ */\r
+ CONSTRUCTEX();\r
+ EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;\r
+ EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;\r
+\r
+\r
+ goto ruleINTEx;\r
+ }\r
+ cnt2++;\r
+ }\r
+ loop2: ; /* Jump to here if this rule does not match */\r
+ }\r
+\r
+ }\r
+\r
+ LEXSTATE->type = _type;\r
+\r
+ // This is where rules clean up and exit\r
+ //\r
+ goto ruleINTEx; /* Prevent compiler warnings */\r
+ ruleINTEx: ;\r
+\r
+}\r
+// $ANTLR end INT\r
+\r
+// Comes from: 34:8: ( ( ' ' | '\\n' | '\\r' ) )\r
+/** \brief Lexer rule generated by ANTLR3\r
+ *\r
+ * $ANTLR start WS\r
+ *\r
+ * Looks to match the characters the constitute the token WS\r
+ * from the attached input stream.\r
+ *\r
+ *\r
+ * \remark\r
+ * - lexer->error == ANTLR3_TRUE if an exception was thrown.\r
+ */\r
+static ANTLR3_INLINE\r
+void mWS(pLangLexer ctx)\r
+{\r
+ ANTLR3_UINT32 _type;\r
+\r
+ _type = WS;\r
+ \r
+ \r
+ // Lang.g:34:8: ( ( ' ' | '\\n' | '\\r' ) )\r
+ // Lang.g:34:10: ( ' ' | '\\n' | '\\r' )\r
+ {\r
+ if ( LA(1) == '\n' || LA(1) == '\r' || LA(1) == ' ' )\r
+ {\r
+ CONSUME();\r
+\r
+ }\r
+ else \r
+ {\r
+ CONSTRUCTEX();\r
+ EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;\r
+ EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;\r
+\r
+ LRECOVER(); goto ruleWSEx;\r
+ }\r
+\r
+ {\r
+ LEXSTATE->channel=HIDDEN;\r
+ }\r
+\r
+ }\r
+\r
+ LEXSTATE->type = _type;\r
+\r
+ // This is where rules clean up and exit\r
+ //\r
+ goto ruleWSEx; /* Prevent compiler warnings */\r
+ ruleWSEx: ;\r
+\r
+}\r
+// $ANTLR end WS\r
+\r
+/** This is the entry point in to the lexer from an object that\r
+ * wants to generate the next token, such as a pCOMMON_TOKEN_STREAM\r
+ */\r
+static void \r
+mTokens(pLangLexer ctx)\r
+{\r
+ {\r
+ // Lang.g:1:8: ( T__10 | INTTYPE | FLOATTYPE | ID | INT | WS )\r
+ \r
+ ANTLR3_UINT32 alt3;\r
+\r
+ alt3=6;\r
+\r
+ switch ( LA(1) ) \r
+ {\r
+ case ';':\r
+ {\r
+ alt3=1;\r
+ }\r
+ break;\r
+ case 'i':\r
+ {\r
+ switch ( LA(2) ) \r
+ {\r
+ case 'n':\r
+ {\r
+ switch ( LA(3) ) \r
+ {\r
+ case 't':\r
+ {\r
+ switch ( LA(4) ) \r
+ {\r
+ case 'a':\r
+ case 'b':\r
+ case 'c':\r
+ case 'd':\r
+ case 'e':\r
+ case 'f':\r
+ case 'g':\r
+ case 'h':\r
+ case 'i':\r
+ case 'j':\r
+ case 'k':\r
+ case 'l':\r
+ case 'm':\r
+ case 'n':\r
+ case 'o':\r
+ case 'p':\r
+ case 'q':\r
+ case 'r':\r
+ case 's':\r
+ case 't':\r
+ case 'u':\r
+ case 'v':\r
+ case 'w':\r
+ case 'x':\r
+ case 'y':\r
+ case 'z':\r
+ {\r
+ alt3=4;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=2;}\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=4;}\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=4;}\r
+\r
+ }\r
+ break;\r
+ case 'f':\r
+ {\r
+ switch ( LA(2) ) \r
+ {\r
+ case 'l':\r
+ {\r
+ switch ( LA(3) ) \r
+ {\r
+ case 'o':\r
+ {\r
+ switch ( LA(4) ) \r
+ {\r
+ case 'a':\r
+ {\r
+ switch ( LA(5) ) \r
+ {\r
+ case 't':\r
+ {\r
+ switch ( LA(6) ) \r
+ {\r
+ case 'a':\r
+ case 'b':\r
+ case 'c':\r
+ case 'd':\r
+ case 'e':\r
+ case 'f':\r
+ case 'g':\r
+ case 'h':\r
+ case 'i':\r
+ case 'j':\r
+ case 'k':\r
+ case 'l':\r
+ case 'm':\r
+ case 'n':\r
+ case 'o':\r
+ case 'p':\r
+ case 'q':\r
+ case 'r':\r
+ case 's':\r
+ case 't':\r
+ case 'u':\r
+ case 'v':\r
+ case 'w':\r
+ case 'x':\r
+ case 'y':\r
+ case 'z':\r
+ {\r
+ alt3=4;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=3;}\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=4;}\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=4;}\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=4;}\r
+\r
+ }\r
+ break;\r
+\r
+ default:\r
+ alt3=4;}\r
+\r
+ }\r
+ break;\r
+ case 'a':\r
+ case 'b':\r
+ case 'c':\r
+ case 'd':\r
+ case 'e':\r
+ case 'g':\r
+ case 'h':\r
+ case 'j':\r
+ case 'k':\r
+ case 'l':\r
+ case 'm':\r
+ case 'n':\r
+ case 'o':\r
+ case 'p':\r
+ case 'q':\r
+ case 'r':\r
+ case 's':\r
+ case 't':\r
+ case 'u':\r
+ case 'v':\r
+ case 'w':\r
+ case 'x':\r
+ case 'y':\r
+ case 'z':\r
+ {\r
+ alt3=4;\r
+ }\r
+ break;\r
+ case '0':\r
+ case '1':\r
+ case '2':\r
+ case '3':\r
+ case '4':\r
+ case '5':\r
+ case '6':\r
+ case '7':\r
+ case '8':\r
+ case '9':\r
+ {\r
+ alt3=5;\r
+ }\r
+ break;\r
+ case '\n':\r
+ case '\r':\r
+ case ' ':\r
+ {\r
+ alt3=6;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ CONSTRUCTEX();\r
+ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;\r
+ EXCEPTION->message = (void *)"";\r
+ EXCEPTION->decisionNum = 3;\r
+ EXCEPTION->state = 0;\r
+\r
+\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+ switch (alt3) \r
+ {\r
+ case 1:\r
+ // Lang.g:1:10: T__10\r
+ {\r
+ /* 1:10: T__10 */\r
+ mT__10(ctx ); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+ case 2:\r
+ // Lang.g:1:16: INTTYPE\r
+ {\r
+ /* 1:16: INTTYPE */\r
+ mINTTYPE(ctx ); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+ case 3:\r
+ // Lang.g:1:24: FLOATTYPE\r
+ {\r
+ /* 1:24: FLOATTYPE */\r
+ mFLOATTYPE(ctx ); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+ case 4:\r
+ // Lang.g:1:34: ID\r
+ {\r
+ /* 1:34: ID */\r
+ mID(ctx ); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+ case 5:\r
+ // Lang.g:1:37: INT\r
+ {\r
+ /* 1:37: INT */\r
+ mINT(ctx ); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+ case 6:\r
+ // Lang.g:1:41: WS\r
+ {\r
+ /* 1:41: WS */\r
+ mWS(ctx ); \r
+ if (HASEXCEPTION())\r
+ {\r
+ goto ruleTokensEx;\r
+ }\r
+\r
+\r
+ }\r
+ break;\r
+\r
+ }\r
+ }\r
+\r
+ \r
+ goto ruleTokensEx; /* Prevent compiler warnings */\r
+ruleTokensEx: ;\r
+}\r
+\r
+/* =========================================================================\r
+ * Lexer matching rules end.\r
+ * =========================================================================\r
+ */\r
+/* End of Lexer code\r
+ * ================================================\r
+ * ================================================\r
+ */ \r
+\r
+\r
+/* End of code\r
+ * =============================================================================\r
+ */\r