public final PrimarySuffixContext primarySuffix() throws RecognitionException {
		PrimarySuffixContext _localctx = new PrimarySuffixContext(_ctx, getState());
		enterRule(_localctx, 122, RULE_primarySuffix);
		int _la;
		try {
			setState(1310);
			switch (_input.LA(1)) {
			case T__9:
				_localctx = new IndexingSuffixContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1293); match(T__9);
				setState(1294); exp(0);
				setState(1299);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==T__45) {
					{
					{
					setState(1295); match(T__45);
					setState(1296); exp(0);
					}
					}
					setState(1301);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1302); match(T__37);
				}
				break;
			case T__16:
				_localctx = new AccessSuffixContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1304); match(T__16);
				setState(1305); match(ID);
				}
				break;
			case T__46:
			case T__38:
				_localctx = new CallSuffixContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1307);
				_la = _input.LA(1);
				if (_la==T__38) {
					{
					setState(1306); typeTuple();
					}
				}

				setState(1309); tupleExp();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}