/** \file
 *  This C++ header file was generated by $ANTLR version 3.5.3-SNAPSHOT
 *
 *     -  From the grammar source file : PLSQLGuiLexer.g
 *     -                            On : 2018-06-18 13:08:12
 *     -                 for the lexer : PLSQLGuiLexerLexer
 *
 * Editing it, at least manually, is not wise.
 *
 * C++ language generator and runtime by Gokulakannan Somasundaram ( heavy lifting from C Run-time by Jim Idle )
 *
 *
 * The lexer PLSQLGuiLexer 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 "BSD license"]
// Copyright (c) 2005-2009 Gokulakannan Somasundaram. 
//
// 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	_PLSQLGuiLexer_H
#define _PLSQLGuiLexer_H
/* =============================================================================
 * Standard antlr3 C++ runtime definitions
 */
#include <antlr3.hpp>

/* End of standard antlr 3 runtime definitions
 * =============================================================================
 */


#include "UserGuiTraits.hpp"
#include <vector>




/*
 * Oracle(c) PL/SQL 11g Parser  
 *
 * Copyright (c) 2009-2011 Alexandre Porcelli <alexandre.porcelli@gmail.com>
 * Copyright (c) 2012-2013 Ivan Brezina <ibre5041@ibrezina.net> 
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * This code was forked from PL/SQL parser and adoptopted 
 * for QScintilla's custom lexer.
 */



/* ========================
 * BACKTRACKING IS ENABLED
 * ========================
 */

namespace  Antlr3GuiImpl  {

typedef PLSQLGuiLexerTraits PLSQLGuiLexerImplTraits;

 struct synpred1_PLSQLGuiLexer {}; 
 struct synpred2_PLSQLGuiLexer {}; 
 struct synpred3_PLSQLGuiLexer {}; 
 struct synpred4_PLSQLGuiLexer {}; 
 struct synpred5_PLSQLGuiLexer {}; 
 struct synpred6_PLSQLGuiLexer {}; 
 struct synpred7_PLSQLGuiLexer {}; 
 struct synpred8_PLSQLGuiLexer {}; 

class PLSQLGuiLexerTokens
{
public:
	/** 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 ANTLR_TOKEN_EOF.
	 */
	enum Tokens : ANTLR_UINT32
	{
		EOF_TOKEN = PLSQLGuiLexerImplTraits::CommonTokenType::TOKEN_EOF
		, ARROW = 4 
		, ASSIGN_OP = 5 
		, ASTERISK = 6 
		, AT_SIGN = 7 
		, BINDVAR = 8 
		, BIND_VAR_WITH_PARAMS = 9 
		, BUILDIN_FUNCTIONS = 10 
		, CARRET_OPERATOR_PART = 11 
		, CHAR_STRING = 12 
		, CHAR_STRING_PERL = 13 
		, COLON = 14 
		, COMMA = 15 
		, COMMENT_ML = 16 
		, COMMENT_SL = 17 
		, CONCATENATION_OP = 18 
		, CONNECT = 19 
		, CONNECT_BY = 20 
		, DDL_COMMAND_INTRODUCER = 21 
		, DELIMITED_ID = 22 
		, DML_COMMAND_INTRODUCER = 23 
		, DOUBLE_PERIOD = 24 
		, EQUALS_OP = 25 
		, EXCLAMATION_OPERATOR_PART = 26 
		, EXECUTE = 27 
		, EXIT = 28 
		, FOR_NOTATION = 29 
		, GREATER_THAN_OP = 30 
		, GREATER_THAN_OR_EQUALS_OP = 31 
		, LEFT_BRACKET = 32 
		, LEFT_PAREN = 33 
		, LESS_THAN_OP = 34 
		, LESS_THAN_OR_EQUALS_OP = 35 
		, LINEEND = 36 
		, LLABEL = 37 
		, MINUS_SIGN = 38 
		, NATIONAL_CHAR_STRING_LIT = 39 
		, NEWLINE = 40 
		, NOT_EQUAL_OP = 41 
		, NUMBER_LIT = 42 
		, OTHER_COMMAND_INTRODUCER = 43 
		, PERCENT = 44 
		, PERIOD = 45 
		, PLSQL_COMMAND_INTRODUCER = 46 
		, PLSQL_RESERVED = 47 
		, PLUS_SIGN = 48 
		, PROMPT = 49 
		, P_ELSE = 50 
		, P_ELSIF = 51 
		, P_END = 52 
		, P_ERROR = 53 
		, P_ID = 54 
		, P_IF = 55 
		, P_THEN = 56 
		, QS_ANGLE = 57 
		, QS_BRACE = 58 
		, QS_BRACK = 59 
		, QS_OTHER = 60 
		, QS_OTHER_CH = 61 
		, QS_PAREN = 62 
		, QUESTION_MARK = 63 
		, QUOTE = 64 
		, REGULAR_ID = 65 
		, RIGHT_BRACKET = 66 
		, RIGHT_PAREN = 67 
		, RLABEL = 68 
		, R_AS = 69 
		, R_CASE = 70 
		, R_END = 71 
		, R_IF = 72 
		, R_IS = 73 
		, R_LOOP = 74 
		, R_THEN = 75 
		, SELECT_COMMAND_INTRODUCER = 76 
		, SEMICOLON = 77 
		, SET = 78 
		, SIMPLE_LETTER = 79 
		, SOLIDUS = 80 
		, SPACE = 81 
		, SPACE_FRAGMENT = 82 
		, SQLPLUS_COMMAND = 83 
		, SQLPLUS_COMMAND_INTRODUCER = 84 
		, SQLPLUS_SOLIDUS = 85 
		, SWALLOW_TO_NEWLINE_FRAGMENT = 86 
		, TILDE_OPERATOR_PART = 87 
		, TOKEN_FAILURE = 88 
		, UNSIGNED_INTEGER = 89 
		, VERTICAL_BAR = 90 
	};
       static const ANTLR_UINT8* getTokenName(ANTLR_UINT32 index);

protected:
	static ANTLR_UINT8* TokenNames[];
	template<class T, size_t N>
	inline static size_t arraysize(const T(&)[N]) { return N; }

};

/** Context tracking structure for PLSQLGuiLexer
 */
class PLSQLGuiLexer : public PLSQLGuiLexerImplTraits::BaseLexerType
    , public PLSQLGuiLexerTokens
{
public:
	typedef PLSQLGuiLexerImplTraits ImplTraits;
	typedef PLSQLGuiLexer ComponentType;
	typedef ComponentType::StreamType StreamType;
	typedef PLSQLGuiLexerImplTraits::BaseLexerType BaseType;
	typedef ImplTraits::RecognizerSharedStateType<StreamType> RecognizerSharedStateType;
	typedef StreamType InputType;
	static const bool IsFiltered = false;


private:	
public:
    PLSQLGuiLexer(InputType* instream);
    PLSQLGuiLexer(InputType* instream, RecognizerSharedStateType* state);

    void init(InputType* instream  );
    static ANTLR_UINT8** getTokenNames();


      void advanceInput();


    
    void  mSELECT_COMMAND_INTRODUCER( );
    void  mDML_COMMAND_INTRODUCER( );
    void  mDDL_COMMAND_INTRODUCER( );
    void  mPLSQL_COMMAND_INTRODUCER( );
    void  mOTHER_COMMAND_INTRODUCER( );
    void  mCONNECT_BY( );
    void  mSET( );
    void  mEXIT( );
    void  mEXECUTE( );
    void  mCONNECT( );
    void  mSQLPLUS_COMMAND_INTRODUCER( );
    void  mR_IF( );
    void  mR_THEN( );
    void  mR_LOOP( );
    void  mR_CASE( );
    void  mR_END( );
    void  mR_AS( );
    void  mR_IS( );
    void  mP_IF( );
    void  mP_THEN( );
    void  mP_ELSE( );
    void  mP_ELSIF( );
    void  mP_END( );
    void  mP_ERROR( );
    void  mP_ID( );
    void  mPLSQL_RESERVED( );
    void  mBUILDIN_FUNCTIONS( );
    void  mFOR_NOTATION( );
    void  mPERIOD( );
    void  mNUMBER_LIT( );
    void  mNATIONAL_CHAR_STRING_LIT( );
    void  mCHAR_STRING( );
    void  mCHAR_STRING_PERL( );
    void  mQUOTE( );
    void  mQS_ANGLE( );
    void  mQS_BRACE( );
    void  mQS_BRACK( );
    void  mQS_PAREN( );
    void  mQS_OTHER_CH( );
    void  mQS_OTHER( );
    void  mLLABEL( );
    void  mRLABEL( );
    void  mPERCENT( );
    void  mLEFT_PAREN( );
    void  mRIGHT_PAREN( );
    void  mASTERISK( );
    void  mPLUS_SIGN( );
    void  mMINUS_SIGN( );
    void  mCOMMA( );
    void  mSOLIDUS( );
    void  mAT_SIGN( );
    void  mASSIGN_OP( );
    void  mARROW( );
    void  mCOLON( );
    void  mSEMICOLON( );
    void  mLESS_THAN_OR_EQUALS_OP( );
    void  mLESS_THAN_OP( );
    void  mGREATER_THAN_OR_EQUALS_OP( );
    void  mNOT_EQUAL_OP( );
    void  mCARRET_OPERATOR_PART( );
    void  mTILDE_OPERATOR_PART( );
    void  mEXCLAMATION_OPERATOR_PART( );
    void  mGREATER_THAN_OP( );
    void  mCONCATENATION_OP( );
    void  mVERTICAL_BAR( );
    void  mEQUALS_OP( );
    void  mLEFT_BRACKET( );
    void  mRIGHT_BRACKET( );
    void  mSIMPLE_LETTER( );
    void  mUNSIGNED_INTEGER( );
    void  mCOMMENT_SL( );
    void  mCOMMENT_ML( );
    void  mNEWLINE( );
    void  mSWALLOW_TO_NEWLINE_FRAGMENT( );
    void  mLINEEND( );
    void  mPROMPT( );
    void  mSPACE( );
    void  mSPACE_FRAGMENT( );
    void  mQUESTION_MARK( );
    void  mBINDVAR( );
    void  mREGULAR_ID( );
    void  mDELIMITED_ID( );
    void  mTOKEN_FAILURE( );
    void  mTokens( );








      bool msynpred( antlr3::ClassForwarder< synpred1_PLSQLGuiLexer > );
        void msynpred1_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred2_PLSQLGuiLexer > );
        void msynpred2_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred3_PLSQLGuiLexer > );
        void msynpred3_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred4_PLSQLGuiLexer > );
        void msynpred4_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred5_PLSQLGuiLexer > );
        void msynpred5_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred6_PLSQLGuiLexer > );
        void msynpred6_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred7_PLSQLGuiLexer > );
        void msynpred7_PLSQLGuiLexer_fragment ();
      bool msynpred( antlr3::ClassForwarder< synpred8_PLSQLGuiLexer > );
        void msynpred8_PLSQLGuiLexer_fragment ();
    const char *    getGrammarFileName();
    void            reset();
    ~PLSQLGuiLexer();

};

// Function protoypes for the constructor functions that external translation units
// such as delegators and delegates may wish to call.
//

/* End of token definitions for PLSQLGuiLexer
 * =============================================================================
 */

}

#endif

/* END - Note:Keep extra line feed to satisfy UNIX systems */
