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

		CommonTree root_0 = null;

		Token COMMA587=null;
		Token COMMA590=null;
		ParserRuleReturnScope keyValueProperty586 =null;
		ParserRuleReturnScope keyValueProperty588 =null;
		ParserRuleReturnScope keyProperty589 =null;
		ParserRuleReturnScope keyProperty591 =null;

		CommonTree COMMA587_tree=null;
		CommonTree COMMA590_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_keyValueProperty=new RewriteRuleSubtreeStream(adaptor,"rule keyValueProperty");
		RewriteRuleSubtreeStream stream_keyProperty=new RewriteRuleSubtreeStream(adaptor,"rule keyProperty");

		 msgs.push("table properties list"); 
		try {
			// HiveParser.g:1558:5: ( keyValueProperty ( COMMA keyValueProperty )* -> ^( TOK_TABLEPROPLIST ( keyValueProperty )+ ) | keyProperty ( COMMA keyProperty )* -> ^( TOK_TABLEPROPLIST ( keyProperty )+ ) )
			int alt165=2;
			int LA165_0 = input.LA(1);
			if ( (LA165_0==StringLiteral) ) {
				int LA165_1 = input.LA(2);
				if ( (LA165_1==EQUAL) ) {
					alt165=1;
				}
				else if ( (LA165_1==COMMA||LA165_1==RPAREN) ) {
					alt165=2;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 165, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

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

			switch (alt165) {
				case 1 :
					// HiveParser.g:1559:7: keyValueProperty ( COMMA keyValueProperty )*
					{
					pushFollow(FOLLOW_keyValueProperty_in_tablePropertiesList9092);
					keyValueProperty586=keyValueProperty();
					state._fsp--;

					stream_keyValueProperty.add(keyValueProperty586.getTree());
					// HiveParser.g:1559:24: ( COMMA keyValueProperty )*
					loop163:
					while (true) {
						int alt163=2;
						int LA163_0 = input.LA(1);
						if ( (LA163_0==COMMA) ) {
							alt163=1;
						}

						switch (alt163) {
						case 1 :
							// HiveParser.g:1559:25: COMMA keyValueProperty
							{
							COMMA587=(Token)match(input,COMMA,FOLLOW_COMMA_in_tablePropertiesList9095);  
							stream_COMMA.add(COMMA587);

							pushFollow(FOLLOW_keyValueProperty_in_tablePropertiesList9097);
							keyValueProperty588=keyValueProperty();
							state._fsp--;

							stream_keyValueProperty.add(keyValueProperty588.getTree());
							}
							break;

						default :
							break loop163;
						}
					}

					// AST REWRITE
					// elements: keyValueProperty
					// token labels: 
					// rule labels: retval
					// 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);

					root_0 = (CommonTree)adaptor.nil();
					// 1559:50: -> ^( TOK_TABLEPROPLIST ( keyValueProperty )+ )
					{
						// HiveParser.g:1559:53: ^( TOK_TABLEPROPLIST ( keyValueProperty )+ )
						{
						CommonTree root_1 = (CommonTree)adaptor.nil();
						root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TOK_TABLEPROPLIST, "TOK_TABLEPROPLIST"), root_1);
						if ( !(stream_keyValueProperty.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_keyValueProperty.hasNext() ) {
							adaptor.addChild(root_1, stream_keyValueProperty.nextTree());
						}
						stream_keyValueProperty.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// HiveParser.g:1561:7: keyProperty ( COMMA keyProperty )*
					{
					pushFollow(FOLLOW_keyProperty_in_tablePropertiesList9122);
					keyProperty589=keyProperty();
					state._fsp--;

					stream_keyProperty.add(keyProperty589.getTree());
					// HiveParser.g:1561:19: ( COMMA keyProperty )*
					loop164:
					while (true) {
						int alt164=2;
						int LA164_0 = input.LA(1);
						if ( (LA164_0==COMMA) ) {
							alt164=1;
						}

						switch (alt164) {
						case 1 :
							// HiveParser.g:1561:20: COMMA keyProperty
							{
							COMMA590=(Token)match(input,COMMA,FOLLOW_COMMA_in_tablePropertiesList9125);  
							stream_COMMA.add(COMMA590);

							pushFollow(FOLLOW_keyProperty_in_tablePropertiesList9127);
							keyProperty591=keyProperty();
							state._fsp--;

							stream_keyProperty.add(keyProperty591.getTree());
							}
							break;

						default :
							break loop164;
						}
					}

					// AST REWRITE
					// elements: keyProperty
					// token labels: 
					// rule labels: retval
					// 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);

					root_0 = (CommonTree)adaptor.nil();
					// 1561:40: -> ^( TOK_TABLEPROPLIST ( keyProperty )+ )
					{
						// HiveParser.g:1561:43: ^( TOK_TABLEPROPLIST ( keyProperty )+ )
						{
						CommonTree root_1 = (CommonTree)adaptor.nil();
						root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TOK_TABLEPROPLIST, "TOK_TABLEPROPLIST"), root_1);
						if ( !(stream_keyProperty.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_keyProperty.hasNext() ) {
							adaptor.addChild(root_1, stream_keyProperty.nextTree());
						}
						stream_keyProperty.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			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;
	}