public final TupleExpContext tupleExp() throws RecognitionException {
		TupleExpContext _localctx = new TupleExpContext(_ctx, getState());
		enterRule(_localctx, 126, RULE_tupleExp);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1439); match(T__46);
			setState(1448);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__53) | (1L << T__52) | (1L << T__49) | (1L << T__47) | (1L << T__46) | (1L << T__44) | (1L << T__34) | (1L << T__29) | (1L << T__20) | (1L << GID) | (1L << ID) | (1L << MSTRING))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (AddOP - 72)) | (1L << (MulOP - 72)) | (1L << (UnaryOP - 72)) | (1L << (HEX - 72)) | (1L << (DEC - 72)) | (1L << (OCT - 72)) | (1L << (BIN - 72)) | (1L << (FLOAT - 72)) | (1L << (CHAR - 72)) | (1L << (STRING - 72)))) != 0)) {
				{
				setState(1440); annExp();
				setState(1445);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==T__45) {
					{
					{
					setState(1441); match(T__45);
					setState(1442); annExp();
					}
					}
					setState(1447);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
			}

			setState(1450); match(T__1);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}