public final HiveParser.tableSkewed_return tableSkewed() throws RecognitionException {
		HiveParser.tableSkewed_return retval = new HiveParser.tableSkewed_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token KW_SKEWED553=null;
		Token KW_BY554=null;
		Token LPAREN555=null;
		Token RPAREN556=null;
		Token KW_ON557=null;
		Token LPAREN558=null;
		Token RPAREN559=null;
		ParserRuleReturnScope skewedCols =null;
		ParserRuleReturnScope skewedValues =null;
		ParserRuleReturnScope storedAsDirs560 =null;

		CommonTree KW_SKEWED553_tree=null;
		CommonTree KW_BY554_tree=null;
		CommonTree LPAREN555_tree=null;
		CommonTree RPAREN556_tree=null;
		CommonTree KW_ON557_tree=null;
		CommonTree LPAREN558_tree=null;
		CommonTree RPAREN559_tree=null;
		RewriteRuleTokenStream stream_KW_SKEWED=new RewriteRuleTokenStream(adaptor,"token KW_SKEWED");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_KW_ON=new RewriteRuleTokenStream(adaptor,"token KW_ON");
		RewriteRuleTokenStream stream_KW_BY=new RewriteRuleTokenStream(adaptor,"token KW_BY");
		RewriteRuleSubtreeStream stream_columnNameList=new RewriteRuleSubtreeStream(adaptor,"rule columnNameList");
		RewriteRuleSubtreeStream stream_storedAsDirs=new RewriteRuleSubtreeStream(adaptor,"rule storedAsDirs");
		RewriteRuleSubtreeStream stream_skewedValueElement=new RewriteRuleSubtreeStream(adaptor,"rule skewedValueElement");

		 msgs.push("table skewed specification"); 
		try {
			// HiveParser.g:1489:5: ( KW_SKEWED KW_BY LPAREN skewedCols= columnNameList RPAREN KW_ON LPAREN (skewedValues= skewedValueElement ) RPAREN ( storedAsDirs )? -> ^( TOK_TABLESKEWED $skewedCols $skewedValues ( storedAsDirs )? ) )
			// HiveParser.g:1490:6: KW_SKEWED KW_BY LPAREN skewedCols= columnNameList RPAREN KW_ON LPAREN (skewedValues= skewedValueElement ) RPAREN ( storedAsDirs )?
			{
			KW_SKEWED553=(Token)match(input,KW_SKEWED,FOLLOW_KW_SKEWED_in_tableSkewed8564);  
			stream_KW_SKEWED.add(KW_SKEWED553);

			KW_BY554=(Token)match(input,KW_BY,FOLLOW_KW_BY_in_tableSkewed8566);  
			stream_KW_BY.add(KW_BY554);

			LPAREN555=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_tableSkewed8568);  
			stream_LPAREN.add(LPAREN555);

			pushFollow(FOLLOW_columnNameList_in_tableSkewed8572);
			skewedCols=columnNameList();
			state._fsp--;

			stream_columnNameList.add(skewedCols.getTree());
			RPAREN556=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_tableSkewed8574);  
			stream_RPAREN.add(RPAREN556);

			KW_ON557=(Token)match(input,KW_ON,FOLLOW_KW_ON_in_tableSkewed8576);  
			stream_KW_ON.add(KW_ON557);

			LPAREN558=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_tableSkewed8578);  
			stream_LPAREN.add(LPAREN558);

			// HiveParser.g:1490:75: (skewedValues= skewedValueElement )
			// HiveParser.g:1490:76: skewedValues= skewedValueElement
			{
			pushFollow(FOLLOW_skewedValueElement_in_tableSkewed8583);
			skewedValues=skewedValueElement();
			state._fsp--;

			stream_skewedValueElement.add(skewedValues.getTree());
			}

			RPAREN559=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_tableSkewed8586);  
			stream_RPAREN.add(RPAREN559);

			// HiveParser.g:1490:116: ( storedAsDirs )?
			int alt153=2;
			int LA153_0 = input.LA(1);
			if ( (LA153_0==KW_STORED) ) {
				int LA153_1 = input.LA(2);
				if ( (LA153_1==KW_AS) ) {
					int LA153_7 = input.LA(3);
					if ( (LA153_7==KW_DIRECTORIES) ) {
						alt153=1;
					}
				}
			}
			switch (alt153) {
				case 1 :
					// HiveParser.g:1490:117: storedAsDirs
					{
					pushFollow(FOLLOW_storedAsDirs_in_tableSkewed8589);
					storedAsDirs560=storedAsDirs();
					state._fsp--;

					stream_storedAsDirs.add(storedAsDirs560.getTree());
					}
					break;

			}

			// AST REWRITE
			// elements: storedAsDirs, skewedCols, skewedValues
			// token labels: 
			// rule labels: retval, skewedValues, skewedCols
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
			RewriteRuleSubtreeStream stream_skewedValues=new RewriteRuleSubtreeStream(adaptor,"rule skewedValues",skewedValues!=null?skewedValues.getTree():null);
			RewriteRuleSubtreeStream stream_skewedCols=new RewriteRuleSubtreeStream(adaptor,"rule skewedCols",skewedCols!=null?skewedCols.getTree():null);

			root_0 = (CommonTree)adaptor.nil();
			// 1491:5: -> ^( TOK_TABLESKEWED $skewedCols $skewedValues ( storedAsDirs )? )
			{
				// HiveParser.g:1491:8: ^( TOK_TABLESKEWED $skewedCols $skewedValues ( storedAsDirs )? )
				{
				CommonTree root_1 = (CommonTree)adaptor.nil();
				root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TOK_TABLESKEWED, "TOK_TABLESKEWED"), root_1);
				adaptor.addChild(root_1, stream_skewedCols.nextTree());
				adaptor.addChild(root_1, stream_skewedValues.nextTree());
				// HiveParser.g:1491:52: ( storedAsDirs )?
				if ( stream_storedAsDirs.hasNext() ) {
					adaptor.addChild(root_1, stream_storedAsDirs.nextTree());
				}
				stream_storedAsDirs.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

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

			 msgs.pop(); 
		}

		catch (RecognitionException e) {
		 reportError(e);
		  throw e;
		}

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