public final StatementContext statement() throws RecognitionException {
		StatementContext _localctx = new StatementContext(_ctx, getState());
		enterRule(_localctx, 140, RULE_statement);
		int _la;
		try {
			setState(903);
			switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) {
			case 1:
				_localctx = new BlockStateContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(842); block();
				}
				break;

			case 2:
				_localctx = new AssertStateContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(843); match(ASSERT);
				setState(844); expression(0);
				setState(847);
				_la = _input.LA(1);
				if (_la==46) {
					{
					setState(845); match(46);
					setState(846); expression(0);
					}
				}

				setState(849); match(77);
				}
				break;

			case 3:
				_localctx = new IfStateContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(851); ifStatement();
				}
				break;

			case 4:
				_localctx = new ForStateContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(852); match(74);
				setState(853); match(45);
				setState(854); forControl();
				setState(855); match(22);
				setState(856); statement();
				}
				break;

			case 5:
				_localctx = new WhileStateContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(858); match(43);
				setState(859); parExpression();
				setState(860); statement();
				}
				break;

			case 6:
				_localctx = new DoWhileStateContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(862); match(19);
				setState(863); statement();
				setState(864); match(43);
				setState(865); parExpression();
				setState(866); match(77);
				}
				break;

			case 7:
				_localctx = new TryStateContext(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(868); tryStatement();
				}
				break;

			case 8:
				_localctx = new SwitchStateContext(_localctx);
				enterOuterAlt(_localctx, 8);
				{
				setState(869); match(84);
				setState(870); parExpression();
				setState(871); switchBlock();
				}
				break;

			case 9:
				_localctx = new SynchronizedStateContext(_localctx);
				enterOuterAlt(_localctx, 9);
				{
				setState(873); match(41);
				setState(874); parExpression();
				setState(875); block();
				}
				break;

			case 10:
				_localctx = new ReturnStateContext(_localctx);
				enterOuterAlt(_localctx, 10);
				{
				setState(877); match(75);
				setState(879);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << 6) | (1L << 7) | (1L << 10) | (1L << 12) | (1L << 14) | (1L << 15) | (1L << 18) | (1L << 26) | (1L << 29) | (1L << 34) | (1L << 35) | (1L << 36) | (1L << 44) | (1L << 45) | (1L << 49) | (1L << 53))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (65 - 65)) | (1L << (67 - 65)) | (1L << (69 - 65)) | (1L << (72 - 65)) | (1L << (79 - 65)) | (1L << (88 - 65)) | (1L << (HexLiteral - 65)) | (1L << (DecimalLiteral - 65)) | (1L << (OctalLiteral - 65)) | (1L << (BinaryLiteral - 65)) | (1L << (FloatingPointLiteral - 65)) | (1L << (CharacterLiteral - 65)) | (1L << (StringLiteral - 65)) | (1L << (Identifier - 65)))) != 0)) {
					{
					setState(878); expression(0);
					}
				}

				setState(881); match(77);
				}
				break;

			case 11:
				_localctx = new ThrowStateContext(_localctx);
				enterOuterAlt(_localctx, 11);
				{
				setState(882); match(23);
				setState(883); expression(0);
				setState(884); match(77);
				}
				break;

			case 12:
				_localctx = new BreakStateContext(_localctx);
				enterOuterAlt(_localctx, 12);
				{
				setState(886); match(57);
				setState(888);
				_la = _input.LA(1);
				if (_la==Identifier) {
					{
					setState(887); match(Identifier);
					}
				}

				setState(890); match(77);
				}
				break;

			case 13:
				_localctx = new ContinueStateContext(_localctx);
				enterOuterAlt(_localctx, 13);
				{
				setState(891); match(8);
				setState(893);
				_la = _input.LA(1);
				if (_la==Identifier) {
					{
					setState(892); match(Identifier);
					}
				}

				setState(895); match(77);
				}
				break;

			case 14:
				_localctx = new SemicolonStateContext(_localctx);
				enterOuterAlt(_localctx, 14);
				{
				setState(896); match(77);
				}
				break;

			case 15:
				_localctx = new StateExpStateContext(_localctx);
				enterOuterAlt(_localctx, 15);
				{
				setState(897); statementExpression();
				setState(898); match(77);
				}
				break;

			case 16:
				_localctx = new IdentifierStateContext(_localctx);
				enterOuterAlt(_localctx, 16);
				{
				setState(900); match(Identifier);
				setState(901); match(46);
				setState(902); statement();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}