public final TWS_SCHEDULESParser.calendarDefinition_return calendarDefinition() throws RecognitionException {
		TWS_SCHEDULESParser.calendarDefinition_return retval = new TWS_SCHEDULESParser.calendarDefinition_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ID96=null;
		Token STRING_LITERAL97=null;
		Token string_literal98=null;
		ParserRuleReturnScope groupDate99 =null;

		Object ID96_tree=null;
		Object STRING_LITERAL97_tree=null;
		Object string_literal98_tree=null;

		try {
			// /home/fferchic/workspace_antlr/af.jstech.migration/src/af/jstech/migration/jobstream/TWS_SCHEDULES.g:179:21: ( ID | STRING_LITERAL | 'REQUEST' | groupDate )
			int alt57=4;
			switch ( input.LA(1) ) {
			case ID:
				{
				alt57=1;
				}
				break;
			case STRING_LITERAL:
				{
				alt57=2;
				}
				break;
			case 66:
				{
				alt57=3;
				}
				break;
			case DATE_LITERAL:
				{
				alt57=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 57, 0, input);
				throw nvae;
			}
			switch (alt57) {
				case 1 :
					// /home/fferchic/workspace_antlr/af.jstech.migration/src/af/jstech/migration/jobstream/TWS_SCHEDULES.g:180:2: ID
					{
					root_0 = (Object)adaptor.nil();


					ID96=(Token)match(input,ID,FOLLOW_ID_in_calendarDefinition692); 
					ID96_tree = (Object)adaptor.create(ID96);
					adaptor.addChild(root_0, ID96_tree);

					}
					break;
				case 2 :
					// /home/fferchic/workspace_antlr/af.jstech.migration/src/af/jstech/migration/jobstream/TWS_SCHEDULES.g:181:3: STRING_LITERAL
					{
					root_0 = (Object)adaptor.nil();


					STRING_LITERAL97=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_calendarDefinition697); 
					STRING_LITERAL97_tree = (Object)adaptor.create(STRING_LITERAL97);
					adaptor.addChild(root_0, STRING_LITERAL97_tree);

					}
					break;
				case 3 :
					// /home/fferchic/workspace_antlr/af.jstech.migration/src/af/jstech/migration/jobstream/TWS_SCHEDULES.g:182:3: 'REQUEST'
					{
					root_0 = (Object)adaptor.nil();


					string_literal98=(Token)match(input,66,FOLLOW_66_in_calendarDefinition702); 
					string_literal98_tree = (Object)adaptor.create(string_literal98);
					adaptor.addChild(root_0, string_literal98_tree);

					}
					break;
				case 4 :
					// /home/fferchic/workspace_antlr/af.jstech.migration/src/af/jstech/migration/jobstream/TWS_SCHEDULES.g:183:3: groupDate
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_groupDate_in_calendarDefinition707);
					groupDate99=groupDate();
					state._fsp--;

					adaptor.addChild(root_0, groupDate99.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}