public final IdentContext ident() throws RecognitionException {
		IdentContext _localctx = new IdentContext(_ctx, getState());
		enterRule(_localctx, 104, RULE_ident);
		try {
			setState(655);
			switch (_input.LA(1)) {
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(651); match(ID);
				}
				break;
			case ACTION:
			case ADD:
			case ALTER:
			case ASC:
			case AUTO_INC:
			case BIGINT:
			case BINARY:
			case BIT:
			case BTREE:
			case CASCADE:
			case CHARACTER:
			case CHAR:
			case CHECK:
			case COLLATE:
			case COL_FORMAT:
			case COMMIT:
			case CREATE:
			case DATABASE:
			case DECIMAL:
			case DELETE:
			case DESC:
			case DISK:
			case DOUBLE:
			case DYNAMIC:
			case END:
			case ENUM:
			case EXISTS:
			case FIXED:
			case FOREIGN:
			case FULLTEXT:
			case FUNCTION:
			case HASH:
			case IF:
			case IGNORE:
			case INSERT:
			case INTEGER:
			case INTO:
			case IS:
			case NUMERIC:
			case REAL:
			case REFERENCES:
			case REPLACE:
			case RESTRICT:
			case SCHEMA:
			case SET:
			case SMALLINT:
			case SPATIAL:
			case STORAGE:
			case TABLE:
			case TEMPORARY:
			case UNSIGNED:
			case UPDATE:
			case USE:
			case USING:
			case VALUES:
			case VARBINARY:
			case VARCHAR:
			case YEAR:
			case ZEROFILL:
				enterOuterAlt(_localctx, 2);
				{
				setState(652); restricted();
				}
				break;
			case QO:
			case DQ:
			case GR:
				enterOuterAlt(_localctx, 3);
				{
				setState(653); quoted_rest();
				}
				break;
			case STRING_G:
			case STRING_Q:
			case STRING_D:
				enterOuterAlt(_localctx, 4);
				{
				setState(654); string();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}