public final Data_typeContext data_type() throws RecognitionException {
		Data_typeContext _localctx = new Data_typeContext(_ctx, getState());
		enterRule(_localctx, 68, RULE_data_type);
		int _la;
		try {
			int _alt;
			setState(570);
			switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) {
			case 1:
				_localctx = new GenericContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(555); 
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,84,_ctx);
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(554); ident();
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(557); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,84,_ctx);
				} while ( _alt!=2 && _alt!=-1 );
				setState(560);
				_la = _input.LA(1);
				if (_la==LP) {
					{
					setState(559); size();
					}
				}

				setState(564);
				switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) {
				case 1:
					{
					setState(562); match(ENUM);
					setState(563); parValueList();
					}
					break;
				}
				}
				break;

			case 2:
				_localctx = new EnumContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(566); match(ENUM);
				setState(567); parValueList();
				}
				break;

			case 3:
				_localctx = new Set_typeContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(568); match(SET);
				setState(569); parValueList();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}