diff options
author | Carlo Zancanaro <carlo@carlo-laptop> | 2012-08-06 22:58:29 +1000 |
---|---|---|
committer | Carlo Zancanaro <carlo@carlo-laptop> | 2012-08-06 22:58:29 +1000 |
commit | 42e729d20000eb141b2907ad83630af34f4afea3 (patch) | |
tree | e231556126d538d6b61fe099c6245176aeb3df15 /impl/parser | |
parent | 77d26a8f2832791587b19351ee1fde207fdda608 (diff) |
New variation on the equation system solver.
Much simpler to understand. Basically have a variable assignment which
is dynamic and updates with the strategy changes. Similarly have
strategy changes easily invalidate the variable assignment.
This makes them strongly inter-dependent, but simplifies the
implementation considerably. Proving it should be easier like this, too.
Diffstat (limited to 'impl/parser')
-rw-r--r-- | impl/parser/EquationSystem.tokens | 33 | ||||
-rw-r--r-- | impl/parser/EquationSystemLexer.c | 2087 | ||||
-rw-r--r-- | impl/parser/EquationSystemLexer.h | 313 | ||||
-rw-r--r-- | impl/parser/EquationSystemLexer.o | bin | 0 -> 10104 bytes | |||
-rw-r--r-- | impl/parser/EquationSystemParser.c | 2460 | ||||
-rw-r--r-- | impl/parser/EquationSystemParser.h | 324 | ||||
-rw-r--r-- | impl/parser/EquationSystemParser.o | bin | 0 -> 26200 bytes |
7 files changed, 5217 insertions, 0 deletions
diff --git a/impl/parser/EquationSystem.tokens b/impl/parser/EquationSystem.tokens new file mode 100644 index 0000000..c706036 --- /dev/null +++ b/impl/parser/EquationSystem.tokens @@ -0,0 +1,33 @@ +T__19=19 +T__20=20 +T__21=21 +T__22=22 +COMMA=4 +DIGIT=5 +GREATER_EQUAL=6 +GUARD=7 +LETTER=8 +MAXIMUM=9 +MINIMUM=10 +MULT=11 +NEWLINE=12 +NUMBER=13 +PLUS=14 +QUESTION_MARK=15 +SUB=16 +VARIABLE=17 +WHITESPACE=18 +'('=19 +')'=20 +'*'=11 +'+'=14 +','=21 +'-'=16 +';'=4 +'='=22 +'>='=6 +'?'=15 +'\n'=12 +'guard'=7 +'max'=9 +'min'=10 diff --git a/impl/parser/EquationSystemLexer.c b/impl/parser/EquationSystemLexer.c new file mode 100644 index 0000000..dc8b451 --- /dev/null +++ b/impl/parser/EquationSystemLexer.c @@ -0,0 +1,2087 @@ +/** \file + * This C source file was generated by $ANTLR version 3.4 + * + * - From the grammar source file : EquationSystem.g + * - On : 2012-07-12 15:47:53 + * - for the lexer : EquationSystemLexerLexer + * + * Editing it, at least manually, is not wise. + * + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws. + * + * +*/ +// [The "BSD license"] +// 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 "EquationSystemLexer.h" +/* ----------------------------------------- */ + + +/** String literals used by EquationSystemLexer that we must do things like MATCHS() with. + * C will normally just lay down 8 bit characters, and you can use L"xxx" to + * get wchar_t, but wchar_t is 16 bits on Windows, which is not UTF32 and so + * we perform this little trick of defining the literals as arrays of UINT32 + * and passing in the address of these. + */ +static ANTLR3_UCHAR lit_1[] = { 0x3E, 0x3D, ANTLR3_STRING_TERMINATOR}; +static ANTLR3_UCHAR lit_2[] = { 0x67, 0x75, 0x61, 0x72, 0x64, ANTLR3_STRING_TERMINATOR}; +static ANTLR3_UCHAR lit_3[] = { 0x6D, 0x61, 0x78, ANTLR3_STRING_TERMINATOR}; +static ANTLR3_UCHAR lit_4[] = { 0x6D, 0x69, 0x6E, ANTLR3_STRING_TERMINATOR}; + + + + + +/* 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) pEquationSystemLexer_##scope##_SCOPE +#define SCOPE_STACK(scope) pEquationSystemLexer_##scope##Stack +#define SCOPE_TOP(scope) ctx->pEquationSystemLexer_##scope##Top +#define SCOPE_SIZE(scope) ctx->pEquationSystemLexer_##scope##Stack_limit +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i)) + + +/* Macros for accessing things in a lexer + */ +#undef LEXER +#undef RECOGNIZER +#undef RULEMEMO +#undef GETCHARINDEX +#undef GETLINE +#undef GETCHARPOSITIONINLINE +#undef EMIT +#undef EMITNEW +#undef MATCHC +#undef MATCHS +#undef MATCHRANGE +#undef LTOKEN +#undef HASFAILED +#undef FAILEDFLAG +#undef INPUT +#undef STRSTREAM +#undef LA +#undef HASEXCEPTION +#undef EXCEPTION +#undef CONSTRUCTEX +#undef CONSUME +#undef LRECOVER +#undef MARK +#undef REWIND +#undef REWINDLAST +#undef BACKTRACKING +#undef MATCHANY +#undef MEMOIZE +#undef HAVEPARSEDRULE +#undef GETTEXT +#undef INDEX +#undef SEEK +#undef PUSHSTREAM +#undef POPSTREAM +#undef SETTEXT +#undef SETTEXT8 + +#define LEXER ctx->pLexer +#define RECOGNIZER LEXER->rec +#define LEXSTATE RECOGNIZER->state +#define TOKSOURCE LEXSTATE->tokSource +#define GETCHARINDEX() LEXER->getCharIndex(LEXER) +#define GETLINE() LEXER->getLine(LEXER) +#define GETTEXT() LEXER->getText(LEXER) +#define GETCHARPOSITIONINLINE() LEXER->getCharPositionInLine(LEXER) +#define EMIT() LEXSTATE->type = _type; LEXER->emit(LEXER) +#define EMITNEW(t) LEXER->emitNew(LEXER, t) +#define MATCHC(c) LEXER->matchc(LEXER, c) +#define MATCHS(s) LEXER->matchs(LEXER, s) +#define MATCHRANGE(c1,c2) LEXER->matchRange(LEXER, c1, c2) +#define MATCHANY() LEXER->matchAny(LEXER) +#define LTOKEN LEXSTATE->token +#define HASFAILED() (LEXSTATE->failed == ANTLR3_TRUE) +#define BACKTRACKING LEXSTATE->backtracking +#define FAILEDFLAG LEXSTATE->failed +#define INPUT LEXER->input +#define STRSTREAM INPUT +#define ISTREAM INPUT->istream +#define INDEX() ISTREAM->index(ISTREAM) +#define SEEK(n) ISTREAM->seek(ISTREAM, n) +#define EOF_TOKEN &(LEXSTATE->tokSource->eofToken) +#define HASEXCEPTION() (LEXSTATE->error == ANTLR3_TRUE) +#define EXCEPTION LEXSTATE->exception +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER) +#define LRECOVER() LEXER->recover(LEXER) +#define MARK() ISTREAM->mark(ISTREAM) +#define REWIND(m) ISTREAM->rewind(ISTREAM, m) +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM) +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si) +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r) +#define PUSHSTREAM(str) LEXER->pushCharStream(LEXER, str) +#define POPSTREAM() LEXER->popCharStream(LEXER) +#define SETTEXT(str) LEXSTATE->text = str +#define SKIP() LEXSTATE->token = &(TOKSOURCE->skipToken) +#define USER1 LEXSTATE->user1 +#define USER2 LEXSTATE->user2 +#define USER3 LEXSTATE->user3 +#define CUSTOM LEXSTATE->custom +#define RULEMEMO LEXSTATE->ruleMemo +#define DBG RECOGNIZER->debugger + +/* If we have been told we can rely on the standard 8 bit or UTF16 input + * stream, then we can define our macros to use the direct pointers + * in the input object, which is much faster than indirect calls. This + * is really only significant to lexers with a lot of fragment rules (which + * do not place LA(1) in a temporary at the moment) and even then + * only if there is a lot of input (order of say 1M or so). + */ +#if defined(ANTLR3_INLINE_INPUT_8BIT) || defined(ANTLR3_INLINE_INPUT_UTF16) + +# ifdef ANTLR3_INLINE_INPUT_8BIT + +/* 8 bit character set */ + +# define NEXTCHAR ((pANTLR3_UINT8)(INPUT->nextChar)) +# define DATAP ((pANTLR3_UINT8)(INPUT->data)) + +# else + +# define NEXTCHAR ((pANTLR3_UINT16)(INPUT->nextChar)) +# define DATAP ((pANTLR3_UINT16)(INPUT->data)) + +# endif + +# define LA(n) ((NEXTCHAR + n) > (DATAP + INPUT->sizeBuf) ? ANTLR3_CHARSTREAM_EOF : (ANTLR3_UCHAR)(*(NEXTCHAR + n - 1))) +# define CONSUME() \ +{ \ + if (NEXTCHAR < (DATAP + INPUT->sizeBuf)) \ + { \ + INPUT->charPositionInLine++; \ + if ((ANTLR3_UCHAR)(*NEXTCHAR) == INPUT->newlineChar) \ + { \ + INPUT->line++; \ + INPUT->charPositionInLine = 0; \ + INPUT->currentLine = (void *)(NEXTCHAR + 1); \ + } \ + INPUT->nextChar = (void *)(NEXTCHAR + 1); \ + } \ +} + +#else + +// Pick up the input character by calling the input stream implementation. +// +#define CONSUME() INPUT->istream->consume(INPUT->istream) +#define LA(n) INPUT->istream->_LA(INPUT->istream, n) + +#endif + +#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 + */ + +/* Forward declare the locally static matching functions we have generated and any predicate functions. + */ +static ANTLR3_INLINE + void + mCOMMA (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mGREATER_EQUAL (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mGUARD (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mMAXIMUM (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mMINIMUM (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mMULT (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mNEWLINE (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mPLUS (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mQUESTION_MARK (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mSUB (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mT__19 (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mT__20 (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mT__21 (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mT__22 (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mNUMBER (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mVARIABLE (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mWHITESPACE (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mDIGIT (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mLETTER (pEquationSystemLexer ctx); +static ANTLR3_INLINE + void + mTokens (pEquationSystemLexer ctx); +static void EquationSystemLexerFree(pEquationSystemLexer ctx); + +/* ========================================================================= + * Lexer matching rules end. + * ========================================================================= + */ + + + +static void +EquationSystemLexerFree (pEquationSystemLexer ctx) +{ + LEXER->free(LEXER); + + ANTLR3_FREE(ctx); +} + +static void +EquationSystemLexerReset (pEquationSystemLexer ctx) +{ + RECOGNIZER->reset(RECOGNIZER); +} + +/** \brief Name of the grammar file that generated this code + */ +static const char fileName[] = "EquationSystem.g"; + +/** \brief Return the name of the grammar file that generated this code. + */ +static const char * getGrammarFileName() +{ + return fileName; +} + +/** \brief Create a new lexer called EquationSystemLexer + * + * \param[in] instream Pointer to an initialized input stream + * \return + * - Success pEquationSystemLexer initialized for the lex start + * - Fail NULL + */ +ANTLR3_API pEquationSystemLexer EquationSystemLexerNew +( +pANTLR3_INPUT_STREAM + instream) +{ + // See if we can create a new lexer with the standard constructor + // + return EquationSystemLexerNewSSD(instream, NULL); +} + +/** \brief Create a new lexer called EquationSystemLexer + * + * \param[in] instream Pointer to an initialized input stream + * \param[state] state Previously created shared recognizer stat + * \return + * - Success pEquationSystemLexer initialized for the lex start + * - Fail NULL + */ +ANTLR3_API pEquationSystemLexer EquationSystemLexerNewSSD +(pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pEquationSystemLexer ctx; // Context structure we will build and return + + ctx = (pEquationSystemLexer) ANTLR3_CALLOC(1, sizeof(EquationSystemLexer)); + + if (ctx == NULL) + { + // Failed to allocate memory for lexer context + return NULL; + } + + /* ------------------------------------------------------------------- + * Memory for basic structure is allocated, now to fill in + * in base ANTLR3 structures. We initialize the function pointers + * for the standard ANTLR3 lexer 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 EquationSystemLexer.h here so you can get a sense + * of what goes where. + */ + + /* Create a base lexer, using the supplied input stream + */ + ctx->pLexer = antlr3LexerNewStream(ANTLR3_SIZE_HINT, instream, state); + + /* Check that we allocated the memory correctly + */ + if (ctx->pLexer == NULL) + { + ANTLR3_FREE(ctx); + return NULL; + } + /* Install the implementation of our EquationSystemLexer interface + */ + ctx->mCOMMA = mCOMMA; + ctx->mGREATER_EQUAL = mGREATER_EQUAL; + ctx->mGUARD = mGUARD; + ctx->mMAXIMUM = mMAXIMUM; + ctx->mMINIMUM = mMINIMUM; + ctx->mMULT = mMULT; + ctx->mNEWLINE = mNEWLINE; + ctx->mPLUS = mPLUS; + ctx->mQUESTION_MARK = mQUESTION_MARK; + ctx->mSUB = mSUB; + ctx->mT__19 = mT__19; + ctx->mT__20 = mT__20; + ctx->mT__21 = mT__21; + ctx->mT__22 = mT__22; + ctx->mNUMBER = mNUMBER; + ctx->mVARIABLE = mVARIABLE; + ctx->mWHITESPACE = mWHITESPACE; + ctx->mDIGIT = mDIGIT; + ctx->mLETTER = mLETTER; + ctx->mTokens = mTokens; + + /** When the nextToken() call is made to this lexer's pANTLR3_TOKEN_SOURCE + * it will call mTokens() in this generated code, and will pass it the ctx + * pointer of this lexer, not the context of the base lexer, so store that now. + */ + ctx->pLexer->ctx = ctx; + + /**Install the token matching function + */ + ctx->pLexer->mTokens = (void (*) (void *))(mTokens); + + ctx->getGrammarFileName = getGrammarFileName; + ctx->free = EquationSystemLexerFree; + ctx->reset = EquationSystemLexerReset; + + + /* Return the newly built lexer to the caller + */ + return ctx; +} +/* ========================================================================= + * Functions to match the lexer grammar defined tokens from the input stream + */ + +// Comes from: 7:7: ( ';' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start COMMA + * + * Looks to match the characters the constitute the token COMMA + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mCOMMA(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = COMMA; + + + // EquationSystem.g:7:7: ( ';' ) + // EquationSystem.g:7:9: ';' + { + MATCHC(';'); + if (HASEXCEPTION()) + { + goto ruleCOMMAEx; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleCOMMAEx; /* Prevent compiler warnings */ + ruleCOMMAEx: ; + +} +// $ANTLR end COMMA + +// Comes from: 8:15: ( '>=' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start GREATER_EQUAL + * + * Looks to match the characters the constitute the token GREATER_EQUAL + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mGREATER_EQUAL(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = GREATER_EQUAL; + + + // EquationSystem.g:8:15: ( '>=' ) + // EquationSystem.g:8:17: '>=' + { + MATCHS(lit_1); + if (HASEXCEPTION()) + { + goto ruleGREATER_EQUALEx; + } + + + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleGREATER_EQUALEx; /* Prevent compiler warnings */ + ruleGREATER_EQUALEx: ; + +} +// $ANTLR end GREATER_EQUAL + +// Comes from: 9:7: ( 'guard' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start GUARD + * + * Looks to match the characters the constitute the token GUARD + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mGUARD(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = GUARD; + + + // EquationSystem.g:9:7: ( 'guard' ) + // EquationSystem.g:9:9: 'guard' + { + MATCHS(lit_2); + if (HASEXCEPTION()) + { + goto ruleGUARDEx; + } + + + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleGUARDEx; /* Prevent compiler warnings */ + ruleGUARDEx: ; + +} +// $ANTLR end GUARD + +// Comes from: 10:9: ( 'max' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start MAXIMUM + * + * Looks to match the characters the constitute the token MAXIMUM + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mMAXIMUM(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = MAXIMUM; + + + // EquationSystem.g:10:9: ( 'max' ) + // EquationSystem.g:10:11: 'max' + { + MATCHS(lit_3); + if (HASEXCEPTION()) + { + goto ruleMAXIMUMEx; + } + + + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleMAXIMUMEx; /* Prevent compiler warnings */ + ruleMAXIMUMEx: ; + +} +// $ANTLR end MAXIMUM + +// Comes from: 11:9: ( 'min' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start MINIMUM + * + * Looks to match the characters the constitute the token MINIMUM + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mMINIMUM(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = MINIMUM; + + + // EquationSystem.g:11:9: ( 'min' ) + // EquationSystem.g:11:11: 'min' + { + MATCHS(lit_4); + if (HASEXCEPTION()) + { + goto ruleMINIMUMEx; + } + + + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleMINIMUMEx; /* Prevent compiler warnings */ + ruleMINIMUMEx: ; + +} +// $ANTLR end MINIMUM + +// Comes from: 12:6: ( '*' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start MULT + * + * Looks to match the characters the constitute the token MULT + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mMULT(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = MULT; + + + // EquationSystem.g:12:6: ( '*' ) + // EquationSystem.g:12:8: '*' + { + MATCHC('*'); + if (HASEXCEPTION()) + { + goto ruleMULTEx; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleMULTEx; /* Prevent compiler warnings */ + ruleMULTEx: ; + +} +// $ANTLR end MULT + +// Comes from: 13:9: ( '\\n' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start NEWLINE + * + * Looks to match the characters the constitute the token NEWLINE + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mNEWLINE(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = NEWLINE; + + + // EquationSystem.g:13:9: ( '\\n' ) + // EquationSystem.g:13:11: '\\n' + { + MATCHC('\n'); + if (HASEXCEPTION()) + { + goto ruleNEWLINEEx; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleNEWLINEEx; /* Prevent compiler warnings */ + ruleNEWLINEEx: ; + +} +// $ANTLR end NEWLINE + +// Comes from: 14:6: ( '+' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start PLUS + * + * Looks to match the characters the constitute the token PLUS + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mPLUS(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = PLUS; + + + // EquationSystem.g:14:6: ( '+' ) + // EquationSystem.g:14:8: '+' + { + MATCHC('+'); + if (HASEXCEPTION()) + { + goto rulePLUSEx; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto rulePLUSEx; /* Prevent compiler warnings */ + rulePLUSEx: ; + +} +// $ANTLR end PLUS + +// Comes from: 15:15: ( '?' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start QUESTION_MARK + * + * Looks to match the characters the constitute the token QUESTION_MARK + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mQUESTION_MARK(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = QUESTION_MARK; + + + // EquationSystem.g:15:15: ( '?' ) + // EquationSystem.g:15:17: '?' + { + MATCHC('?'); + if (HASEXCEPTION()) + { + goto ruleQUESTION_MARKEx; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleQUESTION_MARKEx; /* Prevent compiler warnings */ + ruleQUESTION_MARKEx: ; + +} +// $ANTLR end QUESTION_MARK + +// Comes from: 16:5: ( '-' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start SUB + * + * Looks to match the characters the constitute the token SUB + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mSUB(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = SUB; + + + // EquationSystem.g:16:5: ( '-' ) + // EquationSystem.g:16:7: '-' + { + MATCHC('-'); + if (HASEXCEPTION()) + { + goto ruleSUBEx; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleSUBEx; /* Prevent compiler warnings */ + ruleSUBEx: ; + +} +// $ANTLR end SUB + +// Comes from: 17:7: ( '(' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start T__19 + * + * Looks to match the characters the constitute the token T__19 + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mT__19(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = T__19; + + + // EquationSystem.g:17:7: ( '(' ) + // EquationSystem.g:17:9: '(' + { + MATCHC('('); + if (HASEXCEPTION()) + { + goto ruleT__19Ex; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleT__19Ex; /* Prevent compiler warnings */ + ruleT__19Ex: ; + +} +// $ANTLR end T__19 + +// Comes from: 18:7: ( ')' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start T__20 + * + * Looks to match the characters the constitute the token T__20 + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mT__20(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = T__20; + + + // EquationSystem.g:18:7: ( ')' ) + // EquationSystem.g:18:9: ')' + { + MATCHC(')'); + if (HASEXCEPTION()) + { + goto ruleT__20Ex; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleT__20Ex; /* Prevent compiler warnings */ + ruleT__20Ex: ; + +} +// $ANTLR end T__20 + +// Comes from: 19:7: ( ',' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start T__21 + * + * Looks to match the characters the constitute the token T__21 + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mT__21(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = T__21; + + + // EquationSystem.g:19:7: ( ',' ) + // EquationSystem.g:19:9: ',' + { + MATCHC(','); + if (HASEXCEPTION()) + { + goto ruleT__21Ex; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleT__21Ex; /* Prevent compiler warnings */ + ruleT__21Ex: ; + +} +// $ANTLR end T__21 + +// Comes from: 20:7: ( '=' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start T__22 + * + * Looks to match the characters the constitute the token T__22 + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mT__22(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = T__22; + + + // EquationSystem.g:20:7: ( '=' ) + // EquationSystem.g:20:9: '=' + { + MATCHC('='); + if (HASEXCEPTION()) + { + goto ruleT__22Ex; + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleT__22Ex; /* Prevent compiler warnings */ + ruleT__22Ex: ; + +} +// $ANTLR end T__22 + +// Comes from: 37:8: ( ( DIGIT )+ ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start NUMBER + * + * Looks to match the characters the constitute the token NUMBER + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mNUMBER(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = NUMBER; + + + // EquationSystem.g:37:8: ( ( DIGIT )+ ) + // EquationSystem.g:37:10: ( DIGIT )+ + { + // EquationSystem.g:37:10: ( DIGIT )+ + { + int cnt1=0; + + for (;;) + { + int alt1=2; + switch ( LA(1) ) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + alt1=1; + } + break; + + } + + switch (alt1) + { + case 1: + // EquationSystem.g: + { + if ( ((LA(1) >= '0') && (LA(1) <= '9')) ) + { + CONSUME(); + } + else + { + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + + LRECOVER(); + goto ruleNUMBEREx; + } + + + } + break; + + default: + + if ( cnt1 >= 1 ) + { + goto loop1; + } + /* mismatchedSetEx() + */ + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME; + + + goto ruleNUMBEREx; + } + cnt1++; + } + loop1: ; /* Jump to here if this rule does not match */ + } + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleNUMBEREx; /* Prevent compiler warnings */ + ruleNUMBEREx: ; + +} +// $ANTLR end NUMBER + +// Comes from: 38:9: ( ( LETTER ) ( LETTER | DIGIT )* ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start VARIABLE + * + * Looks to match the characters the constitute the token VARIABLE + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mVARIABLE(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = VARIABLE; + + + // EquationSystem.g:38:9: ( ( LETTER ) ( LETTER | DIGIT )* ) + // EquationSystem.g:38:11: ( LETTER ) ( LETTER | DIGIT )* + { + if ( ((LA(1) >= 'a') && (LA(1) <= 'z')) ) + { + CONSUME(); + } + else + { + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + + LRECOVER(); + goto ruleVARIABLEEx; + } + + + // EquationSystem.g:38:20: ( LETTER | DIGIT )* + + for (;;) + { + int alt2=2; + switch ( LA(1) ) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt2=1; + } + break; + + } + + switch (alt2) + { + case 1: + // EquationSystem.g: + { + if ( ((LA(1) >= '0') && (LA(1) <= '9')) || ((LA(1) >= 'a') && (LA(1) <= 'z')) ) + { + CONSUME(); + } + else + { + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + + LRECOVER(); + goto ruleVARIABLEEx; + } + + + } + break; + + default: + goto loop2; /* break out of the loop */ + break; + } + } + loop2: ; /* Jump out to here if this rule does not match */ + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleVARIABLEEx; /* Prevent compiler warnings */ + ruleVARIABLEEx: ; + +} +// $ANTLR end VARIABLE + +// Comes from: 39:12: ( ( '\\t' | ' ' | '\\u000C' )+ ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start WHITESPACE + * + * Looks to match the characters the constitute the token WHITESPACE + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mWHITESPACE(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + _type = WHITESPACE; + + + // EquationSystem.g:39:12: ( ( '\\t' | ' ' | '\\u000C' )+ ) + // EquationSystem.g:39:14: ( '\\t' | ' ' | '\\u000C' )+ + { + // EquationSystem.g:39:14: ( '\\t' | ' ' | '\\u000C' )+ + { + int cnt3=0; + + for (;;) + { + int alt3=2; + switch ( LA(1) ) + { + case '\t': + case '\f': + case ' ': + { + alt3=1; + } + break; + + } + + switch (alt3) + { + case 1: + // EquationSystem.g: + { + if ( LA(1) == '\t' || LA(1) == '\f' || LA(1) == ' ' ) + { + CONSUME(); + } + else + { + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + + LRECOVER(); + goto ruleWHITESPACEEx; + } + + + } + break; + + default: + + if ( cnt3 >= 1 ) + { + goto loop3; + } + /* mismatchedSetEx() + */ + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME; + + + goto ruleWHITESPACEEx; + } + cnt3++; + } + loop3: ; /* Jump to here if this rule does not match */ + } + + { + + LEXSTATE->channel = HIDDEN; + + } + + + } + + LEXSTATE->type = _type; + // This is where rules clean up and exit + // + goto ruleWHITESPACEEx; /* Prevent compiler warnings */ + ruleWHITESPACEEx: ; + +} +// $ANTLR end WHITESPACE + +// Comes from: 46:7: ( '0' .. '9' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start DIGIT + * + * Looks to match the characters the constitute the token DIGIT + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mDIGIT(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + + // EquationSystem.g:46:7: ( '0' .. '9' ) + // EquationSystem.g: + { + if ( ((LA(1) >= '0') && (LA(1) <= '9')) ) + { + CONSUME(); + } + else + { + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + + LRECOVER(); + goto ruleDIGITEx; + } + + + } + + + // This is where rules clean up and exit + // + goto ruleDIGITEx; /* Prevent compiler warnings */ + ruleDIGITEx: ; + +} +// $ANTLR end DIGIT + +// Comes from: 48:7: ( 'a' .. 'z' ) +/** \brief Lexer rule generated by ANTLR3 + * + * $ANTLR start LETTER + * + * Looks to match the characters the constitute the token LETTER + * from the attached input stream. + * + * + * \remark + * - lexer->error == ANTLR3_TRUE if an exception was thrown. + */ +static ANTLR3_INLINE +void mLETTER(pEquationSystemLexer ctx) +{ + ANTLR3_UINT32 _type; + + + // EquationSystem.g:48:7: ( 'a' .. 'z' ) + // EquationSystem.g: + { + if ( ((LA(1) >= 'a') && (LA(1) <= 'z')) ) + { + CONSUME(); + } + else + { + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + + LRECOVER(); + goto ruleLETTEREx; + } + + + } + + + // This is where rules clean up and exit + // + goto ruleLETTEREx; /* Prevent compiler warnings */ + ruleLETTEREx: ; + +} +// $ANTLR end LETTER + +/** This is the entry point in to the lexer from an object that + * wants to generate the next token, such as a pCOMMON_TOKEN_STREAM + */ +static void +mTokens(pEquationSystemLexer ctx) +{ + { + // EquationSystem.g:1:8: ( COMMA | GREATER_EQUAL | GUARD | MAXIMUM | MINIMUM | MULT | NEWLINE | PLUS | QUESTION_MARK | SUB | T__19 | T__20 | T__21 | T__22 | NUMBER | VARIABLE | WHITESPACE ) + + ANTLR3_UINT32 alt4; + + alt4=17; + + switch ( LA(1) ) + { + case ';': + { + alt4=1; + } + break; + case '>': + { + alt4=2; + } + break; + case 'g': + { + switch ( LA(2) ) + { + case 'u': + { + switch ( LA(3) ) + { + case 'a': + { + switch ( LA(4) ) + { + case 'r': + { + switch ( LA(5) ) + { + case 'd': + { + switch ( LA(6) ) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt4=16; + } + break; + + default: + alt4=3; + } + + } + break; + + default: + alt4=16; + } + + } + break; + + default: + alt4=16; + } + + } + break; + + default: + alt4=16; + } + + } + break; + + default: + alt4=16; + } + + } + break; + case 'm': + { + switch ( LA(2) ) + { + case 'a': + { + switch ( LA(3) ) + { + case 'x': + { + switch ( LA(4) ) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt4=16; + } + break; + + default: + alt4=4; + } + + } + break; + + default: + alt4=16; + } + + } + break; + case 'i': + { + switch ( LA(3) ) + { + case 'n': + { + switch ( LA(4) ) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt4=16; + } + break; + + default: + alt4=5; + } + + } + break; + + default: + alt4=16; + } + + } + break; + + default: + alt4=16; + } + + } + break; + case '*': + { + alt4=6; + } + break; + case '\n': + { + alt4=7; + } + break; + case '+': + { + alt4=8; + } + break; + case '?': + { + alt4=9; + } + break; + case '-': + { + alt4=10; + } + break; + case '(': + { + alt4=11; + } + break; + case ')': + { + alt4=12; + } + break; + case ',': + { + alt4=13; + } + break; + case '=': + { + alt4=14; + } + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + alt4=15; + } + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt4=16; + } + break; + case '\t': + case '\f': + case ' ': + { + alt4=17; + } + break; + + default: + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + EXCEPTION->message = (void *)""; + EXCEPTION->decisionNum = 4; + EXCEPTION->state = 0; + + + goto ruleTokensEx; + + } + + switch (alt4) + { + case 1: + // EquationSystem.g:1:10: COMMA + { + /* 1:10: COMMA */ + mCOMMA(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 2: + // EquationSystem.g:1:16: GREATER_EQUAL + { + /* 1:16: GREATER_EQUAL */ + mGREATER_EQUAL(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 3: + // EquationSystem.g:1:30: GUARD + { + /* 1:30: GUARD */ + mGUARD(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 4: + // EquationSystem.g:1:36: MAXIMUM + { + /* 1:36: MAXIMUM */ + mMAXIMUM(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 5: + // EquationSystem.g:1:44: MINIMUM + { + /* 1:44: MINIMUM */ + mMINIMUM(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 6: + // EquationSystem.g:1:52: MULT + { + /* 1:52: MULT */ + mMULT(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 7: + // EquationSystem.g:1:57: NEWLINE + { + /* 1:57: NEWLINE */ + mNEWLINE(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 8: + // EquationSystem.g:1:65: PLUS + { + /* 1:65: PLUS */ + mPLUS(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 9: + // EquationSystem.g:1:70: QUESTION_MARK + { + /* 1:70: QUESTION_MARK */ + mQUESTION_MARK(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 10: + // EquationSystem.g:1:84: SUB + { + /* 1:84: SUB */ + mSUB(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 11: + // EquationSystem.g:1:88: T__19 + { + /* 1:88: T__19 */ + mT__19(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 12: + // EquationSystem.g:1:94: T__20 + { + /* 1:94: T__20 */ + mT__20(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 13: + // EquationSystem.g:1:100: T__21 + { + /* 1:100: T__21 */ + mT__21(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 14: + // EquationSystem.g:1:106: T__22 + { + /* 1:106: T__22 */ + mT__22(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 15: + // EquationSystem.g:1:112: NUMBER + { + /* 1:112: NUMBER */ + mNUMBER(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 16: + // EquationSystem.g:1:119: VARIABLE + { + /* 1:119: VARIABLE */ + mVARIABLE(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + case 17: + // EquationSystem.g:1:128: WHITESPACE + { + /* 1:128: WHITESPACE */ + mWHITESPACE(ctx ); + if (HASEXCEPTION()) + { + goto ruleTokensEx; + } + + + + } + break; + + } + } + + + goto ruleTokensEx; /* Prevent compiler warnings */ +ruleTokensEx: ; +} + +/* ========================================================================= + * Lexer matching rules end. + * ========================================================================= + */ +/* End of Lexer code + * ================================================ + * ================================================ + */ + + +/* End of code + * ============================================================================= + */ diff --git a/impl/parser/EquationSystemLexer.h b/impl/parser/EquationSystemLexer.h new file mode 100644 index 0000000..e02f9a0 --- /dev/null +++ b/impl/parser/EquationSystemLexer.h @@ -0,0 +1,313 @@ +/** \file + * This C header file was generated by $ANTLR version 3.4 + * + * - From the grammar source file : EquationSystem.g + * - On : 2012-07-12 15:47:53 + * - for the lexer : EquationSystemLexerLexer + * + * Editing it, at least manually, is not wise. + * + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws. + * + * + * The lexer +EquationSystemLexer + +has the callable functions (rules) shown below, + * which will invoke the code for the associated rule in the source grammar + * assuming that the input stream is pointing to a token/text stream that could begin + * this rule. + * + * For instance if you call the first (topmost) rule in a parser grammar, you will + * get the results of a full parse, but calling a rule half way through the grammar will + * allow you to pass part of a full token stream to the parser, such as for syntax checking + * in editors and so on. + * + * The parser entry points are called indirectly (by function pointer to function) via + * a parser context typedef pEquationSystemLexer, which is returned from a call to EquationSystemLexerNew(). + * + * As this is a generated lexer, it is unlikely you will call it 'manually'. However + * the methods are provided anyway. + * + * The methods in pEquationSystemLexer are as follows: + * + * - + void + pEquationSystemLexer->COMMA(pEquationSystemLexer) + * - + void + pEquationSystemLexer->GREATER_EQUAL(pEquationSystemLexer) + * - + void + pEquationSystemLexer->GUARD(pEquationSystemLexer) + * - + void + pEquationSystemLexer->MAXIMUM(pEquationSystemLexer) + * - + void + pEquationSystemLexer->MINIMUM(pEquationSystemLexer) + * - + void + pEquationSystemLexer->MULT(pEquationSystemLexer) + * - + void + pEquationSystemLexer->NEWLINE(pEquationSystemLexer) + * - + void + pEquationSystemLexer->PLUS(pEquationSystemLexer) + * - + void + pEquationSystemLexer->QUESTION_MARK(pEquationSystemLexer) + * - + void + pEquationSystemLexer->SUB(pEquationSystemLexer) + * - + void + pEquationSystemLexer->T__19(pEquationSystemLexer) + * - + void + pEquationSystemLexer->T__20(pEquationSystemLexer) + * - + void + pEquationSystemLexer->T__21(pEquationSystemLexer) + * - + void + pEquationSystemLexer->T__22(pEquationSystemLexer) + * - + void + pEquationSystemLexer->NUMBER(pEquationSystemLexer) + * - + void + pEquationSystemLexer->VARIABLE(pEquationSystemLexer) + * - + void + pEquationSystemLexer->WHITESPACE(pEquationSystemLexer) + * - + void + pEquationSystemLexer->DIGIT(pEquationSystemLexer) + * - + void + pEquationSystemLexer->LETTER(pEquationSystemLexer) + * - + void + pEquationSystemLexer->Tokens(pEquationSystemLexer) + * + * The return type for any particular rule is of course determined by the source + * grammar file. + */ +// [The "BSD license"] +// 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. + +#ifndef _EquationSystemLexer_H +#define _EquationSystemLexer_H +/* ============================================================================= + * Standard antlr3 C runtime definitions + */ +#include <antlr3.h> + +/* End of standard antlr 3 runtime definitions + * ============================================================================= + */ + +#ifdef __cplusplus +extern "C" { +#endif + +// Forward declare the context typedef so that we can use it before it is +// properly defined. Delegators and delegates (from import statements) are +// interdependent and their context structures contain pointers to each other +// C only allows such things to be declared if you pre-declare the typedef. +// +typedef struct EquationSystemLexer_Ctx_struct EquationSystemLexer, * pEquationSystemLexer; + + + +#ifdef ANTLR3_WINDOWS +// Disable: Unreferenced parameter, - Rules with parameters that are not used +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually) +// initialized but unused variable - tree rewrite variables declared but not needed +// Unreferenced local variable - lexer rule declares but does not always use _type +// potentially unitialized variable used - retval always returned from a rule +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns +// +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is +// usually generated when a parser rule is given a parameter that it does not use. Mostly though +// this is a matter of orthogonality hence I disable that one. +// +#pragma warning( disable : 4100 ) +#pragma warning( disable : 4101 ) +#pragma warning( disable : 4127 ) +#pragma warning( disable : 4189 ) +#pragma warning( disable : 4505 ) +#pragma warning( disable : 4701 ) +#endif + +/** Context tracking structure for +EquationSystemLexer + + */ +struct EquationSystemLexer_Ctx_struct +{ + /** Built in ANTLR3 context tracker contains all the generic elements + * required for context tracking. + */ + pANTLR3_LEXER pLexer; + + void + (*mCOMMA) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mGREATER_EQUAL) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mGUARD) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mMAXIMUM) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mMINIMUM) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mMULT) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mNEWLINE) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mPLUS) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mQUESTION_MARK) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mSUB) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mT__19) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mT__20) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mT__21) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mT__22) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mNUMBER) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mVARIABLE) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mWHITESPACE) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mDIGIT) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mLETTER) (struct EquationSystemLexer_Ctx_struct * ctx); + + void + (*mTokens) (struct EquationSystemLexer_Ctx_struct * ctx); + const char * (*getGrammarFileName)(); + void (*reset) (struct EquationSystemLexer_Ctx_struct * ctx); + void (*free) (struct EquationSystemLexer_Ctx_struct * ctx); +}; + +// Function protoypes for the constructor functions that external translation units +// such as delegators and delegates may wish to call. +// +ANTLR3_API pEquationSystemLexer EquationSystemLexerNew ( +pANTLR3_INPUT_STREAM + instream); +ANTLR3_API pEquationSystemLexer EquationSystemLexerNewSSD ( +pANTLR3_INPUT_STREAM + instream, pANTLR3_RECOGNIZER_SHARED_STATE state); + +/** Symbolic definitions of all the tokens that the +lexer + will work with. + * \{ + * + * Antlr will define EOF, but we can't use that as it it is too common in + * in C header files and that would be confusing. There is no way to filter this out at the moment + * so we just undef it here for now. That isn't the value we get back from C recognizers + * anyway. We are looking for ANTLR3_TOKEN_EOF. + */ +#ifdef EOF +#undef EOF +#endif +#ifdef Tokens +#undef Tokens +#endif +#define EOF -1 +#define T__19 19 +#define T__20 20 +#define T__21 21 +#define T__22 22 +#define COMMA 4 +#define DIGIT 5 +#define GREATER_EQUAL 6 +#define GUARD 7 +#define LETTER 8 +#define MAXIMUM 9 +#define MINIMUM 10 +#define MULT 11 +#define NEWLINE 12 +#define NUMBER 13 +#define PLUS 14 +#define QUESTION_MARK 15 +#define SUB 16 +#define VARIABLE 17 +#define WHITESPACE 18 +#ifdef EOF +#undef EOF +#define EOF ANTLR3_TOKEN_EOF +#endif + +#ifndef TOKENSOURCE +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource +#endif + +/* End of token definitions for EquationSystemLexer + * ============================================================================= + */ +/** } */ + +#ifdef __cplusplus +} +#endif + +#endif + +/* END - Note:Keep extra line feed to satisfy UNIX systems */ diff --git a/impl/parser/EquationSystemLexer.o b/impl/parser/EquationSystemLexer.o Binary files differnew file mode 100644 index 0000000..a0acfea --- /dev/null +++ b/impl/parser/EquationSystemLexer.o diff --git a/impl/parser/EquationSystemParser.c b/impl/parser/EquationSystemParser.c new file mode 100644 index 0000000..8252c19 --- /dev/null +++ b/impl/parser/EquationSystemParser.c @@ -0,0 +1,2460 @@ +/** \file + * This C source file was generated by $ANTLR version 3.4 + * + * - From the grammar source file : EquationSystem.g + * - On : 2012-07-12 15:47:50 + * - for the parser : EquationSystemParserParser + * + * Editing it, at least manually, is not wise. + * + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws. + * + * +*/ +// [The "BSD license"] +// 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 "EquationSystemParser.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) pEquationSystemParser_##scope##_SCOPE +#define SCOPE_STACK(scope) pEquationSystemParser_##scope##Stack +#define SCOPE_TOP(scope) ctx->pEquationSystemParser_##scope##Top +#define SCOPE_SIZE(scope) ctx->pEquationSystemParser_##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 +#ifdef SKIP_FOLLOW_SETS +#define FOLLOWPUSH(x) +#define FOLLOWPOP() +#else +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL) +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK) +#endif +#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 EquationSystemParserTokenNames[19+4] + = { + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */ + (pANTLR3_UINT8) "<EOR>", + (pANTLR3_UINT8) "<DOWN>", + (pANTLR3_UINT8) "<UP>", + (pANTLR3_UINT8) "COMMA", + (pANTLR3_UINT8) "DIGIT", + (pANTLR3_UINT8) "GREATER_EQUAL", + (pANTLR3_UINT8) "GUARD", + (pANTLR3_UINT8) "LETTER", + (pANTLR3_UINT8) "MAXIMUM", + (pANTLR3_UINT8) "MINIMUM", + (pANTLR3_UINT8) "MULT", + (pANTLR3_UINT8) "NEWLINE", + (pANTLR3_UINT8) "NUMBER", + (pANTLR3_UINT8) "PLUS", + (pANTLR3_UINT8) "QUESTION_MARK", + (pANTLR3_UINT8) "SUB", + (pANTLR3_UINT8) "VARIABLE", + (pANTLR3_UINT8) "WHITESPACE", + (pANTLR3_UINT8) "'('", + (pANTLR3_UINT8) "')'", + (pANTLR3_UINT8) "','", + (pANTLR3_UINT8) "'='" + }; + + + +// Forward declare the locally static matching functions we have generated. +// +static + EquationSystemParser_equation_system_return + equation_system (pEquationSystemParser ctx); +static + EquationSystemParser_equation_return + equation (pEquationSystemParser ctx); +static + EquationSystemParser_maxExpr_return + maxExpr (pEquationSystemParser ctx); +static + EquationSystemParser_minExpr_return + minExpr (pEquationSystemParser ctx); +static + EquationSystemParser_expr_return + expr (pEquationSystemParser ctx); +static + EquationSystemParser_term_return + term (pEquationSystemParser ctx); +static + ANTLR3_BOOLEAN + synpred8_EquationSystem (pEquationSystemParser ctx); +static + ANTLR3_BOOLEAN + synpred12_EquationSystem (pEquationSystemParser ctx); +static void EquationSystemParserFree(pEquationSystemParser ctx); +static void EquationSystemParserReset (pEquationSystemParser 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[] = "EquationSystem.g"; + +/** \brief Return the name of the grammar file that generated this code. + */ +static const char * getGrammarFileName() +{ + return fileName; +} +/** \brief Create a new EquationSystemParser 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 pEquationSystemParser +EquationSystemParserNew (pANTLR3_COMMON_TOKEN_STREAM instream) +{ + // See if we can create a new parser with the standard constructor + // + return EquationSystemParserNewSSD(instream, NULL); +} + +/** \brief Create a new EquationSystemParser 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 pEquationSystemParser +EquationSystemParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pEquationSystemParser ctx; /* Context structure we will build and return */ + + ctx = (pEquationSystemParser) ANTLR3_CALLOC(1, sizeof(EquationSystemParser)); + + 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 EquationSystemParser.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 EquationSystemParser interface + */ + ctx->equation_system = equation_system; + ctx->equation = equation; + ctx->maxExpr = maxExpr; + ctx->minExpr = minExpr; + ctx->expr = expr; + ctx->term = term; + ctx->synpred8_EquationSystem = synpred8_EquationSystem; + ctx->synpred12_EquationSystem = synpred12_EquationSystem; + ctx->free = EquationSystemParserFree; + ctx->reset = EquationSystemParserReset; + 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 = EquationSystemParserTokenNames; + + + /* Return the newly built parser to the caller + */ + return ctx; +} + +static void +EquationSystemParserReset (pEquationSystemParser ctx) +{ + RECOGNIZER->reset(RECOGNIZER); +} + +/** Free the parser resources + */ + static void + EquationSystemParserFree(pEquationSystemParser 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 EquationSystemParserTokenNames; +} + + +/* Declare the bitsets + */ +/** Bitset defining follow set for error recovery in rule state: FOLLOW_equation_in_equation_system141 */ +static ANTLR3_BITWORD FOLLOW_equation_in_equation_system141_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001002) }; +static ANTLR3_BITSET_LIST FOLLOW_equation_in_equation_system141 = { FOLLOW_equation_in_equation_system141_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NEWLINE_in_equation_system145 */ +static ANTLR3_BITWORD FOLLOW_NEWLINE_in_equation_system145_bits[] = { ANTLR3_UINT64_LIT(0x0000000000021000) }; +static ANTLR3_BITSET_LIST FOLLOW_NEWLINE_in_equation_system145 = { FOLLOW_NEWLINE_in_equation_system145_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_equation_in_equation_system150 */ +static ANTLR3_BITWORD FOLLOW_equation_in_equation_system150_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001002) }; +static ANTLR3_BITSET_LIST FOLLOW_equation_in_equation_system150 = { FOLLOW_equation_in_equation_system150_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NEWLINE_in_equation_system157 */ +static ANTLR3_BITWORD FOLLOW_NEWLINE_in_equation_system157_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001002) }; +static ANTLR3_BITSET_LIST FOLLOW_NEWLINE_in_equation_system157 = { FOLLOW_NEWLINE_in_equation_system157_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_VARIABLE_in_equation168 */ +static ANTLR3_BITWORD FOLLOW_VARIABLE_in_equation168_bits[] = { ANTLR3_UINT64_LIT(0x0000000000400000) }; +static ANTLR3_BITSET_LIST FOLLOW_VARIABLE_in_equation168 = { FOLLOW_VARIABLE_in_equation168_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_22_in_equation170 */ +static ANTLR3_BITWORD FOLLOW_22_in_equation170_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2600) }; +static ANTLR3_BITSET_LIST FOLLOW_22_in_equation170 = { FOLLOW_22_in_equation170_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_maxExpr_in_equation173 */ +static ANTLR3_BITWORD FOLLOW_maxExpr_in_equation173_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_maxExpr_in_equation173 = { FOLLOW_maxExpr_in_equation173_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_MAXIMUM_in_maxExpr182 */ +static ANTLR3_BITWORD FOLLOW_MAXIMUM_in_maxExpr182_bits[] = { ANTLR3_UINT64_LIT(0x0000000000080000) }; +static ANTLR3_BITSET_LIST FOLLOW_MAXIMUM_in_maxExpr182 = { FOLLOW_MAXIMUM_in_maxExpr182_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_19_in_maxExpr185 */ +static ANTLR3_BITWORD FOLLOW_19_in_maxExpr185_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2400) }; +static ANTLR3_BITSET_LIST FOLLOW_19_in_maxExpr185 = { FOLLOW_19_in_maxExpr185_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_minExpr_in_maxExpr188 */ +static ANTLR3_BITWORD FOLLOW_minExpr_in_maxExpr188_bits[] = { ANTLR3_UINT64_LIT(0x0000000000300000) }; +static ANTLR3_BITSET_LIST FOLLOW_minExpr_in_maxExpr188 = { FOLLOW_minExpr_in_maxExpr188_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_21_in_maxExpr192 */ +static ANTLR3_BITWORD FOLLOW_21_in_maxExpr192_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2400) }; +static ANTLR3_BITSET_LIST FOLLOW_21_in_maxExpr192 = { FOLLOW_21_in_maxExpr192_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_minExpr_in_maxExpr195 */ +static ANTLR3_BITWORD FOLLOW_minExpr_in_maxExpr195_bits[] = { ANTLR3_UINT64_LIT(0x0000000000300000) }; +static ANTLR3_BITSET_LIST FOLLOW_minExpr_in_maxExpr195 = { FOLLOW_minExpr_in_maxExpr195_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_20_in_maxExpr200 */ +static ANTLR3_BITWORD FOLLOW_20_in_maxExpr200_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_20_in_maxExpr200 = { FOLLOW_20_in_maxExpr200_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_minExpr_in_maxExpr205 */ +static ANTLR3_BITWORD FOLLOW_minExpr_in_maxExpr205_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_minExpr_in_maxExpr205 = { FOLLOW_minExpr_in_maxExpr205_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_MINIMUM_in_minExpr213 */ +static ANTLR3_BITWORD FOLLOW_MINIMUM_in_minExpr213_bits[] = { ANTLR3_UINT64_LIT(0x0000000000080000) }; +static ANTLR3_BITSET_LIST FOLLOW_MINIMUM_in_minExpr213 = { FOLLOW_MINIMUM_in_minExpr213_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_19_in_minExpr216 */ +static ANTLR3_BITWORD FOLLOW_19_in_minExpr216_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2600) }; +static ANTLR3_BITSET_LIST FOLLOW_19_in_minExpr216 = { FOLLOW_19_in_minExpr216_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_maxExpr_in_minExpr219 */ +static ANTLR3_BITWORD FOLLOW_maxExpr_in_minExpr219_bits[] = { ANTLR3_UINT64_LIT(0x0000000000300000) }; +static ANTLR3_BITSET_LIST FOLLOW_maxExpr_in_minExpr219 = { FOLLOW_maxExpr_in_minExpr219_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_21_in_minExpr223 */ +static ANTLR3_BITWORD FOLLOW_21_in_minExpr223_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2600) }; +static ANTLR3_BITSET_LIST FOLLOW_21_in_minExpr223 = { FOLLOW_21_in_minExpr223_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_maxExpr_in_minExpr226 */ +static ANTLR3_BITWORD FOLLOW_maxExpr_in_minExpr226_bits[] = { ANTLR3_UINT64_LIT(0x0000000000300000) }; +static ANTLR3_BITSET_LIST FOLLOW_maxExpr_in_minExpr226 = { FOLLOW_maxExpr_in_minExpr226_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_20_in_minExpr231 */ +static ANTLR3_BITWORD FOLLOW_20_in_minExpr231_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_20_in_minExpr231 = { FOLLOW_20_in_minExpr231_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_minExpr236 */ +static ANTLR3_BITWORD FOLLOW_expr_in_minExpr236_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_minExpr236 = { FOLLOW_expr_in_minExpr236_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_19_in_expr245 */ +static ANTLR3_BITWORD FOLLOW_19_in_expr245_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_19_in_expr245 = { FOLLOW_19_in_expr245_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr247 */ +static ANTLR3_BITWORD FOLLOW_expr_in_expr247_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000040) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr247 = { FOLLOW_expr_in_expr247_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_GREATER_EQUAL_in_expr249 */ +static ANTLR3_BITWORD FOLLOW_GREATER_EQUAL_in_expr249_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_GREATER_EQUAL_in_expr249 = { FOLLOW_GREATER_EQUAL_in_expr249_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr251 */ +static ANTLR3_BITWORD FOLLOW_expr_in_expr251_bits[] = { ANTLR3_UINT64_LIT(0x0000000000008000) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr251 = { FOLLOW_expr_in_expr251_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_QUESTION_MARK_in_expr253 */ +static ANTLR3_BITWORD FOLLOW_QUESTION_MARK_in_expr253_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_QUESTION_MARK_in_expr253 = { FOLLOW_QUESTION_MARK_in_expr253_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr255 */ +static ANTLR3_BITWORD FOLLOW_expr_in_expr255_bits[] = { ANTLR3_UINT64_LIT(0x0000000000100000) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr255 = { FOLLOW_expr_in_expr255_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_20_in_expr257 */ +static ANTLR3_BITWORD FOLLOW_20_in_expr257_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_20_in_expr257 = { FOLLOW_20_in_expr257_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_term_in_expr278 */ +static ANTLR3_BITWORD FOLLOW_term_in_expr278_bits[] = { ANTLR3_UINT64_LIT(0x0000000000014812) }; +static ANTLR3_BITSET_LIST FOLLOW_term_in_expr278 = { FOLLOW_term_in_expr278_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_expr282 */ +static ANTLR3_BITWORD FOLLOW_set_in_expr282_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_set_in_expr282 = { FOLLOW_set_in_expr282_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr299 */ +static ANTLR3_BITWORD FOLLOW_expr_in_expr299_bits[] = { ANTLR3_UINT64_LIT(0x0000000000014812) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr299 = { FOLLOW_expr_in_expr299_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NUMBER_in_term311 */ +static ANTLR3_BITWORD FOLLOW_NUMBER_in_term311_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_NUMBER_in_term311 = { FOLLOW_NUMBER_in_term311_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_VARIABLE_in_term320 */ +static ANTLR3_BITWORD FOLLOW_VARIABLE_in_term320_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_VARIABLE_in_term320 = { FOLLOW_VARIABLE_in_term320_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_SUB_in_term329 */ +static ANTLR3_BITWORD FOLLOW_SUB_in_term329_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_SUB_in_term329 = { FOLLOW_SUB_in_term329_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_term_in_term332 */ +static ANTLR3_BITWORD FOLLOW_term_in_term332_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_term_in_term332 = { FOLLOW_term_in_term332_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_19_in_term341 */ +static ANTLR3_BITWORD FOLLOW_19_in_term341_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_19_in_term341 = { FOLLOW_19_in_term341_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_term344 */ +static ANTLR3_BITWORD FOLLOW_expr_in_term344_bits[] = { ANTLR3_UINT64_LIT(0x0000000000100000) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_term344 = { FOLLOW_expr_in_term344_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_20_in_term346 */ +static ANTLR3_BITWORD FOLLOW_20_in_term346_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_20_in_term346 = { FOLLOW_20_in_term346_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_19_in_synpred8_EquationSystem245 */ +static ANTLR3_BITWORD FOLLOW_19_in_synpred8_EquationSystem245_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_19_in_synpred8_EquationSystem245 = { FOLLOW_19_in_synpred8_EquationSystem245_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_synpred8_EquationSystem247 */ +static ANTLR3_BITWORD FOLLOW_expr_in_synpred8_EquationSystem247_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000040) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_synpred8_EquationSystem247 = { FOLLOW_expr_in_synpred8_EquationSystem247_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_GREATER_EQUAL_in_synpred8_EquationSystem249 */ +static ANTLR3_BITWORD FOLLOW_GREATER_EQUAL_in_synpred8_EquationSystem249_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_GREATER_EQUAL_in_synpred8_EquationSystem249 = { FOLLOW_GREATER_EQUAL_in_synpred8_EquationSystem249_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_synpred8_EquationSystem251 */ +static ANTLR3_BITWORD FOLLOW_expr_in_synpred8_EquationSystem251_bits[] = { ANTLR3_UINT64_LIT(0x0000000000008000) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_synpred8_EquationSystem251 = { FOLLOW_expr_in_synpred8_EquationSystem251_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_QUESTION_MARK_in_synpred8_EquationSystem253 */ +static ANTLR3_BITWORD FOLLOW_QUESTION_MARK_in_synpred8_EquationSystem253_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_QUESTION_MARK_in_synpred8_EquationSystem253 = { FOLLOW_QUESTION_MARK_in_synpred8_EquationSystem253_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_synpred8_EquationSystem255 */ +static ANTLR3_BITWORD FOLLOW_expr_in_synpred8_EquationSystem255_bits[] = { ANTLR3_UINT64_LIT(0x0000000000100000) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_synpred8_EquationSystem255 = { FOLLOW_expr_in_synpred8_EquationSystem255_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_20_in_synpred8_EquationSystem257 */ +static ANTLR3_BITWORD FOLLOW_20_in_synpred8_EquationSystem257_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_20_in_synpred8_EquationSystem257 = { FOLLOW_20_in_synpred8_EquationSystem257_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_synpred12_EquationSystem282 */ +static ANTLR3_BITWORD FOLLOW_set_in_synpred12_EquationSystem282_bits[] = { ANTLR3_UINT64_LIT(0x00000000000B2000) }; +static ANTLR3_BITSET_LIST FOLLOW_set_in_synpred12_EquationSystem282 = { FOLLOW_set_in_synpred12_EquationSystem282_bits, 1 }; +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_synpred12_EquationSystem299 */ +static ANTLR3_BITWORD FOLLOW_expr_in_synpred12_EquationSystem299_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) }; +static ANTLR3_BITSET_LIST FOLLOW_expr_in_synpred12_EquationSystem299 = { FOLLOW_expr_in_synpred12_EquationSystem299_bits, 1 }; + + + +/* ========================================================================= + * DFA tables for the parser + */ +/** Static dfa state tables for Cyclic dfa: + * ()* loopback of 22:28: ( ( NEWLINE !)+ equation )* + */ +static const ANTLR3_INT32 dfa2_eot[4] = + { + -1, -1, -1, -1 + }; +static const ANTLR3_INT32 dfa2_eof[4] = + { + 2, 2, -1, -1 + }; +static const ANTLR3_INT32 dfa2_min[4] = + { + 12, 12, -1, -1 + }; +static const ANTLR3_INT32 dfa2_max[4] = + { + 12, 17, -1, -1 + }; +static const ANTLR3_INT32 dfa2_accept[4] = + { + -1, -1, 2, 1 + }; +static const ANTLR3_INT32 dfa2_special[4] = + { + -1, -1, -1, -1 + }; + +/** Used when there is no transition table entry for a particular state */ +#define dfa2_T_empty NULL + +static const ANTLR3_INT32 dfa2_T0[] = + { + 1 + }; + +static const ANTLR3_INT32 dfa2_T1[] = + { + 1, -1, -1, -1, -1, 3 + }; + + +/* Transition tables are a table of sub tables, with some tables + * reused for efficiency. + */ +static const ANTLR3_INT32 * const dfa2_transitions[] = +{ + dfa2_T0, dfa2_T1, NULL, NULL +}; + + +/* Declare tracking structure for Cyclic DFA 2 + */ +static +ANTLR3_CYCLIC_DFA cdfa2 + = { + 2, /* Decision number of this dfa */ + /* Which decision this represents: */ + (const pANTLR3_UCHAR)"()* loopback of 22:28: ( ( NEWLINE !)+ equation )*", + (CDFA_SPECIAL_FUNC) antlr3dfaspecialStateTransition, /* Default special state transition function */ + + antlr3dfaspecialTransition, /* DFA specialTransition is currently just a default function in the runtime */ + antlr3dfapredict, /* DFA simulator function is in the runtime */ + dfa2_eot, /* EOT table */ + dfa2_eof, /* EOF table */ + dfa2_min, /* Minimum tokens for each state */ + dfa2_max, /* Maximum tokens for each state */ + dfa2_accept, /* Accept table */ + dfa2_special, /* Special transition states */ + dfa2_transitions /* Table of transition tables */ + + }; +/* End of Cyclic DFA 2 + * --------------------- + */ +/* ========================================================================= + * End of DFA tables for the parser + */ + +/* ============================================== + * Parsing rules + */ +/** + * $ANTLR start equation_system + * EquationSystem.g:22:1: equation_system : equation ( ( NEWLINE !)+ equation )* ( NEWLINE !)* ; + */ +static EquationSystemParser_equation_system_return +equation_system(pEquationSystemParser ctx) +{ + EquationSystemParser_equation_system_return retval; + + + pANTLR3_BASE_TREE root_0; + + pANTLR3_COMMON_TOKEN NEWLINE2; + pANTLR3_COMMON_TOKEN NEWLINE4; + EquationSystemParser_equation_return equation1; + #undef RETURN_TYPE_equation1 + #define RETURN_TYPE_equation1 EquationSystemParser_equation_return + + EquationSystemParser_equation_return equation3; + #undef RETURN_TYPE_equation3 + #define RETURN_TYPE_equation3 EquationSystemParser_equation_return + + pANTLR3_BASE_TREE NEWLINE2_tree; + pANTLR3_BASE_TREE NEWLINE4_tree; + + /* Initialize rule variables + */ + + root_0 = NULL; + + NEWLINE2 = NULL; + NEWLINE4 = NULL; + equation1.tree = NULL; + + equation3.tree = NULL; + retval.start = LT(1); retval.stop = retval.start; + + + NEWLINE2_tree = NULL; + NEWLINE4_tree = NULL; + + + retval.tree = NULL; + + { + // EquationSystem.g:22:17: ( equation ( ( NEWLINE !)+ equation )* ( NEWLINE !)* ) + // EquationSystem.g:22:19: equation ( ( NEWLINE !)+ equation )* ( NEWLINE !)* + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + FOLLOWPUSH(FOLLOW_equation_in_equation_system141); + equation1=equation(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleequation_systemEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, equation1.tree); + + // EquationSystem.g:22:28: ( ( NEWLINE !)+ equation )* + + for (;;) + { + int alt2=2; + alt2 = cdfa2.predict(ctx, RECOGNIZER, ISTREAM, &cdfa2); + if (HASEXCEPTION()) + { + goto ruleequation_systemEx; + } + if (HASFAILED()) + { + return retval; + } + + switch (alt2) + { + case 1: + // EquationSystem.g:22:30: ( NEWLINE !)+ equation + { + // EquationSystem.g:22:37: ( NEWLINE !)+ + { + int cnt1=0; + + for (;;) + { + int alt1=2; + switch ( LA(1) ) + { + case NEWLINE: + { + alt1=1; + } + break; + + } + + switch (alt1) + { + case 1: + // EquationSystem.g:22:37: NEWLINE ! + { + NEWLINE2 = (pANTLR3_COMMON_TOKEN) MATCHT(NEWLINE, &FOLLOW_NEWLINE_in_equation_system145); + if (HASEXCEPTION()) + { + goto ruleequation_systemEx; + } + if (HASFAILED()) + { + return retval; + } + + + } + break; + + default: + + if ( cnt1 >= 1 ) + { + goto loop1; + } + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + /* mismatchedSetEx() + */ + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME; + + + goto ruleequation_systemEx; + } + cnt1++; + } + loop1: ; /* Jump to here if this rule does not match */ + } + + FOLLOWPUSH(FOLLOW_equation_in_equation_system150); + equation3=equation(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleequation_systemEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, equation3.tree); + + } + break; + + default: + goto loop2; /* break out of the loop */ + break; + } + } + loop2: ; /* Jump out to here if this rule does not match */ + + + // EquationSystem.g:22:54: ( NEWLINE !)* + + for (;;) + { + int alt3=2; + switch ( LA(1) ) + { + case NEWLINE: + { + alt3=1; + } + break; + + } + + switch (alt3) + { + case 1: + // EquationSystem.g:22:55: NEWLINE ! + { + NEWLINE4 = (pANTLR3_COMMON_TOKEN) MATCHT(NEWLINE, &FOLLOW_NEWLINE_in_equation_system157); + if (HASEXCEPTION()) + { + goto ruleequation_systemEx; + } + if (HASFAILED()) + { + return retval; + } + + + } + break; + + default: + goto loop3; /* break out of the loop */ + break; + } + } + loop3: ; /* Jump out to here if this rule does not match */ + + + } + + } + + // This is where rules clean up and exit + // + goto ruleequation_systemEx; /* Prevent compiler warnings */ + ruleequation_systemEx: ; + retval.stop = LT(-1); + + + if ( BACKTRACKING==0 ) + { + + 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 equation_system */ + +/** + * $ANTLR start equation + * EquationSystem.g:23:1: equation : VARIABLE '=' ! maxExpr ; + */ +static EquationSystemParser_equation_return +equation(pEquationSystemParser ctx) +{ + EquationSystemParser_equation_return retval; + + + pANTLR3_BASE_TREE root_0; + + pANTLR3_COMMON_TOKEN VARIABLE5; + pANTLR3_COMMON_TOKEN char_literal6; + EquationSystemParser_maxExpr_return maxExpr7; + #undef RETURN_TYPE_maxExpr7 + #define RETURN_TYPE_maxExpr7 EquationSystemParser_maxExpr_return + + pANTLR3_BASE_TREE VARIABLE5_tree; + pANTLR3_BASE_TREE char_literal6_tree; + + /* Initialize rule variables + */ + + root_0 = NULL; + + VARIABLE5 = NULL; + char_literal6 = NULL; + maxExpr7.tree = NULL; + retval.start = LT(1); retval.stop = retval.start; + + + VARIABLE5_tree = NULL; + char_literal6_tree = NULL; + + + retval.tree = NULL; + + { + // EquationSystem.g:23:10: ( VARIABLE '=' ! maxExpr ) + // EquationSystem.g:23:12: VARIABLE '=' ! maxExpr + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + VARIABLE5 = (pANTLR3_COMMON_TOKEN) MATCHT(VARIABLE, &FOLLOW_VARIABLE_in_equation168); + if (HASEXCEPTION()) + { + goto ruleequationEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { + VARIABLE5_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, VARIABLE5)); + ADAPTOR->addChild(ADAPTOR, root_0, VARIABLE5_tree); + } + + char_literal6 = (pANTLR3_COMMON_TOKEN) MATCHT(22, &FOLLOW_22_in_equation170); + if (HASEXCEPTION()) + { + goto ruleequationEx; + } + if (HASFAILED()) + { + return retval; + } + + + FOLLOWPUSH(FOLLOW_maxExpr_in_equation173); + maxExpr7=maxExpr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleequationEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, maxExpr7.tree); + + } + + } + + // This is where rules clean up and exit + // + goto ruleequationEx; /* Prevent compiler warnings */ + ruleequationEx: ; + retval.stop = LT(-1); + + + if ( BACKTRACKING==0 ) + { + + 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 equation */ + +/** + * $ANTLR start maxExpr + * EquationSystem.g:25:1: maxExpr : ( MAXIMUM ^ '(' ! minExpr ( ',' ! minExpr )* ')' !| minExpr ); + */ +static EquationSystemParser_maxExpr_return +maxExpr(pEquationSystemParser ctx) +{ + EquationSystemParser_maxExpr_return retval; + + + pANTLR3_BASE_TREE root_0; + + pANTLR3_COMMON_TOKEN MAXIMUM8; + pANTLR3_COMMON_TOKEN char_literal9; + pANTLR3_COMMON_TOKEN char_literal11; + pANTLR3_COMMON_TOKEN char_literal13; + EquationSystemParser_minExpr_return minExpr10; + #undef RETURN_TYPE_minExpr10 + #define RETURN_TYPE_minExpr10 EquationSystemParser_minExpr_return + + EquationSystemParser_minExpr_return minExpr12; + #undef RETURN_TYPE_minExpr12 + #define RETURN_TYPE_minExpr12 EquationSystemParser_minExpr_return + + EquationSystemParser_minExpr_return minExpr14; + #undef RETURN_TYPE_minExpr14 + #define RETURN_TYPE_minExpr14 EquationSystemParser_minExpr_return + + pANTLR3_BASE_TREE MAXIMUM8_tree; + pANTLR3_BASE_TREE char_literal9_tree; + pANTLR3_BASE_TREE char_literal11_tree; + pANTLR3_BASE_TREE char_literal13_tree; + + /* Initialize rule variables + */ + + root_0 = NULL; + + MAXIMUM8 = NULL; + char_literal9 = NULL; + char_literal11 = NULL; + char_literal13 = NULL; + minExpr10.tree = NULL; + + minExpr12.tree = NULL; + + minExpr14.tree = NULL; + retval.start = LT(1); retval.stop = retval.start; + + + MAXIMUM8_tree = NULL; + char_literal9_tree = NULL; + char_literal11_tree = NULL; + char_literal13_tree = NULL; + + + retval.tree = NULL; + + { + { + // EquationSystem.g:25:9: ( MAXIMUM ^ '(' ! minExpr ( ',' ! minExpr )* ')' !| minExpr ) + + ANTLR3_UINT32 alt5; + + alt5=2; + + switch ( LA(1) ) + { + case MAXIMUM: + { + alt5=1; + } + break; + case MINIMUM: + case NUMBER: + case SUB: + case VARIABLE: + case 19: + { + alt5=2; + } + break; + + default: + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + EXCEPTION->message = (void *)""; + EXCEPTION->decisionNum = 5; + EXCEPTION->state = 0; + + + goto rulemaxExprEx; + + } + + switch (alt5) + { + case 1: + // EquationSystem.g:25:11: MAXIMUM ^ '(' ! minExpr ( ',' ! minExpr )* ')' ! + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + MAXIMUM8 = (pANTLR3_COMMON_TOKEN) MATCHT(MAXIMUM, &FOLLOW_MAXIMUM_in_maxExpr182); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { + MAXIMUM8_tree = + (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, MAXIMUM8)) + ; + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, MAXIMUM8_tree, root_0)); + } + + char_literal9 = (pANTLR3_COMMON_TOKEN) MATCHT(19, &FOLLOW_19_in_maxExpr185); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + + FOLLOWPUSH(FOLLOW_minExpr_in_maxExpr188); + minExpr10=minExpr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, minExpr10.tree); + + // EquationSystem.g:25:33: ( ',' ! minExpr )* + + for (;;) + { + int alt4=2; + switch ( LA(1) ) + { + case 21: + { + alt4=1; + } + break; + + } + + switch (alt4) + { + case 1: + // EquationSystem.g:25:35: ',' ! minExpr + { + char_literal11 = (pANTLR3_COMMON_TOKEN) MATCHT(21, &FOLLOW_21_in_maxExpr192); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + + FOLLOWPUSH(FOLLOW_minExpr_in_maxExpr195); + minExpr12=minExpr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, minExpr12.tree); + + } + break; + + default: + goto loop4; /* break out of the loop */ + break; + } + } + loop4: ; /* Jump out to here if this rule does not match */ + + + char_literal13 = (pANTLR3_COMMON_TOKEN) MATCHT(20, &FOLLOW_20_in_maxExpr200); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + + } + break; + case 2: + // EquationSystem.g:25:58: minExpr + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + FOLLOWPUSH(FOLLOW_minExpr_in_maxExpr205); + minExpr14=minExpr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulemaxExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, minExpr14.tree); + + } + break; + + } + } + } + + // This is where rules clean up and exit + // + goto rulemaxExprEx; /* Prevent compiler warnings */ + rulemaxExprEx: ; + retval.stop = LT(-1); + + + if ( BACKTRACKING==0 ) + { + + 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 maxExpr */ + +/** + * $ANTLR start minExpr + * EquationSystem.g:26:1: minExpr : ( MINIMUM ^ '(' ! maxExpr ( ',' ! maxExpr )* ')' !| expr ); + */ +static EquationSystemParser_minExpr_return +minExpr(pEquationSystemParser ctx) +{ + EquationSystemParser_minExpr_return retval; + + + pANTLR3_BASE_TREE root_0; + + pANTLR3_COMMON_TOKEN MINIMUM15; + pANTLR3_COMMON_TOKEN char_literal16; + pANTLR3_COMMON_TOKEN char_literal18; + pANTLR3_COMMON_TOKEN char_literal20; + EquationSystemParser_maxExpr_return maxExpr17; + #undef RETURN_TYPE_maxExpr17 + #define RETURN_TYPE_maxExpr17 EquationSystemParser_maxExpr_return + + EquationSystemParser_maxExpr_return maxExpr19; + #undef RETURN_TYPE_maxExpr19 + #define RETURN_TYPE_maxExpr19 EquationSystemParser_maxExpr_return + + EquationSystemParser_expr_return expr21; + #undef RETURN_TYPE_expr21 + #define RETURN_TYPE_expr21 EquationSystemParser_expr_return + + pANTLR3_BASE_TREE MINIMUM15_tree; + pANTLR3_BASE_TREE char_literal16_tree; + pANTLR3_BASE_TREE char_literal18_tree; + pANTLR3_BASE_TREE char_literal20_tree; + + /* Initialize rule variables + */ + + root_0 = NULL; + + MINIMUM15 = NULL; + char_literal16 = NULL; + char_literal18 = NULL; + char_literal20 = NULL; + maxExpr17.tree = NULL; + + maxExpr19.tree = NULL; + + expr21.tree = NULL; + retval.start = LT(1); retval.stop = retval.start; + + + MINIMUM15_tree = NULL; + char_literal16_tree = NULL; + char_literal18_tree = NULL; + char_literal20_tree = NULL; + + + retval.tree = NULL; + + { + { + // EquationSystem.g:26:9: ( MINIMUM ^ '(' ! maxExpr ( ',' ! maxExpr )* ')' !| expr ) + + ANTLR3_UINT32 alt7; + + alt7=2; + + switch ( LA(1) ) + { + case MINIMUM: + { + alt7=1; + } + break; + case NUMBER: + case SUB: + case VARIABLE: + case 19: + { + alt7=2; + } + break; + + default: + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + EXCEPTION->message = (void *)""; + EXCEPTION->decisionNum = 7; + EXCEPTION->state = 0; + + + goto ruleminExprEx; + + } + + switch (alt7) + { + case 1: + // EquationSystem.g:26:11: MINIMUM ^ '(' ! maxExpr ( ',' ! maxExpr )* ')' ! + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + MINIMUM15 = (pANTLR3_COMMON_TOKEN) MATCHT(MINIMUM, &FOLLOW_MINIMUM_in_minExpr213); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { + MINIMUM15_tree = + (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, MINIMUM15)) + ; + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, MINIMUM15_tree, root_0)); + } + + char_literal16 = (pANTLR3_COMMON_TOKEN) MATCHT(19, &FOLLOW_19_in_minExpr216); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + + FOLLOWPUSH(FOLLOW_maxExpr_in_minExpr219); + maxExpr17=maxExpr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, maxExpr17.tree); + + // EquationSystem.g:26:33: ( ',' ! maxExpr )* + + for (;;) + { + int alt6=2; + switch ( LA(1) ) + { + case 21: + { + alt6=1; + } + break; + + } + + switch (alt6) + { + case 1: + // EquationSystem.g:26:35: ',' ! maxExpr + { + char_literal18 = (pANTLR3_COMMON_TOKEN) MATCHT(21, &FOLLOW_21_in_minExpr223); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + + FOLLOWPUSH(FOLLOW_maxExpr_in_minExpr226); + maxExpr19=maxExpr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, maxExpr19.tree); + + } + break; + + default: + goto loop6; /* break out of the loop */ + break; + } + } + loop6: ; /* Jump out to here if this rule does not match */ + + + char_literal20 = (pANTLR3_COMMON_TOKEN) MATCHT(20, &FOLLOW_20_in_minExpr231); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + + } + break; + case 2: + // EquationSystem.g:26:58: expr + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + FOLLOWPUSH(FOLLOW_expr_in_minExpr236); + expr21=expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleminExprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, expr21.tree); + + } + break; + + } + } + } + + // This is where rules clean up and exit + // + goto ruleminExprEx; /* Prevent compiler warnings */ + ruleminExprEx: ; + retval.stop = LT(-1); + + + if ( BACKTRACKING==0 ) + { + + 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 minExpr */ + +/** + * $ANTLR start expr + * EquationSystem.g:28:1: expr : ( '(' expr GREATER_EQUAL expr QUESTION_MARK expr ')' -> ^( GUARD expr expr expr ) | term ( ( PLUS | MULT | SUB | COMMA ) ^ expr )* ); + */ +static EquationSystemParser_expr_return +expr(pEquationSystemParser ctx) +{ + EquationSystemParser_expr_return retval; + + + pANTLR3_BASE_TREE root_0; + + pANTLR3_COMMON_TOKEN char_literal22; + pANTLR3_COMMON_TOKEN GREATER_EQUAL24; + pANTLR3_COMMON_TOKEN QUESTION_MARK26; + pANTLR3_COMMON_TOKEN char_literal28; + pANTLR3_COMMON_TOKEN set30; + EquationSystemParser_expr_return expr23; + #undef RETURN_TYPE_expr23 + #define RETURN_TYPE_expr23 EquationSystemParser_expr_return + + EquationSystemParser_expr_return expr25; + #undef RETURN_TYPE_expr25 + #define RETURN_TYPE_expr25 EquationSystemParser_expr_return + + EquationSystemParser_expr_return expr27; + #undef RETURN_TYPE_expr27 + #define RETURN_TYPE_expr27 EquationSystemParser_expr_return + + EquationSystemParser_term_return term29; + #undef RETURN_TYPE_term29 + #define RETURN_TYPE_term29 EquationSystemParser_term_return + + EquationSystemParser_expr_return expr31; + #undef RETURN_TYPE_expr31 + #define RETURN_TYPE_expr31 EquationSystemParser_expr_return + + pANTLR3_BASE_TREE char_literal22_tree; + pANTLR3_BASE_TREE GREATER_EQUAL24_tree; + pANTLR3_BASE_TREE QUESTION_MARK26_tree; + pANTLR3_BASE_TREE char_literal28_tree; + pANTLR3_BASE_TREE set30_tree; + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_20; + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_19; + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_GREATER_EQUAL; + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_QUESTION_MARK; + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_expr; + /* Initialize rule variables + */ + + root_0 = NULL; + + char_literal22 = NULL; + GREATER_EQUAL24 = NULL; + QUESTION_MARK26 = NULL; + char_literal28 = NULL; + set30 = NULL; + expr23.tree = NULL; + + expr25.tree = NULL; + + expr27.tree = NULL; + + term29.tree = NULL; + + expr31.tree = NULL; + retval.start = LT(1); retval.stop = retval.start; + + + char_literal22_tree = NULL; + GREATER_EQUAL24_tree = NULL; + QUESTION_MARK26_tree = NULL; + char_literal28_tree = NULL; + set30_tree = NULL; + + stream_20 = NULL; + #define CREATE_stream_20 if (stream_20 == NULL) {stream_20 = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token 20"); } + stream_19 = NULL; + #define CREATE_stream_19 if (stream_19 == NULL) {stream_19 = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token 19"); } + stream_GREATER_EQUAL = NULL; + #define CREATE_stream_GREATER_EQUAL if (stream_GREATER_EQUAL == NULL) {stream_GREATER_EQUAL = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token GREATER_EQUAL"); } + stream_QUESTION_MARK = NULL; + #define CREATE_stream_QUESTION_MARK if (stream_QUESTION_MARK == NULL) {stream_QUESTION_MARK = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token QUESTION_MARK"); } + stream_expr = NULL; + #define CREATE_stream_expr if (stream_expr == NULL) {stream_expr = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule expr"); } + + retval.tree = NULL; + + { + { + // EquationSystem.g:28:6: ( '(' expr GREATER_EQUAL expr QUESTION_MARK expr ')' -> ^( GUARD expr expr expr ) | term ( ( PLUS | MULT | SUB | COMMA ) ^ expr )* ) + + ANTLR3_UINT32 alt9; + + alt9=2; + + switch ( LA(1) ) + { + case 19: + { + { + int LA9_1 = LA(2); + if ( (synpred8_EquationSystem(ctx))) + { + alt9=1; + } + else if ( (ANTLR3_TRUE)) + { + alt9=2; + } + else + { + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + EXCEPTION->message = (void *)""; + EXCEPTION->decisionNum = 9; + EXCEPTION->state = 1; + + + goto ruleexprEx; + + } + } + } + break; + case NUMBER: + case SUB: + case VARIABLE: + { + alt9=2; + } + break; + + default: + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + EXCEPTION->message = (void *)""; + EXCEPTION->decisionNum = 9; + EXCEPTION->state = 0; + + + goto ruleexprEx; + + } + + switch (alt9) + { + case 1: + // EquationSystem.g:28:8: '(' expr GREATER_EQUAL expr QUESTION_MARK expr ')' + { + char_literal22 = (pANTLR3_COMMON_TOKEN) MATCHT(19, &FOLLOW_19_in_expr245); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_19; stream_19->add(stream_19, char_literal22, NULL); } + + + FOLLOWPUSH(FOLLOW_expr_in_expr247); + expr23=expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_expr; stream_expr->add(stream_expr, expr23.tree, NULL); } + + GREATER_EQUAL24 = (pANTLR3_COMMON_TOKEN) MATCHT(GREATER_EQUAL, &FOLLOW_GREATER_EQUAL_in_expr249); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_GREATER_EQUAL; stream_GREATER_EQUAL->add(stream_GREATER_EQUAL, GREATER_EQUAL24, NULL); } + + + FOLLOWPUSH(FOLLOW_expr_in_expr251); + expr25=expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_expr; stream_expr->add(stream_expr, expr25.tree, NULL); } + + QUESTION_MARK26 = (pANTLR3_COMMON_TOKEN) MATCHT(QUESTION_MARK, &FOLLOW_QUESTION_MARK_in_expr253); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_QUESTION_MARK; stream_QUESTION_MARK->add(stream_QUESTION_MARK, QUESTION_MARK26, NULL); } + + + FOLLOWPUSH(FOLLOW_expr_in_expr255); + expr27=expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_expr; stream_expr->add(stream_expr, expr27.tree, NULL); } + + char_literal28 = (pANTLR3_COMMON_TOKEN) MATCHT(20, &FOLLOW_20_in_expr257); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { CREATE_stream_20; stream_20->add(stream_20, char_literal28, NULL); } + + + /* AST REWRITE + * elements : expr, expr, expr + * token labels : + * rule labels : retval + * token list labels : + * rule list labels : + */ + if ( BACKTRACKING==0 ) + + { + 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; + // 28:59: -> ^( GUARD expr expr expr ) + { + // EquationSystem.g:28:62: ^( GUARD expr expr expr ) + { + 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, GUARD, (pANTLR3_UINT8)"GUARD") + , root_1)); + + ADAPTOR->addChild(ADAPTOR, root_1, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr)); + + ADAPTOR->addChild(ADAPTOR, root_1, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr)); + + ADAPTOR->addChild(ADAPTOR, root_1, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr)); + + ADAPTOR->addChild(ADAPTOR, root_0, root_1); + } + + } + + + retval.tree = root_0; // set result root + if (stream_retval != NULL) stream_retval->free(stream_retval); + + + } + } + break; + case 2: + // EquationSystem.g:29:8: term ( ( PLUS | MULT | SUB | COMMA ) ^ expr )* + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + FOLLOWPUSH(FOLLOW_term_in_expr278); + term29=term(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, term29.tree); + + // EquationSystem.g:29:13: ( ( PLUS | MULT | SUB | COMMA ) ^ expr )* + + for (;;) + { + int alt8=2; + switch ( LA(1) ) + { + case COMMA: + case MULT: + case PLUS: + case SUB: + { + { + /* dfaLoopbackState(k,edges,eotPredictsAlt,description,stateNumber,semPredState) + */ + int LA8_2 = LA(2); + if ( (synpred12_EquationSystem(ctx))) + { + alt8=1; + } + + } + } + break; + + } + + switch (alt8) + { + case 1: + // EquationSystem.g:29:15: ( PLUS | MULT | SUB | COMMA ) ^ expr + { + set30=(pANTLR3_COMMON_TOKEN)LT(1); + + set30=(pANTLR3_COMMON_TOKEN)LT(1); + + if ( LA(1) == COMMA || LA(1) == MULT || LA(1) == PLUS || LA(1) == SUB ) + { + CONSUME(); + if ( BACKTRACKING==0 ) root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, + (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set30)) + , root_0)); + PERRORRECOVERY=ANTLR3_FALSE; + FAILEDFLAG=ANTLR3_FALSE; + + } + else + { + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + EXCEPTION->expectingSet = NULL; + + goto ruleexprEx; + } + + + FOLLOWPUSH(FOLLOW_expr_in_expr299); + expr31=expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruleexprEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, expr31.tree); + + } + break; + + default: + goto loop8; /* break out of the loop */ + break; + } + } + loop8: ; /* Jump out to here if this rule does not match */ + + + } + break; + + } + } + } + + // This is where rules clean up and exit + // + goto ruleexprEx; /* Prevent compiler warnings */ + ruleexprEx: ; + retval.stop = LT(-1); + + + if ( BACKTRACKING==0 ) + { + + 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_20 != NULL) stream_20->free(stream_20); + if (stream_19 != NULL) stream_19->free(stream_19); + if (stream_GREATER_EQUAL != NULL) stream_GREATER_EQUAL->free(stream_GREATER_EQUAL); + if (stream_QUESTION_MARK != NULL) stream_QUESTION_MARK->free(stream_QUESTION_MARK); + if (stream_expr != NULL) stream_expr->free(stream_expr); + } + + + if (HASEXCEPTION()) + { + PREPORTERROR(); + PRECOVER(); + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION)); + } + return retval; +} +/* $ANTLR end expr */ + +/** + * $ANTLR start term + * EquationSystem.g:31:1: term : ( NUMBER | VARIABLE | '-' ^ term | '(' ! expr ')' !); + */ +static EquationSystemParser_term_return +term(pEquationSystemParser ctx) +{ + EquationSystemParser_term_return retval; + + + pANTLR3_BASE_TREE root_0; + + pANTLR3_COMMON_TOKEN NUMBER32; + pANTLR3_COMMON_TOKEN VARIABLE33; + pANTLR3_COMMON_TOKEN char_literal34; + pANTLR3_COMMON_TOKEN char_literal36; + pANTLR3_COMMON_TOKEN char_literal38; + EquationSystemParser_term_return term35; + #undef RETURN_TYPE_term35 + #define RETURN_TYPE_term35 EquationSystemParser_term_return + + EquationSystemParser_expr_return expr37; + #undef RETURN_TYPE_expr37 + #define RETURN_TYPE_expr37 EquationSystemParser_expr_return + + pANTLR3_BASE_TREE NUMBER32_tree; + pANTLR3_BASE_TREE VARIABLE33_tree; + pANTLR3_BASE_TREE char_literal34_tree; + pANTLR3_BASE_TREE char_literal36_tree; + pANTLR3_BASE_TREE char_literal38_tree; + + /* Initialize rule variables + */ + + root_0 = NULL; + + NUMBER32 = NULL; + VARIABLE33 = NULL; + char_literal34 = NULL; + char_literal36 = NULL; + char_literal38 = NULL; + term35.tree = NULL; + + expr37.tree = NULL; + retval.start = LT(1); retval.stop = retval.start; + + + NUMBER32_tree = NULL; + VARIABLE33_tree = NULL; + char_literal34_tree = NULL; + char_literal36_tree = NULL; + char_literal38_tree = NULL; + + + retval.tree = NULL; + + { + { + // EquationSystem.g:31:6: ( NUMBER | VARIABLE | '-' ^ term | '(' ! expr ')' !) + + ANTLR3_UINT32 alt10; + + alt10=4; + + switch ( LA(1) ) + { + case NUMBER: + { + alt10=1; + } + break; + case VARIABLE: + { + alt10=2; + } + break; + case SUB: + { + alt10=3; + } + break; + case 19: + { + alt10=4; + } + break; + + default: + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return retval; + } + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + EXCEPTION->message = (void *)""; + EXCEPTION->decisionNum = 10; + EXCEPTION->state = 0; + + + goto ruletermEx; + + } + + switch (alt10) + { + case 1: + // EquationSystem.g:31:8: NUMBER + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + NUMBER32 = (pANTLR3_COMMON_TOKEN) MATCHT(NUMBER, &FOLLOW_NUMBER_in_term311); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { + NUMBER32_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, NUMBER32)); + ADAPTOR->addChild(ADAPTOR, root_0, NUMBER32_tree); + } + + } + break; + case 2: + // EquationSystem.g:32:8: VARIABLE + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + VARIABLE33 = (pANTLR3_COMMON_TOKEN) MATCHT(VARIABLE, &FOLLOW_VARIABLE_in_term320); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { + VARIABLE33_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, VARIABLE33)); + ADAPTOR->addChild(ADAPTOR, root_0, VARIABLE33_tree); + } + + } + break; + case 3: + // EquationSystem.g:33:8: '-' ^ term + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + char_literal34 = (pANTLR3_COMMON_TOKEN) MATCHT(SUB, &FOLLOW_SUB_in_term329); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) { + char_literal34_tree = + (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, char_literal34)) + ; + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, char_literal34_tree, root_0)); + } + + FOLLOWPUSH(FOLLOW_term_in_term332); + term35=term(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, term35.tree); + + } + break; + case 4: + // EquationSystem.g:34:8: '(' ! expr ')' ! + { + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR)); + + + char_literal36 = (pANTLR3_COMMON_TOKEN) MATCHT(19, &FOLLOW_19_in_term341); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + + FOLLOWPUSH(FOLLOW_expr_in_term344); + expr37=expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + if ( BACKTRACKING==0 ) ADAPTOR->addChild(ADAPTOR, root_0, expr37.tree); + + char_literal38 = (pANTLR3_COMMON_TOKEN) MATCHT(20, &FOLLOW_20_in_term346); + if (HASEXCEPTION()) + { + goto ruletermEx; + } + if (HASFAILED()) + { + return retval; + } + + + } + break; + + } + } + } + + // This is where rules clean up and exit + // + goto ruletermEx; /* Prevent compiler warnings */ + ruletermEx: ; + retval.stop = LT(-1); + + + if ( BACKTRACKING==0 ) + { + + 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 term */ + +// $ANTLR start synpred8_EquationSystem +static void synpred8_EquationSystem_fragment(pEquationSystemParser ctx ) +{ + // EquationSystem.g:28:8: ( '(' expr GREATER_EQUAL expr QUESTION_MARK expr ')' ) + // EquationSystem.g:28:8: '(' expr GREATER_EQUAL expr QUESTION_MARK expr ')' + { + MATCHT(19, &FOLLOW_19_in_synpred8_EquationSystem245); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + FOLLOWPUSH(FOLLOW_expr_in_synpred8_EquationSystem247); + expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + MATCHT(GREATER_EQUAL, &FOLLOW_GREATER_EQUAL_in_synpred8_EquationSystem249); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + FOLLOWPUSH(FOLLOW_expr_in_synpred8_EquationSystem251); + expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + MATCHT(QUESTION_MARK, &FOLLOW_QUESTION_MARK_in_synpred8_EquationSystem253); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + FOLLOWPUSH(FOLLOW_expr_in_synpred8_EquationSystem255); + expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + MATCHT(20, &FOLLOW_20_in_synpred8_EquationSystem257); + if (HASEXCEPTION()) + { + goto rulesynpred8_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + } + +// This is where rules clean up and exit +// +goto rulesynpred8_EquationSystemEx; /* Prevent compiler warnings */ +rulesynpred8_EquationSystemEx: ; + +} +// $ANTLR end synpred8_EquationSystem + +// $ANTLR start synpred12_EquationSystem +static void synpred12_EquationSystem_fragment(pEquationSystemParser ctx ) +{ + // EquationSystem.g:29:15: ( ( PLUS | MULT | SUB | COMMA ) expr ) + // EquationSystem.g:29:15: ( PLUS | MULT | SUB | COMMA ) expr + { + if ( LA(1) == COMMA || LA(1) == MULT || LA(1) == PLUS || LA(1) == SUB ) + { + CONSUME(); + PERRORRECOVERY=ANTLR3_FALSE; + FAILEDFLAG=ANTLR3_FALSE; + + } + else + { + if (BACKTRACKING>0) + { + FAILEDFLAG = ANTLR3_TRUE; + return ; + } + + CONSTRUCTEX(); + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION; + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME; + EXCEPTION->expectingSet = NULL; + + goto rulesynpred12_EquationSystemEx; + } + + + FOLLOWPUSH(FOLLOW_expr_in_synpred12_EquationSystem299); + expr(ctx); + + FOLLOWPOP(); + if (HASEXCEPTION()) + { + goto rulesynpred12_EquationSystemEx; + } + if (HASFAILED()) + { + return ; + } + + + } + +// This is where rules clean up and exit +// +goto rulesynpred12_EquationSystemEx; /* Prevent compiler warnings */ +rulesynpred12_EquationSystemEx: ; + +} +// $ANTLR end synpred12_EquationSystem +/* End of parsing rules + * ============================================== + */ + +/* ============================================== + * Syntactic predicates + */ +static ANTLR3_BOOLEAN synpred12_EquationSystem(pEquationSystemParser ctx) +{ + ANTLR3_MARKER start; + ANTLR3_BOOLEAN success; + + BACKTRACKING++; + start = MARK(); + synpred12_EquationSystem_fragment(ctx); // can never throw exception + success = !(FAILEDFLAG); + REWIND(start); + BACKTRACKING--; + FAILEDFLAG = ANTLR3_FALSE; + return success; +} +static ANTLR3_BOOLEAN synpred8_EquationSystem(pEquationSystemParser ctx) +{ + ANTLR3_MARKER start; + ANTLR3_BOOLEAN success; + + BACKTRACKING++; + start = MARK(); + synpred8_EquationSystem_fragment(ctx); // can never throw exception + success = !(FAILEDFLAG); + REWIND(start); + BACKTRACKING--; + FAILEDFLAG = ANTLR3_FALSE; + return success; +} + +/* End of syntactic predicates + * ============================================== + */ + + + + + + +/* End of code + * ============================================================================= + */ diff --git a/impl/parser/EquationSystemParser.h b/impl/parser/EquationSystemParser.h new file mode 100644 index 0000000..0f24f97 --- /dev/null +++ b/impl/parser/EquationSystemParser.h @@ -0,0 +1,324 @@ +/** \file + * This C header file was generated by $ANTLR version 3.4 + * + * - From the grammar source file : EquationSystem.g + * - On : 2012-07-12 15:47:50 + * - for the parser : EquationSystemParserParser + * + * Editing it, at least manually, is not wise. + * + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws. + * + * + * The parser +EquationSystemParser + +has the callable functions (rules) shown below, + * which will invoke the code for the associated rule in the source grammar + * assuming that the input stream is pointing to a token/text stream that could begin + * this rule. + * + * For instance if you call the first (topmost) rule in a parser grammar, you will + * get the results of a full parse, but calling a rule half way through the grammar will + * allow you to pass part of a full token stream to the parser, such as for syntax checking + * in editors and so on. + * + * The parser entry points are called indirectly (by function pointer to function) via + * a parser context typedef pEquationSystemParser, which is returned from a call to EquationSystemParserNew(). + * + * The methods in pEquationSystemParser are as follows: + * + * - + EquationSystemParser_equation_system_return + pEquationSystemParser->equation_system(pEquationSystemParser) + * - + EquationSystemParser_equation_return + pEquationSystemParser->equation(pEquationSystemParser) + * - + EquationSystemParser_maxExpr_return + pEquationSystemParser->maxExpr(pEquationSystemParser) + * - + EquationSystemParser_minExpr_return + pEquationSystemParser->minExpr(pEquationSystemParser) + * - + EquationSystemParser_expr_return + pEquationSystemParser->expr(pEquationSystemParser) + * - + EquationSystemParser_term_return + pEquationSystemParser->term(pEquationSystemParser) + * + * + * + * The return type for any particular rule is of course determined by the source + * grammar file. + */ +// [The "BSD license"] +// 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. + +#ifndef _EquationSystemParser_H +#define _EquationSystemParser_H +/* ============================================================================= + * Standard antlr3 C runtime definitions + */ +#include <antlr3.h> + +/* End of standard antlr 3 runtime definitions + * ============================================================================= + */ + +#ifdef __cplusplus +extern "C" { +#endif + +// Forward declare the context typedef so that we can use it before it is +// properly defined. Delegators and delegates (from import statements) are +// interdependent and their context structures contain pointers to each other +// C only allows such things to be declared if you pre-declare the typedef. +// +typedef struct EquationSystemParser_Ctx_struct EquationSystemParser, * pEquationSystemParser; + + + +#ifdef ANTLR3_WINDOWS +// Disable: Unreferenced parameter, - Rules with parameters that are not used +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually) +// initialized but unused variable - tree rewrite variables declared but not needed +// Unreferenced local variable - lexer rule declares but does not always use _type +// potentially unitialized variable used - retval always returned from a rule +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns +// +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is +// usually generated when a parser rule is given a parameter that it does not use. Mostly though +// this is a matter of orthogonality hence I disable that one. +// +#pragma warning( disable : 4100 ) +#pragma warning( disable : 4101 ) +#pragma warning( disable : 4127 ) +#pragma warning( disable : 4189 ) +#pragma warning( disable : 4505 ) +#pragma warning( disable : 4701 ) +#endif + +/* ======================== + * BACKTRACKING IS ENABLED + * ======================== + */ + +typedef struct EquationSystemParser_equation_system_return_struct +{ + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees + */ + pANTLR3_COMMON_TOKEN start; + pANTLR3_COMMON_TOKEN stop; + pANTLR3_BASE_TREE tree; + +} + EquationSystemParser_equation_system_return; + + + +typedef struct EquationSystemParser_equation_return_struct +{ + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees + */ + pANTLR3_COMMON_TOKEN start; + pANTLR3_COMMON_TOKEN stop; + pANTLR3_BASE_TREE tree; + +} + EquationSystemParser_equation_return; + + + +typedef struct EquationSystemParser_maxExpr_return_struct +{ + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees + */ + pANTLR3_COMMON_TOKEN start; + pANTLR3_COMMON_TOKEN stop; + pANTLR3_BASE_TREE tree; + +} + EquationSystemParser_maxExpr_return; + + + +typedef struct EquationSystemParser_minExpr_return_struct +{ + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees + */ + pANTLR3_COMMON_TOKEN start; + pANTLR3_COMMON_TOKEN stop; + pANTLR3_BASE_TREE tree; + +} + EquationSystemParser_minExpr_return; + + + +typedef struct EquationSystemParser_expr_return_struct +{ + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees + */ + pANTLR3_COMMON_TOKEN start; + pANTLR3_COMMON_TOKEN stop; + pANTLR3_BASE_TREE tree; + +} + EquationSystemParser_expr_return; + + + +typedef struct EquationSystemParser_term_return_struct +{ + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees + */ + pANTLR3_COMMON_TOKEN start; + pANTLR3_COMMON_TOKEN stop; + pANTLR3_BASE_TREE tree; + +} + EquationSystemParser_term_return; + + + + +/** Context tracking structure for +EquationSystemParser + + */ +struct EquationSystemParser_Ctx_struct +{ + /** Built in ANTLR3 context tracker contains all the generic elements + * required for context tracking. + */ + pANTLR3_PARSER pParser; + + EquationSystemParser_equation_system_return + (*equation_system) (struct EquationSystemParser_Ctx_struct * ctx); + + EquationSystemParser_equation_return + (*equation) (struct EquationSystemParser_Ctx_struct * ctx); + + EquationSystemParser_maxExpr_return + (*maxExpr) (struct EquationSystemParser_Ctx_struct * ctx); + + EquationSystemParser_minExpr_return + (*minExpr) (struct EquationSystemParser_Ctx_struct * ctx); + + EquationSystemParser_expr_return + (*expr) (struct EquationSystemParser_Ctx_struct * ctx); + + EquationSystemParser_term_return + (*term) (struct EquationSystemParser_Ctx_struct * ctx); + + ANTLR3_BOOLEAN + (*synpred8_EquationSystem) (struct EquationSystemParser_Ctx_struct * ctx); + + ANTLR3_BOOLEAN + (*synpred12_EquationSystem) (struct EquationSystemParser_Ctx_struct * ctx); + // Delegated rules + + const char * (*getGrammarFileName)(); + void (*reset) (struct EquationSystemParser_Ctx_struct * ctx); + void (*free) (struct EquationSystemParser_Ctx_struct * ctx); +/* @headerFile.members() */ +pANTLR3_BASE_TREE_ADAPTOR adaptor; +pANTLR3_VECTOR_FACTORY vectors; +/* End @headerFile.members() */ +}; + +// Function protoypes for the constructor functions that external translation units +// such as delegators and delegates may wish to call. +// +ANTLR3_API pEquationSystemParser EquationSystemParserNew ( +pANTLR3_COMMON_TOKEN_STREAM + instream); +ANTLR3_API pEquationSystemParser EquationSystemParserNewSSD ( +pANTLR3_COMMON_TOKEN_STREAM + instream, pANTLR3_RECOGNIZER_SHARED_STATE state); + +/** Symbolic definitions of all the tokens that the +parser + will work with. + * \{ + * + * Antlr will define EOF, but we can't use that as it it is too common in + * in C header files and that would be confusing. There is no way to filter this out at the moment + * so we just undef it here for now. That isn't the value we get back from C recognizers + * anyway. We are looking for ANTLR3_TOKEN_EOF. + */ +#ifdef EOF +#undef EOF +#endif +#ifdef Tokens +#undef Tokens +#endif +#define EOF -1 +#define T__19 19 +#define T__20 20 +#define T__21 21 +#define T__22 22 +#define COMMA 4 +#define DIGIT 5 +#define GREATER_EQUAL 6 +#define GUARD 7 +#define LETTER 8 +#define MAXIMUM 9 +#define MINIMUM 10 +#define MULT 11 +#define NEWLINE 12 +#define NUMBER 13 +#define PLUS 14 +#define QUESTION_MARK 15 +#define SUB 16 +#define VARIABLE 17 +#define WHITESPACE 18 +#ifdef EOF +#undef EOF +#define EOF ANTLR3_TOKEN_EOF +#endif + +#ifndef TOKENSOURCE +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource +#endif + +/* End of token definitions for EquationSystemParser + * ============================================================================= + */ +/** } */ + +#ifdef __cplusplus +} +#endif + +#endif + +/* END - Note:Keep extra line feed to satisfy UNIX systems */ diff --git a/impl/parser/EquationSystemParser.o b/impl/parser/EquationSystemParser.o Binary files differnew file mode 100644 index 0000000..2dcfc81 --- /dev/null +++ b/impl/parser/EquationSystemParser.o |