public final TableContext table() throws RecognitionException {
		TableContext _localctx = new TableContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_table);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(327);
			_la = _input.LA(1);
			if (_la==TEMPORARY) {
				{
				setState(326); match(TEMPORARY);
				}
			}

			setState(329); match(TABLE);
			setState(333);
			switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
			case 1:
				{
				setState(330); match(IF);
				setState(331); match(NOT);
				setState(332); match(EXISTS);
				}
				break;
			}
			setState(335); table_name();
			setState(336); match(LP);
			setState(343);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << STRING_G) | (1L << STRING_Q) | (1L << STRING_D) | (1L << QO) | (1L << DQ) | (1L << GR) | (1L << ACTION) | (1L << ADD) | (1L << ALTER) | (1L << ASC) | (1L << AUTO_INC) | (1L << BIGINT) | (1L << BINARY) | (1L << BIT) | (1L << BTREE) | (1L << CASCADE) | (1L << CHARACTER) | (1L << CHAR) | (1L << CHECK) | (1L << COLLATE) | (1L << COL_FORMAT) | (1L << COMMIT) | (1L << CONSTRAINT) | (1L << CREATE) | (1L << DATABASE) | (1L << DECIMAL) | (1L << DELETE) | (1L << DESC) | (1L << DISK) | (1L << DOUBLE) | (1L << DYNAMIC) | (1L << END) | (1L << ENUM) | (1L << EXISTS) | (1L << FIXED) | (1L << FOREIGN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (FULLTEXT - 64)) | (1L << (FUNCTION - 64)) | (1L << (HASH - 64)) | (1L << (IF - 64)) | (1L << (IGNORE - 64)) | (1L << (INDEX - 64)) | (1L << (INSERT - 64)) | (1L << (INTEGER - 64)) | (1L << (INTO - 64)) | (1L << (IS - 64)) | (1L << (KEY - 64)) | (1L << (NUMERIC - 64)) | (1L << (PRIMARY - 64)) | (1L << (REAL - 64)) | (1L << (REFERENCES - 64)) | (1L << (REPLACE - 64)) | (1L << (RESTRICT - 64)) | (1L << (SCHEMA - 64)) | (1L << (SET - 64)) | (1L << (SMALLINT - 64)) | (1L << (SPATIAL - 64)) | (1L << (STORAGE - 64)) | (1L << (TABLE - 64)) | (1L << (TEMPORARY - 64)) | (1L << (UNIQUE - 64)) | (1L << (UNSIGNED - 64)) | (1L << (UPDATE - 64)) | (1L << (USE - 64)) | (1L << (USING - 64)) | (1L << (VALUES - 64)) | (1L << (VARBINARY - 64)) | (1L << (VARCHAR - 64)) | (1L << (YEAR - 64)) | (1L << (ZEROFILL - 64)) | (1L << (ID - 64)))) != 0)) {
				{
				{
				setState(337); table_definition();
				setState(339);
				_la = _input.LA(1);
				if (_la==SQ || _la==CO) {
					{
					setState(338);
					_la = _input.LA(1);
					if ( !(_la==SQ || _la==CO) ) {
					_errHandler.recoverInline(this);
					}
					consume();
					}
				}

				}
				}
				setState(345);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(346); match(RP);
			setState(350);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,38,_ctx);
			while ( _alt!=2 && _alt!=-1 ) {
				if ( _alt==1 ) {
					{
					{
					setState(347); table_option();
					}
					} 
				}
				setState(352);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,38,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}