]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/LangParser.c
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / LangParser.c
index 717a59cbd3c1a9ea6663bc95ba3014d1db7c3cbb..641994c0c19fa9a635721ea239dbbafa189500ce 100644 (file)
-/** \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:52\r
- *     -                for the parser : LangParserParser *\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    "LangParser.h"\r
-/* ----------------------------------------- */\r
-\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)   pLangParser_##scope##_SCOPE\r
-#define SCOPE_STACK(scope)  pLangParser_##scope##Stack\r
-#define        SCOPE_TOP(scope)    ctx->pLangParser_##scope##Top\r
-#define        SCOPE_SIZE(scope)               ctx->pLangParser_##scope##Stack_limit\r
-#define SCOPE_INSTANCE(scope, i)       (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))\r
-\r
-/* Macros for accessing things in the parser\r
- */\r
\r
-#undef     PARSER                  \r
-#undef     RECOGNIZER              \r
-#undef     HAVEPARSEDRULE\r
-#undef         MEMOIZE\r
-#undef     INPUT\r
-#undef     STRSTREAM\r
-#undef     HASEXCEPTION\r
-#undef     EXCEPTION\r
-#undef     MATCHT\r
-#undef     MATCHANYT\r
-#undef     FOLLOWSTACK\r
-#undef     FOLLOWPUSH\r
-#undef     FOLLOWPOP\r
-#undef     PRECOVER\r
-#undef     PREPORTERROR\r
-#undef     LA\r
-#undef     LT\r
-#undef     CONSTRUCTEX\r
-#undef     CONSUME\r
-#undef     MARK\r
-#undef     REWIND\r
-#undef     REWINDLAST\r
-#undef     PERRORRECOVERY\r
-#undef     HASFAILED\r
-#undef     FAILEDFLAG\r
-#undef     RECOVERFROMMISMATCHEDSET\r
-#undef     RECOVERFROMMISMATCHEDELEMENT\r
-#undef         INDEX\r
-#undef      ADAPTOR\r
-#undef         SEEK\r
-#undef     RULEMEMO                \r
-#undef         DBG\r
-\r
-#define            PARSER                                                      ctx->pParser  \r
-#define            RECOGNIZER                                          PARSER->rec\r
-#define                PSRSTATE                                                RECOGNIZER->state\r
-#define            HAVEPARSEDRULE(r)                           RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)\r
-#define                MEMOIZE(ri,si)                                  RECOGNIZER->memoize(RECOGNIZER, ri, si)\r
-#define            INPUT                                                       PARSER->tstream\r
-#define            STRSTREAM                                           INPUT\r
-#define                ISTREAM                                                 INPUT->istream\r
-#define                INDEX()                                                 ISTREAM->index(INPUT->istream)\r
-#define            HASEXCEPTION()                                      (PSRSTATE->error == ANTLR3_TRUE)\r
-#define            EXCEPTION                                           PSRSTATE->exception\r
-#define            MATCHT(t, fs)                                       RECOGNIZER->match(RECOGNIZER, t, fs)\r
-#define            MATCHANYT()                                         RECOGNIZER->matchAny(RECOGNIZER)\r
-#define            FOLLOWSTACK                                     PSRSTATE->following\r
-#define            FOLLOWPUSH(x)                                       FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)\r
-#define            FOLLOWPOP()                                         FOLLOWSTACK->pop(FOLLOWSTACK)\r
-#define            PRECOVER()                                          RECOGNIZER->recover(RECOGNIZER)\r
-#define            PREPORTERROR()                                      RECOGNIZER->reportError(RECOGNIZER)\r
-#define            LA(n)                                                       INPUT->istream->_LA(ISTREAM, n)\r
-#define            LT(n)                                                       INPUT->_LT(INPUT, n)\r
-#define            CONSTRUCTEX()                                       RECOGNIZER->exConstruct(RECOGNIZER)\r
-#define            CONSUME()                                           ISTREAM->consume(ISTREAM)\r
-#define            MARK()                                                      ISTREAM->mark(ISTREAM)\r
-#define            REWIND(m)                                           ISTREAM->rewind(ISTREAM, m)\r
-#define            REWINDLAST()                                        ISTREAM->rewindLast(ISTREAM)\r
-#define                SEEK(n)                                                 ISTREAM->seek(ISTREAM, n)\r
-#define            PERRORRECOVERY                                      PSRSTATE->errorRecovery\r
-#define            FAILEDFLAG                                          PSRSTATE->failed\r
-#define            HASFAILED()                                         (FAILEDFLAG == ANTLR3_TRUE)\r
-#define            BACKTRACKING                                        PSRSTATE->backtracking\r
-#define            RECOVERFROMMISMATCHEDSET(s)         RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)\r
-#define            RECOVERFROMMISMATCHEDELEMENT(e)     RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)\r
-#define     ADAPTOR                         ctx->adaptor\r
-#define                RULEMEMO                                                PSRSTATE->ruleMemo\r
-#define                DBG                                                             RECOGNIZER->debugger\r
-\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
-\r
-/** \brief Table of all token names in symbolic order, mainly used for\r
- *         error reporting.\r
- */\r
-pANTLR3_UINT8   LangParserTokenNames[7+4]\r
-     = {\r
-        (pANTLR3_UINT8) "<invalid>",       /* String to print to indicate an invalid token */\r
-        (pANTLR3_UINT8) "<EOR>",\r
-        (pANTLR3_UINT8) "<DOWN>", \r
-        (pANTLR3_UINT8) "<UP>", \r
-        (pANTLR3_UINT8) "DECL",\r
-        (pANTLR3_UINT8) "ID",\r
-        (pANTLR3_UINT8) "INTTYPE",\r
-        (pANTLR3_UINT8) "FLOATTYPE",\r
-        (pANTLR3_UINT8) "INT",\r
-        (pANTLR3_UINT8) "WS",\r
-        (pANTLR3_UINT8) "';'"\r
-       };\r
-\r
-        \r
-\r
-// Forward declare the locally static matching functions we have generated.\r
-//\r
-static LangParser_start_return start    (pLangParser ctx);\r
-static LangParser_decl_return  decl    (pLangParser ctx);\r
-static LangParser_type_return  type    (pLangParser ctx);\r
-static void    LangParserFree(pLangParser ctx);\r
-/* For use in tree output where we are accumulating rule labels via label += ruleRef\r
- * we need a function that knows how to free a return scope when the list is destroyed. \r
- * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.\r
- */\r
-static void ANTLR3_CDECL freeScope(void * scope)\r
-{\r
-    ANTLR3_FREE(scope);\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
-/** \brief Create a new LangParser parser and return a context for it.\r
- *\r
- * \param[in] instream Pointer to an input stream interface.\r
- *\r
- * \return Pointer to new parser context upon success.\r
- */\r
-ANTLR3_API pLangParser\r
-LangParserNew   (pANTLR3_COMMON_TOKEN_STREAM instream)\r
-{\r
-       // See if we can create a new parser with the standard constructor\r
-       //\r
-       return LangParserNewSSD(instream, NULL);\r
-}\r
-\r
-/** \brief Create a new LangParser parser and return a context for it.\r
- *\r
- * \param[in] instream Pointer to an input stream interface.\r
- *\r
- * \return Pointer to new parser context upon success.\r
- */\r
-ANTLR3_API pLangParser\r
-LangParserNewSSD   (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)\r
-{\r
-    pLangParser ctx;       /* Context structure we will build and return   */\r
-    \r
-    ctx        = (pLangParser) ANTLR3_CALLOC(1, sizeof(LangParser));\r
-    \r
-    if (ctx == NULL)\r
-    {\r
-               // Failed to allocate memory for parser context\r
-               //\r
-        return  NULL;\r
-    }\r
-    \r
-    /* -------------------------------------------------------------------\r
-     * Memory for basic structure is allocated, now to fill in\r
-     * the base ANTLR3 structures. We initialize the function pointers\r
-     * for the standard ANTLR3 parser 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 LangParser.h here, in order that you can get a sense\r
-     * of what goes where.\r
-     */\r
-\r
-    /* Create a base parser/recognizer, using the supplied token stream\r
-     */\r
-    ctx->pParser           = antlr3ParserNewStream(ANTLR3_SIZE_HINT, instream->tstream, state);\r
-    /* Install the implementation of our LangParser interface\r
-     */\r
-    ctx->start = start;\r
-    ctx->decl  = decl;\r
-    ctx->type  = type;\r
-    ctx->free                  = LangParserFree;\r
-    ctx->getGrammarFileName    = getGrammarFileName;\r
-    \r
-    /* Install the scope pushing methods.\r
-     */\r
-    ADAPTOR    = ANTLR3_TREE_ADAPTORNew(instream->tstream->tokenSource->strFactory);\r
-    ctx->vectors       = antlr3VectorFactoryNew(0);\r
-    \r
-\r
-       \r
-    /* Install the token table\r
-     */\r
-    PSRSTATE->tokenNames   = LangParserTokenNames;\r
-    \r
-    \r
-    /* Return the newly built parser to the caller\r
-     */\r
-    return  ctx;\r
-}\r
-\r
-/** Free the parser resources\r
- */\r
- static void\r
- LangParserFree(pLangParser ctx)\r
- {\r
-    /* Free any scope memory\r
-     */\r
-    \r
-    ctx->vectors->close(ctx->vectors);\r
-    /* We created the adaptor so we must free it\r
-     */\r
-    ADAPTOR->free(ADAPTOR);\r
-       // Free this parser\r
-       //\r
-    ctx->pParser->free(ctx->pParser);\r
-    ANTLR3_FREE(ctx);\r
-\r
-    /* Everything is released, so we can return\r
-     */\r
-    return;\r
- }\r
\r
-/** Return token names used by this parser\r
- *\r
- * The returned pointer is used as an index into the token names table (using the token \r
- * number as the index).\r
- * \r
- * \return Pointer to first char * in the table.\r
- */\r
-static pANTLR3_UINT8    *getTokenNames() \r
-{\r
-        return LangParserTokenNames; \r
-}\r
-\r
-    \r
-/* Declare the bitsets\r
- */\r
-\r
-/** Bitset defining follow set for error recovery in rule state: FOLLOW_decl_in_start91  */\r
-static ANTLR3_BITWORD FOLLOW_decl_in_start91_bits[]    = { ANTLR3_UINT64_LIT(0x00000000000000C2) };\r
-static  ANTLR3_BITSET_LIST FOLLOW_decl_in_start91      = { FOLLOW_decl_in_start91_bits, 1      };\r
-/** Bitset defining follow set for error recovery in rule state: FOLLOW_type_in_decl103  */\r
-static ANTLR3_BITWORD FOLLOW_type_in_decl103_bits[]    = { ANTLR3_UINT64_LIT(0x0000000000000020) };\r
-static  ANTLR3_BITSET_LIST FOLLOW_type_in_decl103      = { FOLLOW_type_in_decl103_bits, 1      };\r
-/** Bitset defining follow set for error recovery in rule state: FOLLOW_ID_in_decl105  */\r
-static ANTLR3_BITWORD FOLLOW_ID_in_decl105_bits[]      = { ANTLR3_UINT64_LIT(0x0000000000000400) };\r
-static  ANTLR3_BITSET_LIST FOLLOW_ID_in_decl105        = { FOLLOW_ID_in_decl105_bits, 1        };\r
-/** Bitset defining follow set for error recovery in rule state: FOLLOW_10_in_decl107  */\r
-static ANTLR3_BITWORD FOLLOW_10_in_decl107_bits[]      = { ANTLR3_UINT64_LIT(0x0000000000000002) };\r
-static  ANTLR3_BITSET_LIST FOLLOW_10_in_decl107        = { FOLLOW_10_in_decl107_bits, 1        };\r
-/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_type0  */\r
-static ANTLR3_BITWORD FOLLOW_set_in_type0_bits[]       = { ANTLR3_UINT64_LIT(0x0000000000000002) };\r
-static  ANTLR3_BITSET_LIST FOLLOW_set_in_type0 = { FOLLOW_set_in_type0_bits, 1 };\r
-     \r
-\r
\r
\r
-/* ==============================================\r
- * Parsing rules\r
- */\r
-/** \r
- * $ANTLR start start\r
- * Lang.g:20:1: start : ( decl )+ ;\r
- */\r
-static LangParser_start_return\r
-start(pLangParser ctx)\r
-{   \r
-    LangParser_start_return retval;\r
-\r
-    pANTLR3_BASE_TREE root_0;\r
-\r
-    LangParser_decl_return decl1;\r
-    #undef     RETURN_TYPE_decl1\r
-    #define    RETURN_TYPE_decl1 LangParser_decl_return\r
-\r
-\r
-    /* Initialize rule variables\r
-     */\r
-\r
-\r
-    root_0 = NULL;\r
-\r
-    decl1.tree = NULL;\r
-\r
-    retval.start = LT(1); retval.stop = retval.start;\r
-\r
-\r
-\r
-    retval.tree  = NULL;\r
-    {\r
-        // Lang.g:20:7: ( ( decl )+ )\r
-        // Lang.g:20:9: ( decl )+\r
-        {\r
-            root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));\r
-\r
-            // Lang.g:20:9: ( decl )+\r
-            {\r
-                int cnt1=0;\r
-\r
-                for (;;)\r
-                {\r
-                    int alt1=2;\r
-               switch ( LA(1) ) \r
-               {\r
-               case INTTYPE:\r
-               case FLOATTYPE:\r
-                       {\r
-                               alt1=1;\r
-                       }\r
-                   break;\r
-\r
-               }\r
-\r
-               switch (alt1) \r
-               {\r
-                   case 1:\r
-                       // Lang.g:20:9: decl\r
-                       {\r
-                           FOLLOWPUSH(FOLLOW_decl_in_start91);\r
-                           decl1=decl(ctx);\r
-\r
-                           FOLLOWPOP();\r
-                           if  (HASEXCEPTION())\r
-                           {\r
-                               goto rulestartEx;\r
-                           }\r
-\r
-                           ADAPTOR->addChild(ADAPTOR, root_0, decl1.tree);\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 rulestartEx;\r
-               }\r
-               cnt1++;\r
-                }\r
-                loop1: ;       /* Jump to here if this rule does not match */\r
-            }\r
-\r
-        }\r
-\r
-    }\r
-    \r
-\r
-    // This is where rules clean up and exit\r
-    //\r
-    goto rulestartEx; /* Prevent compiler warnings */\r
-    rulestartEx: ;\r
-    retval.stop = LT(-1);\r
-\r
-       retval.stop = LT(-1);\r
-       retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));\r
-       ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);\r
-\r
-            if (HASEXCEPTION())\r
-            {\r
-                PREPORTERROR();\r
-                PRECOVER();\r
-                retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));\r
-            }\r
-\r
-\r
-    return retval;\r
-}\r
-/* $ANTLR end start */\r
-\r
-/** \r
- * $ANTLR start decl\r
- * Lang.g:23:1: decl : type ID ';' -> ^( DECL type ID ) ;\r
- */\r
-static LangParser_decl_return\r
-decl(pLangParser ctx)\r
-{   \r
-    LangParser_decl_return retval;\r
-\r
-    pANTLR3_BASE_TREE root_0;\r
-\r
-    pANTLR3_COMMON_TOKEN    ID3;\r
-    pANTLR3_COMMON_TOKEN    char_literal4;\r
-    LangParser_type_return type2;\r
-    #undef     RETURN_TYPE_type2\r
-    #define    RETURN_TYPE_type2 LangParser_type_return\r
-\r
-    pANTLR3_BASE_TREE ID3_tree;\r
-    pANTLR3_BASE_TREE char_literal4_tree;\r
-    pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_10;\r
-    pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_ID;\r
-    pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_type;\r
-    /* Initialize rule variables\r
-     */\r
-\r
-\r
-    root_0 = NULL;\r
-\r
-    ID3       = NULL;\r
-    char_literal4       = NULL;\r
-    type2.tree = NULL;\r
-\r
-    retval.start = LT(1); retval.stop = retval.start;\r
-\r
-    ID3_tree   = NULL;\r
-    char_literal4_tree   = NULL;\r
-\r
-    stream_10   = NULL;\r
-    #define CREATE_stream_10  if (stream_10 == NULL) {stream_10 = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token 10"); } \r
-    stream_ID   = NULL;\r
-    #define CREATE_stream_ID  if (stream_ID == NULL) {stream_ID = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token ID"); } \r
-    stream_type   = NULL;\r
-    #define CREATE_stream_type  if (stream_type == NULL) {stream_type = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule type"); }\r
-\r
-    retval.tree  = NULL;\r
-    {\r
-        // Lang.g:23:6: ( type ID ';' -> ^( DECL type ID ) )\r
-        // Lang.g:23:8: type ID ';'\r
-        {\r
-            FOLLOWPUSH(FOLLOW_type_in_decl103);\r
-            type2=type(ctx);\r
-\r
-            FOLLOWPOP();\r
-            if  (HASEXCEPTION())\r
-            {\r
-                goto ruledeclEx;\r
-            }\r
-\r
-            CREATE_stream_type; stream_type->add(stream_type, type2.tree, NULL);\r
-            ID3 = (pANTLR3_COMMON_TOKEN) MATCHT(ID, &FOLLOW_ID_in_decl105); \r
-            if  (HASEXCEPTION())\r
-            {\r
-                goto ruledeclEx;\r
-            }\r
-             \r
-            CREATE_stream_ID; stream_ID->add(stream_ID, ID3, NULL);\r
-\r
-            char_literal4 = (pANTLR3_COMMON_TOKEN) MATCHT(10, &FOLLOW_10_in_decl107); \r
-            if  (HASEXCEPTION())\r
-            {\r
-                goto ruledeclEx;\r
-            }\r
-             \r
-            CREATE_stream_10; stream_10->add(stream_10, char_literal4, NULL);\r
-\r
-\r
-             \r
-            /* AST REWRITE\r
-             * elements          : ID, type\r
-             * token labels      : \r
-             * rule labels       : retval\r
-             * token list labels : \r
-             * rule list labels  : \r
-             */\r
-            {\r
-               pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;\r
-\r
-               stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR,  RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);\r
-\r
-               root_0                      = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));\r
-               retval.tree    = root_0;\r
-               // 23:20: -> ^( DECL type ID )\r
-               {\r
-                   // Lang.g:23:23: ^( DECL type ID )\r
-                   {\r
-                       pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));\r
-                       root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, (pANTLR3_BASE_TREE)ADAPTOR->createTypeText(ADAPTOR, DECL, (pANTLR3_UINT8)"DECL"), root_1));\r
-\r
-                       ADAPTOR->addChild(ADAPTOR, root_1, stream_type == NULL ? NULL : stream_type->nextTree(stream_type));\r
-                       ADAPTOR->addChild(ADAPTOR, root_1, stream_ID == NULL ? NULL : stream_ID->nextNode(stream_ID));\r
-\r
-                       ADAPTOR->addChild(ADAPTOR, root_0, root_1);\r
-                   }\r
-\r
-               }\r
-\r
-               retval.tree = root_0; // set result root\r
-               if (stream_retval != NULL) stream_retval->free(stream_retval);\r
-\r
-\r
-            }\r
-        }\r
-\r
-    }\r
-    \r
-\r
-    // This is where rules clean up and exit\r
-    //\r
-    goto ruledeclEx; /* Prevent compiler warnings */\r
-    ruledeclEx: ;\r
-    retval.stop = LT(-1);\r
-\r
-       retval.stop = LT(-1);\r
-       retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));\r
-       ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);\r
-        if (stream_10 != NULL) stream_10->free(stream_10);\r
-        if (stream_ID != NULL) stream_ID->free(stream_ID);\r
-        if (stream_type != NULL) stream_type->free(stream_type);\r
-\r
-            if (HASEXCEPTION())\r
-            {\r
-                PREPORTERROR();\r
-                PRECOVER();\r
-                retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));\r
-            }\r
-\r
-\r
-    return retval;\r
-}\r
-/* $ANTLR end decl */\r
-\r
-/** \r
- * $ANTLR start type\r
- * Lang.g:26:1: type : ( INTTYPE | FLOATTYPE );\r
- */\r
-static LangParser_type_return\r
-type(pLangParser ctx)\r
-{   \r
-    LangParser_type_return retval;\r
-\r
-    pANTLR3_BASE_TREE root_0;\r
-\r
-    pANTLR3_COMMON_TOKEN    set5;\r
-\r
-    pANTLR3_BASE_TREE set5_tree;\r
-\r
-    /* Initialize rule variables\r
-     */\r
-\r
-\r
-    root_0 = NULL;\r
-\r
-    set5       = NULL;\r
-    retval.start = LT(1); retval.stop = retval.start;\r
-\r
-    set5_tree   = NULL;\r
-\r
-\r
-    retval.tree  = NULL;\r
-    {\r
-        // Lang.g:26:6: ( INTTYPE | FLOATTYPE )\r
-        // Lang.g:\r
-        {\r
-            root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));\r
-\r
-            set5=(pANTLR3_COMMON_TOKEN)LT(1);\r
-            if ( ((LA(1) >= INTTYPE) && (LA(1) <= FLOATTYPE)) )\r
-            {\r
-                CONSUME();\r
-                ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set5)));\r
-                PERRORRECOVERY=ANTLR3_FALSE;\r
-            }\r
-            else \r
-            {\r
-                CONSTRUCTEX();\r
-                EXCEPTION->type         = ANTLR3_MISMATCHED_SET_EXCEPTION;\r
-                EXCEPTION->name         = (void *)ANTLR3_MISMATCHED_SET_NAME;\r
-                EXCEPTION->expectingSet = &FOLLOW_set_in_type0;\r
-                RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_type0);    goto ruletypeEx;\r
-            }\r
-\r
-\r
-        }\r
-\r
-    }\r
-    \r
-\r
-    // This is where rules clean up and exit\r
-    //\r
-    goto ruletypeEx; /* Prevent compiler warnings */\r
-    ruletypeEx: ;\r
-    retval.stop = LT(-1);\r
-\r
-       retval.stop = LT(-1);\r
-       retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));\r
-       ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);\r
-\r
-            if (HASEXCEPTION())\r
-            {\r
-                PREPORTERROR();\r
-                PRECOVER();\r
-                retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));\r
-            }\r
-\r
-\r
-    return retval;\r
-}\r
-/* $ANTLR end type */\r
-/* End of parsing rules\r
- * ==============================================\r
- */\r
-\r
-/* ==============================================\r
- * Syntactic predicates\r
- */\r
-/* End of syntactic predicates\r
- * ==============================================\r
- */\r
-\r
\r
\r
-\r
-\r
-\r
-/* End of code\r
- * =============================================================================\r
- */\r
+/** \file
+ *  This C source file was generated by $ANTLR version 3.2 Sep 23, 2009 12:02:23
+ *
+ *     -  From the grammar source file : Lang.g
+ *     -                            On : 2010-02-24 13:27:52
+ *     -                for the parser : LangParserParser *
+ * Editing it, at least manually, is not wise. 
+ *
+ * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
+ *
+ *
+*/
+// [The "BSD licence"]
+// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
+// http://www.temporal-wave.com
+// http://www.linkedin.com/in/jimidle
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the distribution.
+// 3. The name of the author may not be used to endorse or promote products
+//    derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/* -----------------------------------------
+ * Include the ANTLR3 generated header file.
+ */
+#include    "LangParser.h"
+/* ----------------------------------------- */
+
+
+
+
+
+/* MACROS that hide the C interface implementations from the
+ * generated code, which makes it a little more understandable to the human eye.
+ * I am very much against using C pre-processor macros for function calls and bits
+ * of code as you cannot see what is happening when single stepping in debuggers
+ * and so on. The exception (in my book at least) is for generated code, where you are
+ * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
+ * hides some indirect calls, but is always referring to the input stream. This is
+ * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
+ * the runtime interfaces without changing the generated code too often, without
+ * confusing the reader of the generated output, who may not wish to know the gory
+ * details of the interface inheritance.
+ */
+#define                CTX     ctx
+
+/* Aids in accessing scopes for grammar programmers
+ */
+#undef SCOPE_TYPE
+#undef SCOPE_STACK
+#undef SCOPE_TOP
+#define        SCOPE_TYPE(scope)   pLangParser_##scope##_SCOPE
+#define SCOPE_STACK(scope)  pLangParser_##scope##Stack
+#define        SCOPE_TOP(scope)    ctx->pLangParser_##scope##Top
+#define        SCOPE_SIZE(scope)               ctx->pLangParser_##scope##Stack_limit
+#define SCOPE_INSTANCE(scope, i)       (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
+
+/* Macros for accessing things in the parser
+ */
+#undef     PARSER                  
+#undef     RECOGNIZER              
+#undef     HAVEPARSEDRULE
+#undef         MEMOIZE
+#undef     INPUT
+#undef     STRSTREAM
+#undef     HASEXCEPTION
+#undef     EXCEPTION
+#undef     MATCHT
+#undef     MATCHANYT
+#undef     FOLLOWSTACK
+#undef     FOLLOWPUSH
+#undef     FOLLOWPOP
+#undef     PRECOVER
+#undef     PREPORTERROR
+#undef     LA
+#undef     LT
+#undef     CONSTRUCTEX
+#undef     CONSUME
+#undef     MARK
+#undef     REWIND
+#undef     REWINDLAST
+#undef     PERRORRECOVERY
+#undef     HASFAILED
+#undef     FAILEDFLAG
+#undef     RECOVERFROMMISMATCHEDSET
+#undef     RECOVERFROMMISMATCHEDELEMENT
+#undef         INDEX
+#undef      ADAPTOR
+#undef         SEEK
+#undef     RULEMEMO                
+#undef         DBG
+
+#define            PARSER                                                      ctx->pParser  
+#define            RECOGNIZER                                          PARSER->rec
+#define                PSRSTATE                                                RECOGNIZER->state
+#define            HAVEPARSEDRULE(r)                           RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
+#define                MEMOIZE(ri,si)                                  RECOGNIZER->memoize(RECOGNIZER, ri, si)
+#define            INPUT                                                       PARSER->tstream
+#define            STRSTREAM                                           INPUT
+#define                ISTREAM                                                 INPUT->istream
+#define                INDEX()                                                 ISTREAM->index(INPUT->istream)
+#define            HASEXCEPTION()                                      (PSRSTATE->error == ANTLR3_TRUE)
+#define            EXCEPTION                                           PSRSTATE->exception
+#define            MATCHT(t, fs)                                       RECOGNIZER->match(RECOGNIZER, t, fs)
+#define            MATCHANYT()                                         RECOGNIZER->matchAny(RECOGNIZER)
+#define            FOLLOWSTACK                                     PSRSTATE->following
+#define            FOLLOWPUSH(x)                                       FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
+#define            FOLLOWPOP()                                         FOLLOWSTACK->pop(FOLLOWSTACK)
+#define            PRECOVER()                                          RECOGNIZER->recover(RECOGNIZER)
+#define            PREPORTERROR()                                      RECOGNIZER->reportError(RECOGNIZER)
+#define            LA(n)                                                       INPUT->istream->_LA(ISTREAM, n)
+#define            LT(n)                                                       INPUT->_LT(INPUT, n)
+#define            CONSTRUCTEX()                                       RECOGNIZER->exConstruct(RECOGNIZER)
+#define            CONSUME()                                           ISTREAM->consume(ISTREAM)
+#define            MARK()                                                      ISTREAM->mark(ISTREAM)
+#define            REWIND(m)                                           ISTREAM->rewind(ISTREAM, m)
+#define            REWINDLAST()                                        ISTREAM->rewindLast(ISTREAM)
+#define                SEEK(n)                                                 ISTREAM->seek(ISTREAM, n)
+#define            PERRORRECOVERY                                      PSRSTATE->errorRecovery
+#define            FAILEDFLAG                                          PSRSTATE->failed
+#define            HASFAILED()                                         (FAILEDFLAG == ANTLR3_TRUE)
+#define            BACKTRACKING                                        PSRSTATE->backtracking
+#define            RECOVERFROMMISMATCHEDSET(s)         RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
+#define            RECOVERFROMMISMATCHEDELEMENT(e)     RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
+#define     ADAPTOR                         ctx->adaptor
+#define                RULEMEMO                                                PSRSTATE->ruleMemo
+#define                DBG                                                             RECOGNIZER->debugger
+
+#define                TOKTEXT(tok, txt)                               tok, (pANTLR3_UINT8)txt
+
+/* The 4 tokens defined below may well clash with your own #defines or token types. If so
+ * then for the present you must use different names for your defines as these are hard coded
+ * in the code generator. It would be better not to use such names internally, and maybe
+ * we can change this in a forthcoming release. I deliberately do not #undef these
+ * here as this will at least give you a redefined error somewhere if they clash.
+ */
+#define            UP      ANTLR3_TOKEN_UP
+#define            DOWN    ANTLR3_TOKEN_DOWN
+#define            EOR     ANTLR3_TOKEN_EOR
+#define            INVALID ANTLR3_TOKEN_INVALID
+
+
+/* =============================================================================
+ * Functions to create and destroy scopes. First come the rule scopes, followed
+ * by the global declared scopes.
+ */
+
+
+
+/* ============================================================================= */
+
+/* =============================================================================
+ * Start of recognizer
+ */
+
+
+
+/** \brief Table of all token names in symbolic order, mainly used for
+ *         error reporting.
+ */
+pANTLR3_UINT8   LangParserTokenNames[7+4]
+     = {
+        (pANTLR3_UINT8) "<invalid>",       /* String to print to indicate an invalid token */
+        (pANTLR3_UINT8) "<EOR>",
+        (pANTLR3_UINT8) "<DOWN>", 
+        (pANTLR3_UINT8) "<UP>", 
+        (pANTLR3_UINT8) "DECL",
+        (pANTLR3_UINT8) "ID",
+        (pANTLR3_UINT8) "INTTYPE",
+        (pANTLR3_UINT8) "FLOATTYPE",
+        (pANTLR3_UINT8) "INT",
+        (pANTLR3_UINT8) "WS",
+        (pANTLR3_UINT8) "';'"
+       };
+
+        
+
+// Forward declare the locally static matching functions we have generated.
+//
+static LangParser_start_return start    (pLangParser ctx);
+static LangParser_decl_return  decl    (pLangParser ctx);
+static LangParser_type_return  type    (pLangParser ctx);
+static void    LangParserFree(pLangParser ctx);
+/* For use in tree output where we are accumulating rule labels via label += ruleRef
+ * we need a function that knows how to free a return scope when the list is destroyed. 
+ * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
+ */
+static void ANTLR3_CDECL freeScope(void * scope)
+{
+    ANTLR3_FREE(scope);
+}
+
+/** \brief Name of the grammar file that generated this code
+ */
+static const char fileName[] = "Lang.g";
+
+/** \brief Return the name of the grammar file that generated this code.
+ */
+static const char * getGrammarFileName()
+{
+       return fileName;
+}
+/** \brief Create a new LangParser parser and return a context for it.
+ *
+ * \param[in] instream Pointer to an input stream interface.
+ *
+ * \return Pointer to new parser context upon success.
+ */
+ANTLR3_API pLangParser
+LangParserNew   (pANTLR3_COMMON_TOKEN_STREAM instream)
+{
+       // See if we can create a new parser with the standard constructor
+       //
+       return LangParserNewSSD(instream, NULL);
+}
+
+/** \brief Create a new LangParser parser and return a context for it.
+ *
+ * \param[in] instream Pointer to an input stream interface.
+ *
+ * \return Pointer to new parser context upon success.
+ */
+ANTLR3_API pLangParser
+LangParserNewSSD   (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
+{
+    pLangParser ctx;       /* Context structure we will build and return   */
+    
+    ctx        = (pLangParser) ANTLR3_CALLOC(1, sizeof(LangParser));
+    
+    if (ctx == NULL)
+    {
+               // Failed to allocate memory for parser context
+               //
+        return  NULL;
+    }
+    
+    /* -------------------------------------------------------------------
+     * Memory for basic structure is allocated, now to fill in
+     * the base ANTLR3 structures. We initialize the function pointers
+     * for the standard ANTLR3 parser function set, but upon return
+     * from here, the programmer may set the pointers to provide custom
+     * implementations of each function. 
+     *
+     * We don't use the macros defined in LangParser.h here, in order that you can get a sense
+     * of what goes where.
+     */
+
+    /* Create a base parser/recognizer, using the supplied token stream
+     */
+    ctx->pParser           = antlr3ParserNewStream(ANTLR3_SIZE_HINT, instream->tstream, state);
+    /* Install the implementation of our LangParser interface
+     */
+    ctx->start = start;
+    ctx->decl  = decl;
+    ctx->type  = type;
+    ctx->free                  = LangParserFree;
+    ctx->getGrammarFileName    = getGrammarFileName;
+    
+    /* Install the scope pushing methods.
+     */
+    ADAPTOR    = ANTLR3_TREE_ADAPTORNew(instream->tstream->tokenSource->strFactory);
+    ctx->vectors       = antlr3VectorFactoryNew(0);
+    
+
+       
+    /* Install the token table
+     */
+    PSRSTATE->tokenNames   = LangParserTokenNames;
+    
+    
+    /* Return the newly built parser to the caller
+     */
+    return  ctx;
+}
+
+/** Free the parser resources
+ */
+ static void
+ LangParserFree(pLangParser ctx)
+ {
+    /* Free any scope memory
+     */
+    
+    ctx->vectors->close(ctx->vectors);
+    /* We created the adaptor so we must free it
+     */
+    ADAPTOR->free(ADAPTOR);
+       // Free this parser
+       //
+    ctx->pParser->free(ctx->pParser);
+    ANTLR3_FREE(ctx);
+
+    /* Everything is released, so we can return
+     */
+    return;
+ }
+/** Return token names used by this parser
+ *
+ * The returned pointer is used as an index into the token names table (using the token 
+ * number as the index).
+ * 
+ * \return Pointer to first char * in the table.
+ */
+static pANTLR3_UINT8    *getTokenNames() 
+{
+        return LangParserTokenNames; 
+}
+
+    
+/* Declare the bitsets
+ */
+
+/** Bitset defining follow set for error recovery in rule state: FOLLOW_decl_in_start91  */
+static ANTLR3_BITWORD FOLLOW_decl_in_start91_bits[]    = { ANTLR3_UINT64_LIT(0x00000000000000C2) };
+static  ANTLR3_BITSET_LIST FOLLOW_decl_in_start91      = { FOLLOW_decl_in_start91_bits, 1      };
+/** Bitset defining follow set for error recovery in rule state: FOLLOW_type_in_decl103  */
+static ANTLR3_BITWORD FOLLOW_type_in_decl103_bits[]    = { ANTLR3_UINT64_LIT(0x0000000000000020) };
+static  ANTLR3_BITSET_LIST FOLLOW_type_in_decl103      = { FOLLOW_type_in_decl103_bits, 1      };
+/** Bitset defining follow set for error recovery in rule state: FOLLOW_ID_in_decl105  */
+static ANTLR3_BITWORD FOLLOW_ID_in_decl105_bits[]      = { ANTLR3_UINT64_LIT(0x0000000000000400) };
+static  ANTLR3_BITSET_LIST FOLLOW_ID_in_decl105        = { FOLLOW_ID_in_decl105_bits, 1        };
+/** Bitset defining follow set for error recovery in rule state: FOLLOW_10_in_decl107  */
+static ANTLR3_BITWORD FOLLOW_10_in_decl107_bits[]      = { ANTLR3_UINT64_LIT(0x0000000000000002) };
+static  ANTLR3_BITSET_LIST FOLLOW_10_in_decl107        = { FOLLOW_10_in_decl107_bits, 1        };
+/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_type0  */
+static ANTLR3_BITWORD FOLLOW_set_in_type0_bits[]       = { ANTLR3_UINT64_LIT(0x0000000000000002) };
+static  ANTLR3_BITSET_LIST FOLLOW_set_in_type0 = { FOLLOW_set_in_type0_bits, 1 };
+     
+
+/* ==============================================
+ * Parsing rules
+ */
+/** 
+ * $ANTLR start start
+ * Lang.g:20:1: start : ( decl )+ ;
+ */
+static LangParser_start_return
+start(pLangParser ctx)
+{   
+    LangParser_start_return retval;
+
+    pANTLR3_BASE_TREE root_0;
+
+    LangParser_decl_return decl1;
+    #undef     RETURN_TYPE_decl1
+    #define    RETURN_TYPE_decl1 LangParser_decl_return
+
+
+    /* Initialize rule variables
+     */
+
+
+    root_0 = NULL;
+
+    decl1.tree = NULL;
+
+    retval.start = LT(1); retval.stop = retval.start;
+
+
+
+    retval.tree  = NULL;
+    {
+        // Lang.g:20:7: ( ( decl )+ )
+        // Lang.g:20:9: ( decl )+
+        {
+            root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
+            // Lang.g:20:9: ( decl )+
+            {
+                int cnt1=0;
+
+                for (;;)
+                {
+                    int alt1=2;
+               switch ( LA(1) ) 
+               {
+               case INTTYPE:
+               case FLOATTYPE:
+                       {
+                               alt1=1;
+                       }
+                   break;
+
+               }
+
+               switch (alt1) 
+               {
+                   case 1:
+                       // Lang.g:20:9: decl
+                       {
+                           FOLLOWPUSH(FOLLOW_decl_in_start91);
+                           decl1=decl(ctx);
+
+                           FOLLOWPOP();
+                           if  (HASEXCEPTION())
+                           {
+                               goto rulestartEx;
+                           }
+
+                           ADAPTOR->addChild(ADAPTOR, root_0, decl1.tree);
+
+                       }
+                       break;
+
+                   default:
+                   
+                       if ( cnt1 >= 1 )
+                       {
+                           goto loop1;
+                       }
+                       /* mismatchedSetEx()
+                        */
+                       CONSTRUCTEX();
+                       EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;
+                       EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;
+
+
+                       goto rulestartEx;
+               }
+               cnt1++;
+                }
+                loop1: ;       /* Jump to here if this rule does not match */
+            }
+
+        }
+
+    }
+    
+
+    // This is where rules clean up and exit
+    //
+    goto rulestartEx; /* Prevent compiler warnings */
+    rulestartEx: ;
+    retval.stop = LT(-1);
+
+       retval.stop = LT(-1);
+       retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
+       ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
+
+            if (HASEXCEPTION())
+            {
+                PREPORTERROR();
+                PRECOVER();
+                retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
+            }
+
+
+    return retval;
+}
+/* $ANTLR end start */
+
+/** 
+ * $ANTLR start decl
+ * Lang.g:23:1: decl : type ID ';' -> ^( DECL type ID ) ;
+ */
+static LangParser_decl_return
+decl(pLangParser ctx)
+{   
+    LangParser_decl_return retval;
+
+    pANTLR3_BASE_TREE root_0;
+
+    pANTLR3_COMMON_TOKEN    ID3;
+    pANTLR3_COMMON_TOKEN    char_literal4;
+    LangParser_type_return type2;
+    #undef     RETURN_TYPE_type2
+    #define    RETURN_TYPE_type2 LangParser_type_return
+
+    pANTLR3_BASE_TREE ID3_tree;
+    pANTLR3_BASE_TREE char_literal4_tree;
+    pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_10;
+    pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_ID;
+    pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_type;
+    /* Initialize rule variables
+     */
+
+
+    root_0 = NULL;
+
+    ID3       = NULL;
+    char_literal4       = NULL;
+    type2.tree = NULL;
+
+    retval.start = LT(1); retval.stop = retval.start;
+
+    ID3_tree   = NULL;
+    char_literal4_tree   = NULL;
+
+    stream_10   = NULL;
+    #define CREATE_stream_10  if (stream_10 == NULL) {stream_10 = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token 10"); } 
+    stream_ID   = NULL;
+    #define CREATE_stream_ID  if (stream_ID == NULL) {stream_ID = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token ID"); } 
+    stream_type   = NULL;
+    #define CREATE_stream_type  if (stream_type == NULL) {stream_type = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule type"); }
+
+    retval.tree  = NULL;
+    {
+        // Lang.g:23:6: ( type ID ';' -> ^( DECL type ID ) )
+        // Lang.g:23:8: type ID ';'
+        {
+            FOLLOWPUSH(FOLLOW_type_in_decl103);
+            type2=type(ctx);
+
+            FOLLOWPOP();
+            if  (HASEXCEPTION())
+            {
+                goto ruledeclEx;
+            }
+
+            CREATE_stream_type; stream_type->add(stream_type, type2.tree, NULL);
+            ID3 = (pANTLR3_COMMON_TOKEN) MATCHT(ID, &FOLLOW_ID_in_decl105); 
+            if  (HASEXCEPTION())
+            {
+                goto ruledeclEx;
+            }
+             
+            CREATE_stream_ID; stream_ID->add(stream_ID, ID3, NULL);
+
+            char_literal4 = (pANTLR3_COMMON_TOKEN) MATCHT(10, &FOLLOW_10_in_decl107); 
+            if  (HASEXCEPTION())
+            {
+                goto ruledeclEx;
+            }
+             
+            CREATE_stream_10; stream_10->add(stream_10, char_literal4, NULL);
+
+
+             
+            /* AST REWRITE
+             * elements          : ID, type
+             * token labels      : 
+             * rule labels       : retval
+             * token list labels : 
+             * rule list labels  : 
+             */
+            {
+               pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
+
+               stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR,  RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
+
+               root_0                      = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+               retval.tree    = root_0;
+               // 23:20: -> ^( DECL type ID )
+               {
+                   // Lang.g:23:23: ^( DECL type ID )
+                   {
+                       pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+                       root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, (pANTLR3_BASE_TREE)ADAPTOR->createTypeText(ADAPTOR, DECL, (pANTLR3_UINT8)"DECL"), root_1));
+
+                       ADAPTOR->addChild(ADAPTOR, root_1, stream_type == NULL ? NULL : stream_type->nextTree(stream_type));
+                       ADAPTOR->addChild(ADAPTOR, root_1, stream_ID == NULL ? NULL : stream_ID->nextNode(stream_ID));
+
+                       ADAPTOR->addChild(ADAPTOR, root_0, root_1);
+                   }
+
+               }
+
+               retval.tree = root_0; // set result root
+               if (stream_retval != NULL) stream_retval->free(stream_retval);
+
+
+            }
+        }
+
+    }
+    
+
+    // This is where rules clean up and exit
+    //
+    goto ruledeclEx; /* Prevent compiler warnings */
+    ruledeclEx: ;
+    retval.stop = LT(-1);
+
+       retval.stop = LT(-1);
+       retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
+       ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
+        if (stream_10 != NULL) stream_10->free(stream_10);
+        if (stream_ID != NULL) stream_ID->free(stream_ID);
+        if (stream_type != NULL) stream_type->free(stream_type);
+
+            if (HASEXCEPTION())
+            {
+                PREPORTERROR();
+                PRECOVER();
+                retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
+            }
+
+
+    return retval;
+}
+/* $ANTLR end decl */
+
+/** 
+ * $ANTLR start type
+ * Lang.g:26:1: type : ( INTTYPE | FLOATTYPE );
+ */
+static LangParser_type_return
+type(pLangParser ctx)
+{   
+    LangParser_type_return retval;
+
+    pANTLR3_BASE_TREE root_0;
+
+    pANTLR3_COMMON_TOKEN    set5;
+
+    pANTLR3_BASE_TREE set5_tree;
+
+    /* Initialize rule variables
+     */
+
+
+    root_0 = NULL;
+
+    set5       = NULL;
+    retval.start = LT(1); retval.stop = retval.start;
+
+    set5_tree   = NULL;
+
+
+    retval.tree  = NULL;
+    {
+        // Lang.g:26:6: ( INTTYPE | FLOATTYPE )
+        // Lang.g:
+        {
+            root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
+            set5=(pANTLR3_COMMON_TOKEN)LT(1);
+            if ( ((LA(1) >= INTTYPE) && (LA(1) <= FLOATTYPE)) )
+            {
+                CONSUME();
+                ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set5)));
+                PERRORRECOVERY=ANTLR3_FALSE;
+            }
+            else 
+            {
+                CONSTRUCTEX();
+                EXCEPTION->type         = ANTLR3_MISMATCHED_SET_EXCEPTION;
+                EXCEPTION->name         = (void *)ANTLR3_MISMATCHED_SET_NAME;
+                EXCEPTION->expectingSet = &FOLLOW_set_in_type0;
+                RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_type0);    goto ruletypeEx;
+            }
+
+
+        }
+
+    }
+    
+
+    // This is where rules clean up and exit
+    //
+    goto ruletypeEx; /* Prevent compiler warnings */
+    ruletypeEx: ;
+    retval.stop = LT(-1);
+
+       retval.stop = LT(-1);
+       retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
+       ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
+
+            if (HASEXCEPTION())
+            {
+                PREPORTERROR();
+                PRECOVER();
+                retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
+            }
+
+
+    return retval;
+}
+/* $ANTLR end type */
+/* End of parsing rules
+ * ==============================================
+ */
+
+/* ==============================================
+ * Syntactic predicates
+ */
+/* End of syntactic predicates
+ * ==============================================
+ */
+
+
+
+
+/* End of code
+ * =============================================================================
+ */