public final HiveParser_SelectClauseParser.window_frame_return window_frame() throws RecognitionException {
		HiveParser_SelectClauseParser.window_frame_return retval = new HiveParser_SelectClauseParser.window_frame_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		ParserRuleReturnScope window_range_expression101 =null;
		ParserRuleReturnScope window_value_expression102 =null;


		try {
			// SelectClauseParser.g:261:14: ( window_range_expression | window_value_expression )
			int alt37=2;
			int LA37_0 = input.LA(1);
			if ( (LA37_0==KW_ROWS) ) {
				alt37=1;
			}
			else if ( (LA37_0==KW_RANGE) ) {
				alt37=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 37, 0, input);
				throw nvae;
			}

			switch (alt37) {
				case 1 :
					// SelectClauseParser.g:262:2: window_range_expression
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_window_range_expression_in_window_frame1785);
					window_range_expression101=window_range_expression();
					state._fsp--;

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

					}
					break;
				case 2 :
					// SelectClauseParser.g:263:2: window_value_expression
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_window_value_expression_in_window_frame1790);
					window_value_expression102=window_value_expression();
					state._fsp--;

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

					}
					break;

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

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

		}

		catch (RecognitionException e) {
		  throw e;
		}

		finally {
			// do for sure before leaving
		}
		return retval;
	}