All Downloads are FREE. Search and download functionalities are using the official Maven repository.

yale.compiler.compiler.0.9.6.source-code.CSSParser Maven / Gradle / Ivy

There is a newer version: 0.9.10
Show newest version
// $ANTLR 3.5.2 CSS.g

/*
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

package org.apache.royale.compiler.internal.css;

import java.util.Map;
import java.util.HashMap;
import org.apache.royale.compiler.problems.CSSParserProblem;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

import org.antlr.runtime.tree.*;


/**
 * This is a grammar for advanced CSS in Royale. It parses the CSS document and
 * generate DOM objects.
 */
@SuppressWarnings("all")
public class CSSParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "ALPHA_VALUE", "ARGUMENTS", "AT_FONT_FACE", 
		"AT_KEYFRAMES", "AT_MEDIA", "AT_NAMESPACE", "AT_WEBKIT_KEYFRAMES", "BEGINS_WITH", 
		"BLOCK_END", "BLOCK_OPEN", "CALC", "CHILD", "CLASS_REFERENCE", "COLON", 
		"COMMA", "COMMENT", "CONTAINS", "DIGIT", "DOT", "DOUBLE_COLON", "EMBED", 
		"ENDS_WITH", "EQUALS", "ESCAPED_HEX", "FORMAT", "FUNCTIONS", "HASH_WORD", 
		"HEX_DIGIT", "HREFLANG_MATCH", "ID", "IMPORTANT", "I_ARRAY", "I_CHILD_SELECTOR", 
		"I_DECL", "I_MEDIUM_CONDITIONS", "I_MULTIVALUE", "I_PRECEDED_SELECTOR", 
		"I_RULE", "I_RULES", "I_SELECTOR", "I_SELECTOR_GROUP", "I_SIBLING_SELECTOR", 
		"I_SIMPLE_SELECTOR", "LETTER", "LIST_MATCH", "LOCAL", "NOT", "NULL", "NUMBER", 
		"NUMBER_WITH_PERCENT", "NUMBER_WITH_UNIT", "ONLY", "OPERATOR", "PERCENT", 
		"PIPE", "PRECEDED", "PROPERTY_REFERENCE", "RECT_VALUE", "RGB", "RGBA", 
		"ROTATE_VALUE", "SCALE", "SCALE_VALUE", "SEMI_COLONS", "SQUARE_END", "SQUARE_OPEN", 
		"STAR", "STRING", "STRING_QUOTE", "TILDE", "TRANSLATE3D_VALUE", "URL", 
		"WS", "'and'"
	};
	public static final int EOF=-1;
	public static final int T__77=77;
	public static final int ALPHA_VALUE=4;
	public static final int ARGUMENTS=5;
	public static final int AT_FONT_FACE=6;
	public static final int AT_KEYFRAMES=7;
	public static final int AT_MEDIA=8;
	public static final int AT_NAMESPACE=9;
	public static final int AT_WEBKIT_KEYFRAMES=10;
	public static final int BEGINS_WITH=11;
	public static final int BLOCK_END=12;
	public static final int BLOCK_OPEN=13;
	public static final int CALC=14;
	public static final int CHILD=15;
	public static final int CLASS_REFERENCE=16;
	public static final int COLON=17;
	public static final int COMMA=18;
	public static final int COMMENT=19;
	public static final int CONTAINS=20;
	public static final int DIGIT=21;
	public static final int DOT=22;
	public static final int DOUBLE_COLON=23;
	public static final int EMBED=24;
	public static final int ENDS_WITH=25;
	public static final int EQUALS=26;
	public static final int ESCAPED_HEX=27;
	public static final int FORMAT=28;
	public static final int FUNCTIONS=29;
	public static final int HASH_WORD=30;
	public static final int HEX_DIGIT=31;
	public static final int HREFLANG_MATCH=32;
	public static final int ID=33;
	public static final int IMPORTANT=34;
	public static final int I_ARRAY=35;
	public static final int I_CHILD_SELECTOR=36;
	public static final int I_DECL=37;
	public static final int I_MEDIUM_CONDITIONS=38;
	public static final int I_MULTIVALUE=39;
	public static final int I_PRECEDED_SELECTOR=40;
	public static final int I_RULE=41;
	public static final int I_RULES=42;
	public static final int I_SELECTOR=43;
	public static final int I_SELECTOR_GROUP=44;
	public static final int I_SIBLING_SELECTOR=45;
	public static final int I_SIMPLE_SELECTOR=46;
	public static final int LETTER=47;
	public static final int LIST_MATCH=48;
	public static final int LOCAL=49;
	public static final int NOT=50;
	public static final int NULL=51;
	public static final int NUMBER=52;
	public static final int NUMBER_WITH_PERCENT=53;
	public static final int NUMBER_WITH_UNIT=54;
	public static final int ONLY=55;
	public static final int OPERATOR=56;
	public static final int PERCENT=57;
	public static final int PIPE=58;
	public static final int PRECEDED=59;
	public static final int PROPERTY_REFERENCE=60;
	public static final int RECT_VALUE=61;
	public static final int RGB=62;
	public static final int RGBA=63;
	public static final int ROTATE_VALUE=64;
	public static final int SCALE=65;
	public static final int SCALE_VALUE=66;
	public static final int SEMI_COLONS=67;
	public static final int SQUARE_END=68;
	public static final int SQUARE_OPEN=69;
	public static final int STAR=70;
	public static final int STRING=71;
	public static final int STRING_QUOTE=72;
	public static final int TILDE=73;
	public static final int TRANSLATE3D_VALUE=74;
	public static final int URL=75;
	public static final int WS=76;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public CSSParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public CSSParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	protected TreeAdaptor adaptor = new CommonTreeAdaptor();

	public void setTreeAdaptor(TreeAdaptor adaptor) {
		this.adaptor = adaptor;
	}
	public TreeAdaptor getTreeAdaptor() {
		return adaptor;
	}
	@Override public String[] getTokenNames() { return CSSParser.tokenNames; }
	@Override public String getGrammarFileName() { return "CSS.g"; }



	/**
	 * Parser problems.
	 */
	protected List problems = new ArrayList();

	/**
	 * Collect parser problems.
	 */
	@Override
	public void displayRecognitionError(String[] tokenNames, RecognitionException e)
	{
	    problems.add(CSSParserProblem.create(this, tokenNames, e));
	}

	/**
	 * Check if the cursor is at the end of a simple selector.
	 * @return -1 if not end
	 * @return 0 if end
	 * @return 1 if ended by Child combinator
	 * @return 2 if ended by Preceded combinator
	 * @return 3 if ended by Sibling combinator
	 */
	private final int endOfSimpleSelector()
	{
	    final CommonToken nextToken = (CommonToken) getTokenStream().LT(1);
	    if (nextToken == null)
	        return 0;
	    
	    final int nextType = nextToken.getType();

	    if (nextType == CHILD) 
	    { 
	        getTokenStream().consume();
	        return 1;
	    }
	    if (nextType == PRECEDED)
	    {
	        getTokenStream().consume();
	        return 2;
	    }
	    if (nextType == TILDE)
	    {
	        getTokenStream().consume();
	        return 3;
	    }

	    // Check if there's white space between the previous token and the next token.
	    final CommonToken lastToken = (CommonToken) getTokenStream().LT(-1);
	    final int lastType = lastToken.getType();
	    if (lastType == CHILD) 
	    { 
	        return 1;
	    }
	    if (lastType == PRECEDED)
	    {
	        return 2;
	    }
	    if (lastType == TILDE)
	    {
	        return 3;
	    }
	    if (lastToken != null && nextToken != null)
	    {
	        final int lastStop = lastToken.getStopIndex();
	        final int nextStart = nextToken.getStartIndex();
	        if (lastStop + 1 < nextStart)
	        {
	            return 0;
	        }
	    }
	    
	    // If the next token is "{" or ",", it's also end of a selector.
	    if (nextType == BLOCK_OPEN || nextType == COMMA)
	    {
	        return 0;
	    }
	    
	    return -1;
	}



	public static class stylesheet_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "stylesheet"
	// CSS.g:180:1: stylesheet : ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )* ;
	public final CSSParser.stylesheet_return stylesheet() throws RecognitionException {
		CSSParser.stylesheet_return retval = new CSSParser.stylesheet_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope namespaceStatement1 =null;
		ParserRuleReturnScope fontFace2 =null;
		ParserRuleReturnScope keyframes3 =null;
		ParserRuleReturnScope mediaQuery4 =null;
		ParserRuleReturnScope ruleset5 =null;


		try {
			// CSS.g:181:5: ( ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )* )
			// CSS.g:181:9: ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )*
			{
			root_0 = (Object)adaptor.nil();


			// CSS.g:181:9: ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )*
			loop1:
			while (true) {
				int alt1=6;
				switch ( input.LA(1) ) {
				case AT_NAMESPACE:
					{
					alt1=1;
					}
					break;
				case AT_FONT_FACE:
					{
					alt1=2;
					}
					break;
				case AT_KEYFRAMES:
				case AT_WEBKIT_KEYFRAMES:
					{
					alt1=3;
					}
					break;
				case AT_MEDIA:
					{
					alt1=4;
					}
					break;
				case COLON:
				case DOT:
				case DOUBLE_COLON:
				case HASH_WORD:
				case ID:
				case NUMBER_WITH_PERCENT:
				case SQUARE_OPEN:
				case STAR:
					{
					alt1=5;
					}
					break;
				}
				switch (alt1) {
				case 1 :
					// CSS.g:181:11: namespaceStatement
					{
					pushFollow(FOLLOW_namespaceStatement_in_stylesheet149);
					namespaceStatement1=namespaceStatement();
					state._fsp--;

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

					}
					break;
				case 2 :
					// CSS.g:181:32: fontFace
					{
					pushFollow(FOLLOW_fontFace_in_stylesheet153);
					fontFace2=fontFace();
					state._fsp--;

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

					}
					break;
				case 3 :
					// CSS.g:181:43: keyframes
					{
					pushFollow(FOLLOW_keyframes_in_stylesheet157);
					keyframes3=keyframes();
					state._fsp--;

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

					}
					break;
				case 4 :
					// CSS.g:181:55: mediaQuery
					{
					pushFollow(FOLLOW_mediaQuery_in_stylesheet161);
					mediaQuery4=mediaQuery();
					state._fsp--;

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

					}
					break;
				case 5 :
					// CSS.g:181:68: ruleset
					{
					pushFollow(FOLLOW_ruleset_in_stylesheet165);
					ruleset5=ruleset();
					state._fsp--;

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

					}
					break;

				default :
					break loop1;
				}
			}

			}

			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;
	}
	// $ANTLR end "stylesheet"


	public static class namespaceStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "namespaceStatement"
	// CSS.g:193:1: namespaceStatement : AT_NAMESPACE ( ID )? STRING SEMI_COLONS -> ^( AT_NAMESPACE ( ID )? STRING ) ;
	public final CSSParser.namespaceStatement_return namespaceStatement() throws RecognitionException {
		CSSParser.namespaceStatement_return retval = new CSSParser.namespaceStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AT_NAMESPACE6=null;
		Token ID7=null;
		Token STRING8=null;
		Token SEMI_COLONS9=null;

		Object AT_NAMESPACE6_tree=null;
		Object ID7_tree=null;
		Object STRING8_tree=null;
		Object SEMI_COLONS9_tree=null;
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_SEMI_COLONS=new RewriteRuleTokenStream(adaptor,"token SEMI_COLONS");
		RewriteRuleTokenStream stream_AT_NAMESPACE=new RewriteRuleTokenStream(adaptor,"token AT_NAMESPACE");

		try {
			// CSS.g:194:5: ( AT_NAMESPACE ( ID )? STRING SEMI_COLONS -> ^( AT_NAMESPACE ( ID )? STRING ) )
			// CSS.g:194:9: AT_NAMESPACE ( ID )? STRING SEMI_COLONS
			{
			AT_NAMESPACE6=(Token)match(input,AT_NAMESPACE,FOLLOW_AT_NAMESPACE_in_namespaceStatement189);  
			stream_AT_NAMESPACE.add(AT_NAMESPACE6);

			// CSS.g:194:22: ( ID )?
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==ID) ) {
				alt2=1;
			}
			switch (alt2) {
				case 1 :
					// CSS.g:194:22: ID
					{
					ID7=(Token)match(input,ID,FOLLOW_ID_in_namespaceStatement191);  
					stream_ID.add(ID7);

					}
					break;

			}

			STRING8=(Token)match(input,STRING,FOLLOW_STRING_in_namespaceStatement194);  
			stream_STRING.add(STRING8);

			SEMI_COLONS9=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_namespaceStatement196);  
			stream_SEMI_COLONS.add(SEMI_COLONS9);

			// AST REWRITE
			// elements: ID, STRING, AT_NAMESPACE
			// 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 = (Object)adaptor.nil();
			// 195:6: -> ^( AT_NAMESPACE ( ID )? STRING )
			{
				// CSS.g:195:9: ^( AT_NAMESPACE ( ID )? STRING )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_AT_NAMESPACE.nextNode(), root_1);
				// CSS.g:195:24: ( ID )?
				if ( stream_ID.hasNext() ) {
					adaptor.addChild(root_1, stream_ID.nextNode());
				}
				stream_ID.reset();

				adaptor.addChild(root_1, stream_STRING.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "namespaceStatement"


	public static class keyframes_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "keyframes"
	// CSS.g:206:1: keyframes : ( AT_KEYFRAMES ID BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_KEYFRAMES ID ( ruleset )* ) | AT_WEBKIT_KEYFRAMES ID BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_WEBKIT_KEYFRAMES ID ( ruleset )* ) );
	public final CSSParser.keyframes_return keyframes() throws RecognitionException {
		CSSParser.keyframes_return retval = new CSSParser.keyframes_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AT_KEYFRAMES10=null;
		Token ID11=null;
		Token BLOCK_OPEN12=null;
		Token BLOCK_END14=null;
		Token AT_WEBKIT_KEYFRAMES15=null;
		Token ID16=null;
		Token BLOCK_OPEN17=null;
		Token BLOCK_END19=null;
		ParserRuleReturnScope ruleset13 =null;
		ParserRuleReturnScope ruleset18 =null;

		Object AT_KEYFRAMES10_tree=null;
		Object ID11_tree=null;
		Object BLOCK_OPEN12_tree=null;
		Object BLOCK_END14_tree=null;
		Object AT_WEBKIT_KEYFRAMES15_tree=null;
		Object ID16_tree=null;
		Object BLOCK_OPEN17_tree=null;
		Object BLOCK_END19_tree=null;
		RewriteRuleTokenStream stream_BLOCK_OPEN=new RewriteRuleTokenStream(adaptor,"token BLOCK_OPEN");
		RewriteRuleTokenStream stream_BLOCK_END=new RewriteRuleTokenStream(adaptor,"token BLOCK_END");
		RewriteRuleTokenStream stream_AT_WEBKIT_KEYFRAMES=new RewriteRuleTokenStream(adaptor,"token AT_WEBKIT_KEYFRAMES");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_AT_KEYFRAMES=new RewriteRuleTokenStream(adaptor,"token AT_KEYFRAMES");
		RewriteRuleSubtreeStream stream_ruleset=new RewriteRuleSubtreeStream(adaptor,"rule ruleset");

		try {
			// CSS.g:207:5: ( AT_KEYFRAMES ID BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_KEYFRAMES ID ( ruleset )* ) | AT_WEBKIT_KEYFRAMES ID BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_WEBKIT_KEYFRAMES ID ( ruleset )* ) )
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==AT_KEYFRAMES) ) {
				alt5=1;
			}
			else if ( (LA5_0==AT_WEBKIT_KEYFRAMES) ) {
				alt5=2;
			}

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

			switch (alt5) {
				case 1 :
					// CSS.g:207:9: AT_KEYFRAMES ID BLOCK_OPEN ( ruleset )* BLOCK_END
					{
					AT_KEYFRAMES10=(Token)match(input,AT_KEYFRAMES,FOLLOW_AT_KEYFRAMES_in_keyframes239);  
					stream_AT_KEYFRAMES.add(AT_KEYFRAMES10);

					ID11=(Token)match(input,ID,FOLLOW_ID_in_keyframes241);  
					stream_ID.add(ID11);

					BLOCK_OPEN12=(Token)match(input,BLOCK_OPEN,FOLLOW_BLOCK_OPEN_in_keyframes243);  
					stream_BLOCK_OPEN.add(BLOCK_OPEN12);

					// CSS.g:207:36: ( ruleset )*
					loop3:
					while (true) {
						int alt3=2;
						int LA3_0 = input.LA(1);
						if ( (LA3_0==COLON||(LA3_0 >= DOT && LA3_0 <= DOUBLE_COLON)||LA3_0==HASH_WORD||LA3_0==ID||LA3_0==NUMBER_WITH_PERCENT||(LA3_0 >= SQUARE_OPEN && LA3_0 <= STAR)) ) {
							alt3=1;
						}

						switch (alt3) {
						case 1 :
							// CSS.g:207:36: ruleset
							{
							pushFollow(FOLLOW_ruleset_in_keyframes245);
							ruleset13=ruleset();
							state._fsp--;

							stream_ruleset.add(ruleset13.getTree());
							}
							break;

						default :
							break loop3;
						}
					}

					BLOCK_END14=(Token)match(input,BLOCK_END,FOLLOW_BLOCK_END_in_keyframes248);  
					stream_BLOCK_END.add(BLOCK_END14);

					// AST REWRITE
					// elements: AT_KEYFRAMES, ruleset, ID
					// 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 = (Object)adaptor.nil();
					// 208:6: -> ^( AT_KEYFRAMES ID ( ruleset )* )
					{
						// CSS.g:208:9: ^( AT_KEYFRAMES ID ( ruleset )* )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_AT_KEYFRAMES.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ID.nextNode());
						// CSS.g:208:27: ( ruleset )*
						while ( stream_ruleset.hasNext() ) {
							adaptor.addChild(root_1, stream_ruleset.nextTree());
						}
						stream_ruleset.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// CSS.g:209:9: AT_WEBKIT_KEYFRAMES ID BLOCK_OPEN ( ruleset )* BLOCK_END
					{
					AT_WEBKIT_KEYFRAMES15=(Token)match(input,AT_WEBKIT_KEYFRAMES,FOLLOW_AT_WEBKIT_KEYFRAMES_in_keyframes274);  
					stream_AT_WEBKIT_KEYFRAMES.add(AT_WEBKIT_KEYFRAMES15);

					ID16=(Token)match(input,ID,FOLLOW_ID_in_keyframes276);  
					stream_ID.add(ID16);

					BLOCK_OPEN17=(Token)match(input,BLOCK_OPEN,FOLLOW_BLOCK_OPEN_in_keyframes278);  
					stream_BLOCK_OPEN.add(BLOCK_OPEN17);

					// CSS.g:209:43: ( ruleset )*
					loop4:
					while (true) {
						int alt4=2;
						int LA4_0 = input.LA(1);
						if ( (LA4_0==COLON||(LA4_0 >= DOT && LA4_0 <= DOUBLE_COLON)||LA4_0==HASH_WORD||LA4_0==ID||LA4_0==NUMBER_WITH_PERCENT||(LA4_0 >= SQUARE_OPEN && LA4_0 <= STAR)) ) {
							alt4=1;
						}

						switch (alt4) {
						case 1 :
							// CSS.g:209:43: ruleset
							{
							pushFollow(FOLLOW_ruleset_in_keyframes280);
							ruleset18=ruleset();
							state._fsp--;

							stream_ruleset.add(ruleset18.getTree());
							}
							break;

						default :
							break loop4;
						}
					}

					BLOCK_END19=(Token)match(input,BLOCK_END,FOLLOW_BLOCK_END_in_keyframes283);  
					stream_BLOCK_END.add(BLOCK_END19);

					// AST REWRITE
					// elements: ruleset, AT_WEBKIT_KEYFRAMES, ID
					// 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 = (Object)adaptor.nil();
					// 210:6: -> ^( AT_WEBKIT_KEYFRAMES ID ( ruleset )* )
					{
						// CSS.g:210:9: ^( AT_WEBKIT_KEYFRAMES ID ( ruleset )* )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_AT_WEBKIT_KEYFRAMES.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ID.nextNode());
						// CSS.g:210:34: ( ruleset )*
						while ( stream_ruleset.hasNext() ) {
							adaptor.addChild(root_1, stream_ruleset.nextTree());
						}
						stream_ruleset.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					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;
	}
	// $ANTLR end "keyframes"


	public static class mediaQuery_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "mediaQuery"
	// CSS.g:221:1: mediaQuery : AT_MEDIA medium BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_MEDIA medium ( ruleset )* ) ;
	public final CSSParser.mediaQuery_return mediaQuery() throws RecognitionException {
		CSSParser.mediaQuery_return retval = new CSSParser.mediaQuery_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AT_MEDIA20=null;
		Token BLOCK_OPEN22=null;
		Token BLOCK_END24=null;
		ParserRuleReturnScope medium21 =null;
		ParserRuleReturnScope ruleset23 =null;

		Object AT_MEDIA20_tree=null;
		Object BLOCK_OPEN22_tree=null;
		Object BLOCK_END24_tree=null;
		RewriteRuleTokenStream stream_BLOCK_OPEN=new RewriteRuleTokenStream(adaptor,"token BLOCK_OPEN");
		RewriteRuleTokenStream stream_BLOCK_END=new RewriteRuleTokenStream(adaptor,"token BLOCK_END");
		RewriteRuleTokenStream stream_AT_MEDIA=new RewriteRuleTokenStream(adaptor,"token AT_MEDIA");
		RewriteRuleSubtreeStream stream_ruleset=new RewriteRuleSubtreeStream(adaptor,"rule ruleset");
		RewriteRuleSubtreeStream stream_medium=new RewriteRuleSubtreeStream(adaptor,"rule medium");

		try {
			// CSS.g:222:5: ( AT_MEDIA medium BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_MEDIA medium ( ruleset )* ) )
			// CSS.g:222:9: AT_MEDIA medium BLOCK_OPEN ( ruleset )* BLOCK_END
			{
			AT_MEDIA20=(Token)match(input,AT_MEDIA,FOLLOW_AT_MEDIA_in_mediaQuery322);  
			stream_AT_MEDIA.add(AT_MEDIA20);

			pushFollow(FOLLOW_medium_in_mediaQuery324);
			medium21=medium();
			state._fsp--;

			stream_medium.add(medium21.getTree());
			BLOCK_OPEN22=(Token)match(input,BLOCK_OPEN,FOLLOW_BLOCK_OPEN_in_mediaQuery326);  
			stream_BLOCK_OPEN.add(BLOCK_OPEN22);

			// CSS.g:222:36: ( ruleset )*
			loop6:
			while (true) {
				int alt6=2;
				int LA6_0 = input.LA(1);
				if ( (LA6_0==COLON||(LA6_0 >= DOT && LA6_0 <= DOUBLE_COLON)||LA6_0==HASH_WORD||LA6_0==ID||LA6_0==NUMBER_WITH_PERCENT||(LA6_0 >= SQUARE_OPEN && LA6_0 <= STAR)) ) {
					alt6=1;
				}

				switch (alt6) {
				case 1 :
					// CSS.g:222:36: ruleset
					{
					pushFollow(FOLLOW_ruleset_in_mediaQuery328);
					ruleset23=ruleset();
					state._fsp--;

					stream_ruleset.add(ruleset23.getTree());
					}
					break;

				default :
					break loop6;
				}
			}

			BLOCK_END24=(Token)match(input,BLOCK_END,FOLLOW_BLOCK_END_in_mediaQuery331);  
			stream_BLOCK_END.add(BLOCK_END24);

			// AST REWRITE
			// elements: AT_MEDIA, ruleset, medium
			// 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 = (Object)adaptor.nil();
			// 223:6: -> ^( AT_MEDIA medium ( ruleset )* )
			{
				// CSS.g:223:9: ^( AT_MEDIA medium ( ruleset )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_AT_MEDIA.nextNode(), root_1);
				adaptor.addChild(root_1, stream_medium.nextTree());
				// CSS.g:223:27: ( ruleset )*
				while ( stream_ruleset.hasNext() ) {
					adaptor.addChild(root_1, stream_ruleset.nextTree());
				}
				stream_ruleset.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "mediaQuery"


	public static class medium_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "medium"
	// CSS.g:230:1: medium : mediumCondition ( 'and' mediumCondition | mediumCondition )* -> ^( I_MEDIUM_CONDITIONS ( mediumCondition )* ) ;
	public final CSSParser.medium_return medium() throws RecognitionException {
		CSSParser.medium_return retval = new CSSParser.medium_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token string_literal26=null;
		ParserRuleReturnScope mediumCondition25 =null;
		ParserRuleReturnScope mediumCondition27 =null;
		ParserRuleReturnScope mediumCondition28 =null;

		Object string_literal26_tree=null;
		RewriteRuleTokenStream stream_77=new RewriteRuleTokenStream(adaptor,"token 77");
		RewriteRuleSubtreeStream stream_mediumCondition=new RewriteRuleSubtreeStream(adaptor,"rule mediumCondition");

		try {
			// CSS.g:231:5: ( mediumCondition ( 'and' mediumCondition | mediumCondition )* -> ^( I_MEDIUM_CONDITIONS ( mediumCondition )* ) )
			// CSS.g:231:9: mediumCondition ( 'and' mediumCondition | mediumCondition )*
			{
			pushFollow(FOLLOW_mediumCondition_in_medium371);
			mediumCondition25=mediumCondition();
			state._fsp--;

			stream_mediumCondition.add(mediumCondition25.getTree());
			// CSS.g:232:9: ( 'and' mediumCondition | mediumCondition )*
			loop7:
			while (true) {
				int alt7=3;
				int LA7_0 = input.LA(1);
				if ( (LA7_0==77) ) {
					alt7=1;
				}
				else if ( (LA7_0==ARGUMENTS||LA7_0==COMMA||LA7_0==ID||LA7_0==ONLY) ) {
					alt7=2;
				}

				switch (alt7) {
				case 1 :
					// CSS.g:234:13: 'and' mediumCondition
					{
					string_literal26=(Token)match(input,77,FOLLOW_77_in_medium414);  
					stream_77.add(string_literal26);

					pushFollow(FOLLOW_mediumCondition_in_medium429);
					mediumCondition27=mediumCondition();
					state._fsp--;

					stream_mediumCondition.add(mediumCondition27.getTree());
					}
					break;
				case 2 :
					// CSS.g:236:15: mediumCondition
					{
					pushFollow(FOLLOW_mediumCondition_in_medium445);
					mediumCondition28=mediumCondition();
					state._fsp--;

					stream_mediumCondition.add(mediumCondition28.getTree());
					}
					break;

				default :
					break loop7;
				}
			}

			// AST REWRITE
			// elements: mediumCondition
			// 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 = (Object)adaptor.nil();
			// 238:9: -> ^( I_MEDIUM_CONDITIONS ( mediumCondition )* )
			{
				// CSS.g:238:12: ^( I_MEDIUM_CONDITIONS ( mediumCondition )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_MEDIUM_CONDITIONS, "I_MEDIUM_CONDITIONS"), root_1);
				// CSS.g:238:34: ( mediumCondition )*
				while ( stream_mediumCondition.hasNext() ) {
					adaptor.addChild(root_1, stream_mediumCondition.nextTree());
				}
				stream_mediumCondition.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "medium"


	public static class mediumCondition_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "mediumCondition"
	// CSS.g:245:1: mediumCondition : ( ID | ONLY ID | ARGUMENTS | COMMA );
	public final CSSParser.mediumCondition_return mediumCondition() throws RecognitionException {
		CSSParser.mediumCondition_return retval = new CSSParser.mediumCondition_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ID29=null;
		Token ONLY30=null;
		Token ID31=null;
		Token ARGUMENTS32=null;
		Token COMMA33=null;

		Object ID29_tree=null;
		Object ONLY30_tree=null;
		Object ID31_tree=null;
		Object ARGUMENTS32_tree=null;
		Object COMMA33_tree=null;

		try {
			// CSS.g:246:5: ( ID | ONLY ID | ARGUMENTS | COMMA )
			int alt8=4;
			switch ( input.LA(1) ) {
			case ID:
				{
				alt8=1;
				}
				break;
			case ONLY:
				{
				alt8=2;
				}
				break;
			case ARGUMENTS:
				{
				alt8=3;
				}
				break;
			case COMMA:
				{
				alt8=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}
			switch (alt8) {
				case 1 :
					// CSS.g:246:9: ID
					{
					root_0 = (Object)adaptor.nil();


					ID29=(Token)match(input,ID,FOLLOW_ID_in_mediumCondition496); 
					ID29_tree = (Object)adaptor.create(ID29);
					adaptor.addChild(root_0, ID29_tree);

					}
					break;
				case 2 :
					// CSS.g:247:9: ONLY ID
					{
					root_0 = (Object)adaptor.nil();


					ONLY30=(Token)match(input,ONLY,FOLLOW_ONLY_in_mediumCondition506); 
					ONLY30_tree = (Object)adaptor.create(ONLY30);
					adaptor.addChild(root_0, ONLY30_tree);

					ID31=(Token)match(input,ID,FOLLOW_ID_in_mediumCondition508); 
					ID31_tree = (Object)adaptor.create(ID31);
					adaptor.addChild(root_0, ID31_tree);

					}
					break;
				case 3 :
					// CSS.g:248:9: ARGUMENTS
					{
					root_0 = (Object)adaptor.nil();


					ARGUMENTS32=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_mediumCondition522); 
					ARGUMENTS32_tree = (Object)adaptor.create(ARGUMENTS32);
					adaptor.addChild(root_0, ARGUMENTS32_tree);

					}
					break;
				case 4 :
					// CSS.g:249:9: COMMA
					{
					root_0 = (Object)adaptor.nil();


					COMMA33=(Token)match(input,COMMA,FOLLOW_COMMA_in_mediumCondition532); 
					COMMA33_tree = (Object)adaptor.create(COMMA33);
					adaptor.addChild(root_0, COMMA33_tree);

					}
					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;
	}
	// $ANTLR end "mediumCondition"


	public static class fontFace_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "fontFace"
	// CSS.g:263:1: fontFace : AT_FONT_FACE declarationsBlock -> ^( AT_FONT_FACE declarationsBlock ) ;
	public final CSSParser.fontFace_return fontFace() throws RecognitionException {
		CSSParser.fontFace_return retval = new CSSParser.fontFace_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AT_FONT_FACE34=null;
		ParserRuleReturnScope declarationsBlock35 =null;

		Object AT_FONT_FACE34_tree=null;
		RewriteRuleTokenStream stream_AT_FONT_FACE=new RewriteRuleTokenStream(adaptor,"token AT_FONT_FACE");
		RewriteRuleSubtreeStream stream_declarationsBlock=new RewriteRuleSubtreeStream(adaptor,"rule declarationsBlock");

		try {
			// CSS.g:264:5: ( AT_FONT_FACE declarationsBlock -> ^( AT_FONT_FACE declarationsBlock ) )
			// CSS.g:264:9: AT_FONT_FACE declarationsBlock
			{
			AT_FONT_FACE34=(Token)match(input,AT_FONT_FACE,FOLLOW_AT_FONT_FACE_in_fontFace561);  
			stream_AT_FONT_FACE.add(AT_FONT_FACE34);

			pushFollow(FOLLOW_declarationsBlock_in_fontFace563);
			declarationsBlock35=declarationsBlock();
			state._fsp--;

			stream_declarationsBlock.add(declarationsBlock35.getTree());
			// AST REWRITE
			// elements: declarationsBlock, AT_FONT_FACE
			// 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 = (Object)adaptor.nil();
			// 264:40: -> ^( AT_FONT_FACE declarationsBlock )
			{
				// CSS.g:264:43: ^( AT_FONT_FACE declarationsBlock )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_AT_FONT_FACE.nextNode(), root_1);
				adaptor.addChild(root_1, stream_declarationsBlock.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "fontFace"


	public static class ruleset_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "ruleset"
	// CSS.g:270:1: ruleset : selectorGroup declarationsBlock -> ^( I_RULE selectorGroup declarationsBlock ) ;
	public final CSSParser.ruleset_return ruleset() throws RecognitionException {
		CSSParser.ruleset_return retval = new CSSParser.ruleset_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope selectorGroup36 =null;
		ParserRuleReturnScope declarationsBlock37 =null;

		RewriteRuleSubtreeStream stream_selectorGroup=new RewriteRuleSubtreeStream(adaptor,"rule selectorGroup");
		RewriteRuleSubtreeStream stream_declarationsBlock=new RewriteRuleSubtreeStream(adaptor,"rule declarationsBlock");

		try {
			// CSS.g:271:5: ( selectorGroup declarationsBlock -> ^( I_RULE selectorGroup declarationsBlock ) )
			// CSS.g:271:9: selectorGroup declarationsBlock
			{
			pushFollow(FOLLOW_selectorGroup_in_ruleset594);
			selectorGroup36=selectorGroup();
			state._fsp--;

			stream_selectorGroup.add(selectorGroup36.getTree());
			pushFollow(FOLLOW_declarationsBlock_in_ruleset596);
			declarationsBlock37=declarationsBlock();
			state._fsp--;

			stream_declarationsBlock.add(declarationsBlock37.getTree());
			// AST REWRITE
			// elements: declarationsBlock, selectorGroup
			// 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 = (Object)adaptor.nil();
			// 272:9: -> ^( I_RULE selectorGroup declarationsBlock )
			{
				// CSS.g:272:12: ^( I_RULE selectorGroup declarationsBlock )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_RULE, "I_RULE"), root_1);
				adaptor.addChild(root_1, stream_selectorGroup.nextTree());
				adaptor.addChild(root_1, stream_declarationsBlock.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "ruleset"


	public static class selectorGroup_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "selectorGroup"
	// CSS.g:278:1: selectorGroup : compoundSelector ( COMMA compoundSelector )* -> ^( I_SELECTOR_GROUP ( compoundSelector )+ ) ;
	public final CSSParser.selectorGroup_return selectorGroup() throws RecognitionException {
		CSSParser.selectorGroup_return retval = new CSSParser.selectorGroup_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA39=null;
		ParserRuleReturnScope compoundSelector38 =null;
		ParserRuleReturnScope compoundSelector40 =null;

		Object COMMA39_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_compoundSelector=new RewriteRuleSubtreeStream(adaptor,"rule compoundSelector");

		try {
			// CSS.g:279:2: ( compoundSelector ( COMMA compoundSelector )* -> ^( I_SELECTOR_GROUP ( compoundSelector )+ ) )
			// CSS.g:279:4: compoundSelector ( COMMA compoundSelector )*
			{
			pushFollow(FOLLOW_compoundSelector_in_selectorGroup630);
			compoundSelector38=compoundSelector();
			state._fsp--;

			stream_compoundSelector.add(compoundSelector38.getTree());
			// CSS.g:279:21: ( COMMA compoundSelector )*
			loop9:
			while (true) {
				int alt9=2;
				int LA9_0 = input.LA(1);
				if ( (LA9_0==COMMA) ) {
					alt9=1;
				}

				switch (alt9) {
				case 1 :
					// CSS.g:279:23: COMMA compoundSelector
					{
					COMMA39=(Token)match(input,COMMA,FOLLOW_COMMA_in_selectorGroup634);  
					stream_COMMA.add(COMMA39);

					pushFollow(FOLLOW_compoundSelector_in_selectorGroup636);
					compoundSelector40=compoundSelector();
					state._fsp--;

					stream_compoundSelector.add(compoundSelector40.getTree());
					}
					break;

				default :
					break loop9;
				}
			}

			// AST REWRITE
			// elements: compoundSelector
			// 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 = (Object)adaptor.nil();
			// 280:9: -> ^( I_SELECTOR_GROUP ( compoundSelector )+ )
			{
				// CSS.g:280:12: ^( I_SELECTOR_GROUP ( compoundSelector )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_SELECTOR_GROUP, "I_SELECTOR_GROUP"), root_1);
				if ( !(stream_compoundSelector.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_compoundSelector.hasNext() ) {
					adaptor.addChild(root_1, stream_compoundSelector.nextTree());
				}
				stream_compoundSelector.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "selectorGroup"


	public static class compoundSelector_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "compoundSelector"
	// CSS.g:291:1: compoundSelector : (l= simpleSelectorFraction ( '+' | '>' )? )+ -> ^( I_SELECTOR ) ;
	public final CSSParser.compoundSelector_return compoundSelector() throws RecognitionException {
		CSSParser.compoundSelector_return retval = new CSSParser.compoundSelector_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal41=null;
		Token char_literal42=null;
		ParserRuleReturnScope l =null;

		Object char_literal41_tree=null;
		Object char_literal42_tree=null;
		RewriteRuleTokenStream stream_PRECEDED=new RewriteRuleTokenStream(adaptor,"token PRECEDED");
		RewriteRuleTokenStream stream_CHILD=new RewriteRuleTokenStream(adaptor,"token CHILD");
		RewriteRuleSubtreeStream stream_simpleSelectorFraction=new RewriteRuleSubtreeStream(adaptor,"rule simpleSelectorFraction");


			final List simpleSelectorNodeList = new ArrayList();
			Object currentSimpleSelectorNode = adaptor.create(I_SIMPLE_SELECTOR, "I_SIMPLE_SELECTOR");
			Token simpleSelectorStartToken = null;
		    Token simpleSelectorStopToken = null;

		try {
			// CSS.g:304:5: ( (l= simpleSelectorFraction ( '+' | '>' )? )+ -> ^( I_SELECTOR ) )
			// CSS.g:304:9: (l= simpleSelectorFraction ( '+' | '>' )? )+
			{
			// CSS.g:304:9: (l= simpleSelectorFraction ( '+' | '>' )? )+
			int cnt11=0;
			loop11:
			while (true) {
				int alt11=2;
				int LA11_0 = input.LA(1);
				if ( (LA11_0==COLON||(LA11_0 >= DOT && LA11_0 <= DOUBLE_COLON)||LA11_0==HASH_WORD||LA11_0==ID||LA11_0==NUMBER_WITH_PERCENT||(LA11_0 >= SQUARE_OPEN && LA11_0 <= STAR)) ) {
					alt11=1;
				}

				switch (alt11) {
				case 1 :
					// CSS.g:304:13: l= simpleSelectorFraction ( '+' | '>' )?
					{
					pushFollow(FOLLOW_simpleSelectorFraction_in_compoundSelector701);
					l=simpleSelectorFraction();
					state._fsp--;

					stream_simpleSelectorFraction.add(l.getTree());
					// CSS.g:304:38: ( '+' | '>' )?
					int alt10=3;
					int LA10_0 = input.LA(1);
					if ( (LA10_0==PRECEDED) ) {
						alt10=1;
					}
					else if ( (LA10_0==CHILD) ) {
						alt10=2;
					}
					switch (alt10) {
						case 1 :
							// CSS.g:304:40: '+'
							{
							char_literal41=(Token)match(input,PRECEDED,FOLLOW_PRECEDED_in_compoundSelector705);  
							stream_PRECEDED.add(char_literal41);

							}
							break;
						case 2 :
							// CSS.g:304:46: '>'
							{
							char_literal42=(Token)match(input,CHILD,FOLLOW_CHILD_in_compoundSelector709);  
							stream_CHILD.add(char_literal42);

							}
							break;

					}

					 
								    // expand token range of the current simple selector
									if (simpleSelectorStartToken == null)
									    simpleSelectorStartToken = (l!=null?(l.start):null);
									simpleSelectorStopToken = (l!=null?(l.stop):null);
									
									adaptor.addChild(currentSimpleSelectorNode, (l!=null?((Object)l.getTree()):null));
								    
					                            int end = endOfSimpleSelector();
								    if (end != -1) 
								    {
								        adaptor.setTokenBoundaries(
					                        currentSimpleSelectorNode,
					                        simpleSelectorStartToken,
					                        simpleSelectorStopToken);
								    	simpleSelectorNodeList.add(currentSimpleSelectorNode);
					                        
					                    simpleSelectorStartToken = null;
					                    simpleSelectorStopToken = null;
					                    
					                                if (end == 1)
					                                  currentSimpleSelectorNode =  adaptor.create(I_CHILD_SELECTOR, "I_CHILD_SELECTOR");
					                                else if (end == 2)		   
								    	  currentSimpleSelectorNode = adaptor.create(I_PRECEDED_SELECTOR, "I_PRECEDED_SELECTOR");			   
					                                else if (end == 3)			   
								    	  currentSimpleSelectorNode = adaptor.create(I_SIBLING_SELECTOR, "I_SIBLING_SELECTOR");
					                                else
					                              	  currentSimpleSelectorNode = adaptor.create(I_SIMPLE_SELECTOR, "I_SIMPLE_SELECTOR");			   
								    }
								
					}
					break;

				default :
					if ( cnt11 >= 1 ) break loop11;
					EarlyExitException eee = new EarlyExitException(11, input);
					throw eee;
				}
				cnt11++;
			}

			// AST REWRITE
			// elements: 
			// 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 = (Object)adaptor.nil();
			// 336:9: -> ^( I_SELECTOR )
			{
				// CSS.g:336:12: ^( I_SELECTOR )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_SELECTOR, "I_SELECTOR"), root_1);
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

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


				for(final Object simpleSelectorNode : simpleSelectorNodeList)
					adaptor.addChild(retval.tree, simpleSelectorNode);

		}
		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;
	}
	// $ANTLR end "compoundSelector"


	public static class simpleSelectorFraction_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "simpleSelectorFraction"
	// CSS.g:363:1: simpleSelectorFraction : ( condition | element );
	public final CSSParser.simpleSelectorFraction_return simpleSelectorFraction() throws RecognitionException {
		CSSParser.simpleSelectorFraction_return retval = new CSSParser.simpleSelectorFraction_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope condition43 =null;
		ParserRuleReturnScope element44 =null;


		try {
			// CSS.g:364:5: ( condition | element )
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==COLON||(LA12_0 >= DOT && LA12_0 <= DOUBLE_COLON)||LA12_0==HASH_WORD||LA12_0==SQUARE_OPEN) ) {
				alt12=1;
			}
			else if ( (LA12_0==ID||LA12_0==NUMBER_WITH_PERCENT||LA12_0==STAR) ) {
				alt12=2;
			}

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

			switch (alt12) {
				case 1 :
					// CSS.g:364:9: condition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_condition_in_simpleSelectorFraction782);
					condition43=condition();
					state._fsp--;

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

					}
					break;
				case 2 :
					// CSS.g:365:9: element
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_element_in_simpleSelectorFraction793);
					element44=element();
					state._fsp--;

					adaptor.addChild(root_0, element44.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;
	}
	// $ANTLR end "simpleSelectorFraction"


	public static class condition_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "condition"
	// CSS.g:372:1: condition : ( DOT ^ ID | HASH_WORD | COLON ^ NOT ARGUMENTS | COLON ^ ID | DOUBLE_COLON ^ ID | attributeSelector ) ;
	public final CSSParser.condition_return condition() throws RecognitionException {
		CSSParser.condition_return retval = new CSSParser.condition_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token DOT45=null;
		Token ID46=null;
		Token HASH_WORD47=null;
		Token COLON48=null;
		Token NOT49=null;
		Token ARGUMENTS50=null;
		Token COLON51=null;
		Token ID52=null;
		Token DOUBLE_COLON53=null;
		Token ID54=null;
		ParserRuleReturnScope attributeSelector55 =null;

		Object DOT45_tree=null;
		Object ID46_tree=null;
		Object HASH_WORD47_tree=null;
		Object COLON48_tree=null;
		Object NOT49_tree=null;
		Object ARGUMENTS50_tree=null;
		Object COLON51_tree=null;
		Object ID52_tree=null;
		Object DOUBLE_COLON53_tree=null;
		Object ID54_tree=null;

		try {
			// CSS.g:373:5: ( ( DOT ^ ID | HASH_WORD | COLON ^ NOT ARGUMENTS | COLON ^ ID | DOUBLE_COLON ^ ID | attributeSelector ) )
			// CSS.g:373:9: ( DOT ^ ID | HASH_WORD | COLON ^ NOT ARGUMENTS | COLON ^ ID | DOUBLE_COLON ^ ID | attributeSelector )
			{
			root_0 = (Object)adaptor.nil();


			// CSS.g:373:9: ( DOT ^ ID | HASH_WORD | COLON ^ NOT ARGUMENTS | COLON ^ ID | DOUBLE_COLON ^ ID | attributeSelector )
			int alt13=6;
			switch ( input.LA(1) ) {
			case DOT:
				{
				alt13=1;
				}
				break;
			case HASH_WORD:
				{
				alt13=2;
				}
				break;
			case COLON:
				{
				int LA13_3 = input.LA(2);
				if ( (LA13_3==NOT) ) {
					alt13=3;
				}
				else if ( (LA13_3==ID) ) {
					alt13=4;
				}

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

				}
				break;
			case DOUBLE_COLON:
				{
				alt13=5;
				}
				break;
			case SQUARE_OPEN:
				{
				alt13=6;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 13, 0, input);
				throw nvae;
			}
			switch (alt13) {
				case 1 :
					// CSS.g:373:11: DOT ^ ID
					{
					DOT45=(Token)match(input,DOT,FOLLOW_DOT_in_condition819); 
					DOT45_tree = (Object)adaptor.create(DOT45);
					root_0 = (Object)adaptor.becomeRoot(DOT45_tree, root_0);

					ID46=(Token)match(input,ID,FOLLOW_ID_in_condition822); 
					ID46_tree = (Object)adaptor.create(ID46);
					adaptor.addChild(root_0, ID46_tree);

					}
					break;
				case 2 :
					// CSS.g:374:11: HASH_WORD
					{
					HASH_WORD47=(Token)match(input,HASH_WORD,FOLLOW_HASH_WORD_in_condition834); 
					HASH_WORD47_tree = (Object)adaptor.create(HASH_WORD47);
					adaptor.addChild(root_0, HASH_WORD47_tree);

					}
					break;
				case 3 :
					// CSS.g:375:11: COLON ^ NOT ARGUMENTS
					{
					COLON48=(Token)match(input,COLON,FOLLOW_COLON_in_condition847); 
					COLON48_tree = (Object)adaptor.create(COLON48);
					root_0 = (Object)adaptor.becomeRoot(COLON48_tree, root_0);

					NOT49=(Token)match(input,NOT,FOLLOW_NOT_in_condition850); 
					NOT49_tree = (Object)adaptor.create(NOT49);
					adaptor.addChild(root_0, NOT49_tree);

					ARGUMENTS50=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_condition852); 
					ARGUMENTS50_tree = (Object)adaptor.create(ARGUMENTS50);
					adaptor.addChild(root_0, ARGUMENTS50_tree);

					}
					break;
				case 4 :
					// CSS.g:376:11: COLON ^ ID
					{
					COLON51=(Token)match(input,COLON,FOLLOW_COLON_in_condition865); 
					COLON51_tree = (Object)adaptor.create(COLON51);
					root_0 = (Object)adaptor.becomeRoot(COLON51_tree, root_0);

					ID52=(Token)match(input,ID,FOLLOW_ID_in_condition868); 
					ID52_tree = (Object)adaptor.create(ID52);
					adaptor.addChild(root_0, ID52_tree);

					}
					break;
				case 5 :
					// CSS.g:377:11: DOUBLE_COLON ^ ID
					{
					DOUBLE_COLON53=(Token)match(input,DOUBLE_COLON,FOLLOW_DOUBLE_COLON_in_condition881); 
					DOUBLE_COLON53_tree = (Object)adaptor.create(DOUBLE_COLON53);
					root_0 = (Object)adaptor.becomeRoot(DOUBLE_COLON53_tree, root_0);

					ID54=(Token)match(input,ID,FOLLOW_ID_in_condition884); 
					ID54_tree = (Object)adaptor.create(ID54);
					adaptor.addChild(root_0, ID54_tree);

					}
					break;
				case 6 :
					// CSS.g:378:11: attributeSelector
					{
					pushFollow(FOLLOW_attributeSelector_in_condition897);
					attributeSelector55=attributeSelector();
					state._fsp--;

					adaptor.addChild(root_0, attributeSelector55.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;
	}
	// $ANTLR end "condition"


	public static class element_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "element"
	// CSS.g:387:1: element : ( ID PIPE ^ ID | NUMBER_WITH_PERCENT | ID | STAR );
	public final CSSParser.element_return element() throws RecognitionException {
		CSSParser.element_return retval = new CSSParser.element_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ID56=null;
		Token PIPE57=null;
		Token ID58=null;
		Token NUMBER_WITH_PERCENT59=null;
		Token ID60=null;
		Token STAR61=null;

		Object ID56_tree=null;
		Object PIPE57_tree=null;
		Object ID58_tree=null;
		Object NUMBER_WITH_PERCENT59_tree=null;
		Object ID60_tree=null;
		Object STAR61_tree=null;

		try {
			// CSS.g:388:5: ( ID PIPE ^ ID | NUMBER_WITH_PERCENT | ID | STAR )
			int alt14=4;
			switch ( input.LA(1) ) {
			case ID:
				{
				int LA14_1 = input.LA(2);
				if ( (LA14_1==PIPE) ) {
					alt14=1;
				}
				else if ( (LA14_1==BLOCK_OPEN||LA14_1==CHILD||(LA14_1 >= COLON && LA14_1 <= COMMA)||(LA14_1 >= DOT && LA14_1 <= DOUBLE_COLON)||LA14_1==HASH_WORD||LA14_1==ID||LA14_1==NUMBER_WITH_PERCENT||LA14_1==PRECEDED||(LA14_1 >= SQUARE_OPEN && LA14_1 <= STAR)) ) {
					alt14=3;
				}

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

				}
				break;
			case NUMBER_WITH_PERCENT:
				{
				alt14=2;
				}
				break;
			case STAR:
				{
				alt14=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 14, 0, input);
				throw nvae;
			}
			switch (alt14) {
				case 1 :
					// CSS.g:388:9: ID PIPE ^ ID
					{
					root_0 = (Object)adaptor.nil();


					ID56=(Token)match(input,ID,FOLLOW_ID_in_element931); 
					ID56_tree = (Object)adaptor.create(ID56);
					adaptor.addChild(root_0, ID56_tree);

					PIPE57=(Token)match(input,PIPE,FOLLOW_PIPE_in_element933); 
					PIPE57_tree = (Object)adaptor.create(PIPE57);
					root_0 = (Object)adaptor.becomeRoot(PIPE57_tree, root_0);

					ID58=(Token)match(input,ID,FOLLOW_ID_in_element936); 
					ID58_tree = (Object)adaptor.create(ID58);
					adaptor.addChild(root_0, ID58_tree);

					}
					break;
				case 2 :
					// CSS.g:389:9: NUMBER_WITH_PERCENT
					{
					root_0 = (Object)adaptor.nil();


					NUMBER_WITH_PERCENT59=(Token)match(input,NUMBER_WITH_PERCENT,FOLLOW_NUMBER_WITH_PERCENT_in_element946); 
					NUMBER_WITH_PERCENT59_tree = (Object)adaptor.create(NUMBER_WITH_PERCENT59);
					adaptor.addChild(root_0, NUMBER_WITH_PERCENT59_tree);

					}
					break;
				case 3 :
					// CSS.g:390:9: ID
					{
					root_0 = (Object)adaptor.nil();


					ID60=(Token)match(input,ID,FOLLOW_ID_in_element968); 
					ID60_tree = (Object)adaptor.create(ID60);
					adaptor.addChild(root_0, ID60_tree);

					}
					break;
				case 4 :
					// CSS.g:391:9: STAR
					{
					root_0 = (Object)adaptor.nil();


					STAR61=(Token)match(input,STAR,FOLLOW_STAR_in_element988); 
					STAR61_tree = (Object)adaptor.create(STAR61);
					adaptor.addChild(root_0, STAR61_tree);

					}
					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;
	}
	// $ANTLR end "element"


	public static class declarationsBlock_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declarationsBlock"
	// CSS.g:399:1: declarationsBlock : BLOCK_OPEN ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )? BLOCK_END -> ^( I_DECL ( declaration )* ) ;
	public final CSSParser.declarationsBlock_return declarationsBlock() throws RecognitionException {
		CSSParser.declarationsBlock_return retval = new CSSParser.declarationsBlock_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token BLOCK_OPEN62=null;
		Token SEMI_COLONS63=null;
		Token SEMI_COLONS65=null;
		Token SEMI_COLONS67=null;
		Token BLOCK_END68=null;
		ParserRuleReturnScope declaration64 =null;
		ParserRuleReturnScope declaration66 =null;

		Object BLOCK_OPEN62_tree=null;
		Object SEMI_COLONS63_tree=null;
		Object SEMI_COLONS65_tree=null;
		Object SEMI_COLONS67_tree=null;
		Object BLOCK_END68_tree=null;
		RewriteRuleTokenStream stream_BLOCK_OPEN=new RewriteRuleTokenStream(adaptor,"token BLOCK_OPEN");
		RewriteRuleTokenStream stream_BLOCK_END=new RewriteRuleTokenStream(adaptor,"token BLOCK_END");
		RewriteRuleTokenStream stream_SEMI_COLONS=new RewriteRuleTokenStream(adaptor,"token SEMI_COLONS");
		RewriteRuleSubtreeStream stream_declaration=new RewriteRuleSubtreeStream(adaptor,"rule declaration");

		try {
			// CSS.g:400:5: ( BLOCK_OPEN ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )? BLOCK_END -> ^( I_DECL ( declaration )* ) )
			// CSS.g:400:9: BLOCK_OPEN ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )? BLOCK_END
			{
			BLOCK_OPEN62=(Token)match(input,BLOCK_OPEN,FOLLOW_BLOCK_OPEN_in_declarationsBlock1017);  
			stream_BLOCK_OPEN.add(BLOCK_OPEN62);

			// CSS.g:401:9: ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )?
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==ID||LA18_0==SEMI_COLONS) ) {
				alt18=1;
			}
			switch (alt18) {
				case 1 :
					// CSS.g:402:13: ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )?
					{
					// CSS.g:402:13: ( SEMI_COLONS )?
					int alt15=2;
					int LA15_0 = input.LA(1);
					if ( (LA15_0==SEMI_COLONS) ) {
						alt15=1;
					}
					switch (alt15) {
						case 1 :
							// CSS.g:402:13: SEMI_COLONS
							{
							SEMI_COLONS63=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_declarationsBlock1045);  
							stream_SEMI_COLONS.add(SEMI_COLONS63);

							}
							break;

					}

					pushFollow(FOLLOW_declaration_in_declarationsBlock1063);
					declaration64=declaration();
					state._fsp--;

					stream_declaration.add(declaration64.getTree());
					// CSS.g:404:13: ( SEMI_COLONS declaration )*
					loop16:
					while (true) {
						int alt16=2;
						int LA16_0 = input.LA(1);
						if ( (LA16_0==SEMI_COLONS) ) {
							int LA16_1 = input.LA(2);
							if ( (LA16_1==ID) ) {
								alt16=1;
							}

						}

						switch (alt16) {
						case 1 :
							// CSS.g:405:17: SEMI_COLONS declaration
							{
							SEMI_COLONS65=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_declarationsBlock1097);  
							stream_SEMI_COLONS.add(SEMI_COLONS65);

							pushFollow(FOLLOW_declaration_in_declarationsBlock1116);
							declaration66=declaration();
							state._fsp--;

							stream_declaration.add(declaration66.getTree());
							}
							break;

						default :
							break loop16;
						}
					}

					// CSS.g:408:13: ( SEMI_COLONS )?
					int alt17=2;
					int LA17_0 = input.LA(1);
					if ( (LA17_0==SEMI_COLONS) ) {
						alt17=1;
					}
					switch (alt17) {
						case 1 :
							// CSS.g:408:13: SEMI_COLONS
							{
							SEMI_COLONS67=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_declarationsBlock1146);  
							stream_SEMI_COLONS.add(SEMI_COLONS67);

							}
							break;

					}

					}
					break;

			}

			BLOCK_END68=(Token)match(input,BLOCK_END,FOLLOW_BLOCK_END_in_declarationsBlock1169);  
			stream_BLOCK_END.add(BLOCK_END68);

			// AST REWRITE
			// elements: declaration
			// 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 = (Object)adaptor.nil();
			// 411:9: -> ^( I_DECL ( declaration )* )
			{
				// CSS.g:411:12: ^( I_DECL ( declaration )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_DECL, "I_DECL"), root_1);
				// CSS.g:411:21: ( declaration )*
				while ( stream_declaration.hasNext() ) {
					adaptor.addChild(root_1, stream_declaration.nextTree());
				}
				stream_declaration.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "declarationsBlock"


	public static class declaration_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declaration"
	// CSS.g:419:1: declaration : ID COLON value -> ^( COLON ID value ) ;
	public final CSSParser.declaration_return declaration() throws RecognitionException {
		CSSParser.declaration_return retval = new CSSParser.declaration_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ID69=null;
		Token COLON70=null;
		ParserRuleReturnScope value71 =null;

		Object ID69_tree=null;
		Object COLON70_tree=null;
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_value=new RewriteRuleSubtreeStream(adaptor,"rule value");

		try {
			// CSS.g:420:5: ( ID COLON value -> ^( COLON ID value ) )
			// CSS.g:420:9: ID COLON value
			{
			ID69=(Token)match(input,ID,FOLLOW_ID_in_declaration1209);  
			stream_ID.add(ID69);

			COLON70=(Token)match(input,COLON,FOLLOW_COLON_in_declaration1211);  
			stream_COLON.add(COLON70);

			pushFollow(FOLLOW_value_in_declaration1213);
			value71=value();
			state._fsp--;

			stream_value.add(value71.getTree());
			// AST REWRITE
			// elements: COLON, ID, value
			// 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 = (Object)adaptor.nil();
			// 420:24: -> ^( COLON ID value )
			{
				// CSS.g:420:27: ^( COLON ID value )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_COLON.nextNode(), root_1);
				adaptor.addChild(root_1, stream_ID.nextNode());
				adaptor.addChild(root_1, stream_value.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "declaration"


	public static class value_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "value"
	// CSS.g:436:1: value : multiValue ( COMMA multiValue )* -> {count > 1}? ^( I_ARRAY ( multiValue )+ ) -> multiValue ;
	public final CSSParser.value_return value() throws RecognitionException {
		CSSParser.value_return retval = new CSSParser.value_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA73=null;
		ParserRuleReturnScope multiValue72 =null;
		ParserRuleReturnScope multiValue74 =null;

		Object COMMA73_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_multiValue=new RewriteRuleSubtreeStream(adaptor,"rule multiValue");

		 int count = 1; 
		try {
			// CSS.g:438:5: ( multiValue ( COMMA multiValue )* -> {count > 1}? ^( I_ARRAY ( multiValue )+ ) -> multiValue )
			// CSS.g:438:9: multiValue ( COMMA multiValue )*
			{
			pushFollow(FOLLOW_multiValue_in_value1259);
			multiValue72=multiValue();
			state._fsp--;

			stream_multiValue.add(multiValue72.getTree());
			// CSS.g:438:20: ( COMMA multiValue )*
			loop19:
			while (true) {
				int alt19=2;
				int LA19_0 = input.LA(1);
				if ( (LA19_0==COMMA) ) {
					alt19=1;
				}

				switch (alt19) {
				case 1 :
					// CSS.g:438:22: COMMA multiValue
					{
					COMMA73=(Token)match(input,COMMA,FOLLOW_COMMA_in_value1263);  
					stream_COMMA.add(COMMA73);

					pushFollow(FOLLOW_multiValue_in_value1265);
					multiValue74=multiValue();
					state._fsp--;

					stream_multiValue.add(multiValue74.getTree());
					 count++; 
					}
					break;

				default :
					break loop19;
				}
			}

			// AST REWRITE
			// elements: multiValue, multiValue
			// 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 = (Object)adaptor.nil();
			// 439:9: -> {count > 1}? ^( I_ARRAY ( multiValue )+ )
			if (count > 1) {
				// CSS.g:439:25: ^( I_ARRAY ( multiValue )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_ARRAY, "I_ARRAY"), root_1);
				if ( !(stream_multiValue.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_multiValue.hasNext() ) {
					adaptor.addChild(root_1, stream_multiValue.nextTree());
				}
				stream_multiValue.reset();

				adaptor.addChild(root_0, root_1);
				}

			}

			else // 440:9: -> multiValue
			{
				adaptor.addChild(root_0, stream_multiValue.nextTree());
			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "value"


	public static class multiValue_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "multiValue"
	// CSS.g:452:1: multiValue : singleValue ( singleValue )* -> {count > 1}? ^( I_MULTIVALUE ( singleValue )+ ) -> singleValue ;
	public final CSSParser.multiValue_return multiValue() throws RecognitionException {
		CSSParser.multiValue_return retval = new CSSParser.multiValue_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope singleValue75 =null;
		ParserRuleReturnScope singleValue76 =null;

		RewriteRuleSubtreeStream stream_singleValue=new RewriteRuleSubtreeStream(adaptor,"rule singleValue");

		 int count = 1; 
		try {
			// CSS.g:454:5: ( singleValue ( singleValue )* -> {count > 1}? ^( I_MULTIVALUE ( singleValue )+ ) -> singleValue )
			// CSS.g:454:9: singleValue ( singleValue )*
			{
			pushFollow(FOLLOW_singleValue_in_multiValue1346);
			singleValue75=singleValue();
			state._fsp--;

			stream_singleValue.add(singleValue75.getTree());
			// CSS.g:454:21: ( singleValue )*
			loop20:
			while (true) {
				int alt20=2;
				int LA20_0 = input.LA(1);
				if ( (LA20_0==ALPHA_VALUE||LA20_0==CALC||LA20_0==CLASS_REFERENCE||LA20_0==EMBED||(LA20_0 >= FUNCTIONS && LA20_0 <= HASH_WORD)||(LA20_0 >= ID && LA20_0 <= IMPORTANT)||LA20_0==LOCAL||(LA20_0 >= NUMBER_WITH_PERCENT && LA20_0 <= NUMBER_WITH_UNIT)||LA20_0==OPERATOR||(LA20_0 >= PROPERTY_REFERENCE && LA20_0 <= ROTATE_VALUE)||LA20_0==SCALE_VALUE||LA20_0==STRING||(LA20_0 >= TRANSLATE3D_VALUE && LA20_0 <= URL)) ) {
					alt20=1;
				}

				switch (alt20) {
				case 1 :
					// CSS.g:454:23: singleValue
					{
					pushFollow(FOLLOW_singleValue_in_multiValue1350);
					singleValue76=singleValue();
					state._fsp--;

					stream_singleValue.add(singleValue76.getTree());
					 count++; 
					}
					break;

				default :
					break loop20;
				}
			}

			// AST REWRITE
			// elements: singleValue, singleValue
			// 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 = (Object)adaptor.nil();
			// 455:9: -> {count > 1}? ^( I_MULTIVALUE ( singleValue )+ )
			if (count > 1) {
				// CSS.g:455:25: ^( I_MULTIVALUE ( singleValue )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(I_MULTIVALUE, "I_MULTIVALUE"), root_1);
				if ( !(stream_singleValue.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_singleValue.hasNext() ) {
					adaptor.addChild(root_1, stream_singleValue.nextTree());
				}
				stream_singleValue.reset();

				adaptor.addChild(root_0, root_1);
				}

			}

			else // 456:9: -> singleValue
			{
				adaptor.addChild(root_0, stream_singleValue.nextTree());
			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "multiValue"


	public static class singleValue_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "singleValue"
	// CSS.g:474:1: singleValue : ( NUMBER_WITH_PERCENT | NUMBER_WITH_UNIT | HASH_WORD | CLASS_REFERENCE ARGUMENTS -> ^( CLASS_REFERENCE ARGUMENTS ) | PROPERTY_REFERENCE ARGUMENTS -> ^( PROPERTY_REFERENCE ARGUMENTS ) | EMBED ARGUMENTS -> ^( EMBED ARGUMENTS ) | URL ARGUMENTS ( formatOption )* -> ^( URL ARGUMENTS ( formatOption )* ) | LOCAL ARGUMENTS -> ^( LOCAL ARGUMENTS ) | CALC ARGUMENTS -> ^( CALC ARGUMENTS ) | FUNCTIONS ARGUMENTS -> ^( FUNCTIONS ARGUMENTS ) | ALPHA_VALUE | SCALE_VALUE | RECT_VALUE | ROTATE_VALUE | TRANSLATE3D_VALUE | RGB | RGBA | STRING | ID | OPERATOR | IMPORTANT );
	public final CSSParser.singleValue_return singleValue() throws RecognitionException {
		CSSParser.singleValue_return retval = new CSSParser.singleValue_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token NUMBER_WITH_PERCENT77=null;
		Token NUMBER_WITH_UNIT78=null;
		Token HASH_WORD79=null;
		Token CLASS_REFERENCE80=null;
		Token ARGUMENTS81=null;
		Token PROPERTY_REFERENCE82=null;
		Token ARGUMENTS83=null;
		Token EMBED84=null;
		Token ARGUMENTS85=null;
		Token URL86=null;
		Token ARGUMENTS87=null;
		Token LOCAL89=null;
		Token ARGUMENTS90=null;
		Token CALC91=null;
		Token ARGUMENTS92=null;
		Token FUNCTIONS93=null;
		Token ARGUMENTS94=null;
		Token ALPHA_VALUE95=null;
		Token SCALE_VALUE96=null;
		Token RECT_VALUE97=null;
		Token ROTATE_VALUE98=null;
		Token TRANSLATE3D_VALUE99=null;
		Token RGB100=null;
		Token RGBA101=null;
		Token STRING102=null;
		Token ID103=null;
		Token OPERATOR104=null;
		Token IMPORTANT105=null;
		ParserRuleReturnScope formatOption88 =null;

		Object NUMBER_WITH_PERCENT77_tree=null;
		Object NUMBER_WITH_UNIT78_tree=null;
		Object HASH_WORD79_tree=null;
		Object CLASS_REFERENCE80_tree=null;
		Object ARGUMENTS81_tree=null;
		Object PROPERTY_REFERENCE82_tree=null;
		Object ARGUMENTS83_tree=null;
		Object EMBED84_tree=null;
		Object ARGUMENTS85_tree=null;
		Object URL86_tree=null;
		Object ARGUMENTS87_tree=null;
		Object LOCAL89_tree=null;
		Object ARGUMENTS90_tree=null;
		Object CALC91_tree=null;
		Object ARGUMENTS92_tree=null;
		Object FUNCTIONS93_tree=null;
		Object ARGUMENTS94_tree=null;
		Object ALPHA_VALUE95_tree=null;
		Object SCALE_VALUE96_tree=null;
		Object RECT_VALUE97_tree=null;
		Object ROTATE_VALUE98_tree=null;
		Object TRANSLATE3D_VALUE99_tree=null;
		Object RGB100_tree=null;
		Object RGBA101_tree=null;
		Object STRING102_tree=null;
		Object ID103_tree=null;
		Object OPERATOR104_tree=null;
		Object IMPORTANT105_tree=null;
		RewriteRuleTokenStream stream_ARGUMENTS=new RewriteRuleTokenStream(adaptor,"token ARGUMENTS");
		RewriteRuleTokenStream stream_PROPERTY_REFERENCE=new RewriteRuleTokenStream(adaptor,"token PROPERTY_REFERENCE");
		RewriteRuleTokenStream stream_CLASS_REFERENCE=new RewriteRuleTokenStream(adaptor,"token CLASS_REFERENCE");
		RewriteRuleTokenStream stream_LOCAL=new RewriteRuleTokenStream(adaptor,"token LOCAL");
		RewriteRuleTokenStream stream_EMBED=new RewriteRuleTokenStream(adaptor,"token EMBED");
		RewriteRuleTokenStream stream_CALC=new RewriteRuleTokenStream(adaptor,"token CALC");
		RewriteRuleTokenStream stream_FUNCTIONS=new RewriteRuleTokenStream(adaptor,"token FUNCTIONS");
		RewriteRuleTokenStream stream_URL=new RewriteRuleTokenStream(adaptor,"token URL");
		RewriteRuleSubtreeStream stream_formatOption=new RewriteRuleSubtreeStream(adaptor,"rule formatOption");

		try {
			// CSS.g:475:5: ( NUMBER_WITH_PERCENT | NUMBER_WITH_UNIT | HASH_WORD | CLASS_REFERENCE ARGUMENTS -> ^( CLASS_REFERENCE ARGUMENTS ) | PROPERTY_REFERENCE ARGUMENTS -> ^( PROPERTY_REFERENCE ARGUMENTS ) | EMBED ARGUMENTS -> ^( EMBED ARGUMENTS ) | URL ARGUMENTS ( formatOption )* -> ^( URL ARGUMENTS ( formatOption )* ) | LOCAL ARGUMENTS -> ^( LOCAL ARGUMENTS ) | CALC ARGUMENTS -> ^( CALC ARGUMENTS ) | FUNCTIONS ARGUMENTS -> ^( FUNCTIONS ARGUMENTS ) | ALPHA_VALUE | SCALE_VALUE | RECT_VALUE | ROTATE_VALUE | TRANSLATE3D_VALUE | RGB | RGBA | STRING | ID | OPERATOR | IMPORTANT )
			int alt22=21;
			switch ( input.LA(1) ) {
			case NUMBER_WITH_PERCENT:
				{
				alt22=1;
				}
				break;
			case NUMBER_WITH_UNIT:
				{
				alt22=2;
				}
				break;
			case HASH_WORD:
				{
				alt22=3;
				}
				break;
			case CLASS_REFERENCE:
				{
				alt22=4;
				}
				break;
			case PROPERTY_REFERENCE:
				{
				alt22=5;
				}
				break;
			case EMBED:
				{
				alt22=6;
				}
				break;
			case URL:
				{
				alt22=7;
				}
				break;
			case LOCAL:
				{
				alt22=8;
				}
				break;
			case CALC:
				{
				alt22=9;
				}
				break;
			case FUNCTIONS:
				{
				alt22=10;
				}
				break;
			case ALPHA_VALUE:
				{
				alt22=11;
				}
				break;
			case SCALE_VALUE:
				{
				alt22=12;
				}
				break;
			case RECT_VALUE:
				{
				alt22=13;
				}
				break;
			case ROTATE_VALUE:
				{
				alt22=14;
				}
				break;
			case TRANSLATE3D_VALUE:
				{
				alt22=15;
				}
				break;
			case RGB:
				{
				alt22=16;
				}
				break;
			case RGBA:
				{
				alt22=17;
				}
				break;
			case STRING:
				{
				alt22=18;
				}
				break;
			case ID:
				{
				alt22=19;
				}
				break;
			case OPERATOR:
				{
				alt22=20;
				}
				break;
			case IMPORTANT:
				{
				alt22=21;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 22, 0, input);
				throw nvae;
			}
			switch (alt22) {
				case 1 :
					// CSS.g:475:9: NUMBER_WITH_PERCENT
					{
					root_0 = (Object)adaptor.nil();


					NUMBER_WITH_PERCENT77=(Token)match(input,NUMBER_WITH_PERCENT,FOLLOW_NUMBER_WITH_PERCENT_in_singleValue1420); 
					NUMBER_WITH_PERCENT77_tree = (Object)adaptor.create(NUMBER_WITH_PERCENT77);
					adaptor.addChild(root_0, NUMBER_WITH_PERCENT77_tree);

					}
					break;
				case 2 :
					// CSS.g:476:9: NUMBER_WITH_UNIT
					{
					root_0 = (Object)adaptor.nil();


					NUMBER_WITH_UNIT78=(Token)match(input,NUMBER_WITH_UNIT,FOLLOW_NUMBER_WITH_UNIT_in_singleValue1430); 
					NUMBER_WITH_UNIT78_tree = (Object)adaptor.create(NUMBER_WITH_UNIT78);
					adaptor.addChild(root_0, NUMBER_WITH_UNIT78_tree);

					}
					break;
				case 3 :
					// CSS.g:477:9: HASH_WORD
					{
					root_0 = (Object)adaptor.nil();


					HASH_WORD79=(Token)match(input,HASH_WORD,FOLLOW_HASH_WORD_in_singleValue1440); 
					HASH_WORD79_tree = (Object)adaptor.create(HASH_WORD79);
					adaptor.addChild(root_0, HASH_WORD79_tree);

					}
					break;
				case 4 :
					// CSS.g:478:9: CLASS_REFERENCE ARGUMENTS
					{
					CLASS_REFERENCE80=(Token)match(input,CLASS_REFERENCE,FOLLOW_CLASS_REFERENCE_in_singleValue1450);  
					stream_CLASS_REFERENCE.add(CLASS_REFERENCE80);

					ARGUMENTS81=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1452);  
					stream_ARGUMENTS.add(ARGUMENTS81);

					// AST REWRITE
					// elements: CLASS_REFERENCE, ARGUMENTS
					// 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 = (Object)adaptor.nil();
					// 479:13: -> ^( CLASS_REFERENCE ARGUMENTS )
					{
						// CSS.g:479:16: ^( CLASS_REFERENCE ARGUMENTS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_CLASS_REFERENCE.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 5 :
					// CSS.g:480:9: PROPERTY_REFERENCE ARGUMENTS
					{
					PROPERTY_REFERENCE82=(Token)match(input,PROPERTY_REFERENCE,FOLLOW_PROPERTY_REFERENCE_in_singleValue1482);  
					stream_PROPERTY_REFERENCE.add(PROPERTY_REFERENCE82);

					ARGUMENTS83=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1484);  
					stream_ARGUMENTS.add(ARGUMENTS83);

					// AST REWRITE
					// elements: ARGUMENTS, PROPERTY_REFERENCE
					// 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 = (Object)adaptor.nil();
					// 481:13: -> ^( PROPERTY_REFERENCE ARGUMENTS )
					{
						// CSS.g:481:16: ^( PROPERTY_REFERENCE ARGUMENTS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_PROPERTY_REFERENCE.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 6 :
					// CSS.g:482:9: EMBED ARGUMENTS
					{
					EMBED84=(Token)match(input,EMBED,FOLLOW_EMBED_in_singleValue1514);  
					stream_EMBED.add(EMBED84);

					ARGUMENTS85=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1516);  
					stream_ARGUMENTS.add(ARGUMENTS85);

					// AST REWRITE
					// elements: EMBED, ARGUMENTS
					// 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 = (Object)adaptor.nil();
					// 483:13: -> ^( EMBED ARGUMENTS )
					{
						// CSS.g:483:16: ^( EMBED ARGUMENTS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_EMBED.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 7 :
					// CSS.g:484:9: URL ARGUMENTS ( formatOption )*
					{
					URL86=(Token)match(input,URL,FOLLOW_URL_in_singleValue1546);  
					stream_URL.add(URL86);

					ARGUMENTS87=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1548);  
					stream_ARGUMENTS.add(ARGUMENTS87);

					// CSS.g:484:23: ( formatOption )*
					loop21:
					while (true) {
						int alt21=2;
						int LA21_0 = input.LA(1);
						if ( (LA21_0==FORMAT) ) {
							alt21=1;
						}

						switch (alt21) {
						case 1 :
							// CSS.g:484:23: formatOption
							{
							pushFollow(FOLLOW_formatOption_in_singleValue1550);
							formatOption88=formatOption();
							state._fsp--;

							stream_formatOption.add(formatOption88.getTree());
							}
							break;

						default :
							break loop21;
						}
					}

					// AST REWRITE
					// elements: formatOption, ARGUMENTS, URL
					// 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 = (Object)adaptor.nil();
					// 484:39: -> ^( URL ARGUMENTS ( formatOption )* )
					{
						// CSS.g:484:42: ^( URL ARGUMENTS ( formatOption )* )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_URL.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						// CSS.g:484:58: ( formatOption )*
						while ( stream_formatOption.hasNext() ) {
							adaptor.addChild(root_1, stream_formatOption.nextTree());
						}
						stream_formatOption.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 8 :
					// CSS.g:485:9: LOCAL ARGUMENTS
					{
					LOCAL89=(Token)match(input,LOCAL,FOLLOW_LOCAL_in_singleValue1574);  
					stream_LOCAL.add(LOCAL89);

					ARGUMENTS90=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1576);  
					stream_ARGUMENTS.add(ARGUMENTS90);

					// AST REWRITE
					// elements: LOCAL, ARGUMENTS
					// 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 = (Object)adaptor.nil();
					// 485:34: -> ^( LOCAL ARGUMENTS )
					{
						// CSS.g:485:37: ^( LOCAL ARGUMENTS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_LOCAL.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 9 :
					// CSS.g:486:9: CALC ARGUMENTS
					{
					CALC91=(Token)match(input,CALC,FOLLOW_CALC_in_singleValue1603);  
					stream_CALC.add(CALC91);

					ARGUMENTS92=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1605);  
					stream_ARGUMENTS.add(ARGUMENTS92);

					// AST REWRITE
					// elements: ARGUMENTS, CALC
					// 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 = (Object)adaptor.nil();
					// 486:33: -> ^( CALC ARGUMENTS )
					{
						// CSS.g:486:36: ^( CALC ARGUMENTS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_CALC.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 10 :
					// CSS.g:487:9: FUNCTIONS ARGUMENTS
					{
					FUNCTIONS93=(Token)match(input,FUNCTIONS,FOLLOW_FUNCTIONS_in_singleValue1632);  
					stream_FUNCTIONS.add(FUNCTIONS93);

					ARGUMENTS94=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1634);  
					stream_ARGUMENTS.add(ARGUMENTS94);

					// AST REWRITE
					// elements: ARGUMENTS, FUNCTIONS
					// 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 = (Object)adaptor.nil();
					// 487:38: -> ^( FUNCTIONS ARGUMENTS )
					{
						// CSS.g:487:41: ^( FUNCTIONS ARGUMENTS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_FUNCTIONS.nextNode(), root_1);
						adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 11 :
					// CSS.g:488:9: ALPHA_VALUE
					{
					root_0 = (Object)adaptor.nil();


					ALPHA_VALUE95=(Token)match(input,ALPHA_VALUE,FOLLOW_ALPHA_VALUE_in_singleValue1661); 
					ALPHA_VALUE95_tree = (Object)adaptor.create(ALPHA_VALUE95);
					adaptor.addChild(root_0, ALPHA_VALUE95_tree);

					}
					break;
				case 12 :
					// CSS.g:489:9: SCALE_VALUE
					{
					root_0 = (Object)adaptor.nil();


					SCALE_VALUE96=(Token)match(input,SCALE_VALUE,FOLLOW_SCALE_VALUE_in_singleValue1671); 
					SCALE_VALUE96_tree = (Object)adaptor.create(SCALE_VALUE96);
					adaptor.addChild(root_0, SCALE_VALUE96_tree);

					}
					break;
				case 13 :
					// CSS.g:490:9: RECT_VALUE
					{
					root_0 = (Object)adaptor.nil();


					RECT_VALUE97=(Token)match(input,RECT_VALUE,FOLLOW_RECT_VALUE_in_singleValue1681); 
					RECT_VALUE97_tree = (Object)adaptor.create(RECT_VALUE97);
					adaptor.addChild(root_0, RECT_VALUE97_tree);

					}
					break;
				case 14 :
					// CSS.g:491:9: ROTATE_VALUE
					{
					root_0 = (Object)adaptor.nil();


					ROTATE_VALUE98=(Token)match(input,ROTATE_VALUE,FOLLOW_ROTATE_VALUE_in_singleValue1691); 
					ROTATE_VALUE98_tree = (Object)adaptor.create(ROTATE_VALUE98);
					adaptor.addChild(root_0, ROTATE_VALUE98_tree);

					}
					break;
				case 15 :
					// CSS.g:492:9: TRANSLATE3D_VALUE
					{
					root_0 = (Object)adaptor.nil();


					TRANSLATE3D_VALUE99=(Token)match(input,TRANSLATE3D_VALUE,FOLLOW_TRANSLATE3D_VALUE_in_singleValue1701); 
					TRANSLATE3D_VALUE99_tree = (Object)adaptor.create(TRANSLATE3D_VALUE99);
					adaptor.addChild(root_0, TRANSLATE3D_VALUE99_tree);

					}
					break;
				case 16 :
					// CSS.g:493:9: RGB
					{
					root_0 = (Object)adaptor.nil();


					RGB100=(Token)match(input,RGB,FOLLOW_RGB_in_singleValue1711); 
					RGB100_tree = (Object)adaptor.create(RGB100);
					adaptor.addChild(root_0, RGB100_tree);

					}
					break;
				case 17 :
					// CSS.g:494:9: RGBA
					{
					root_0 = (Object)adaptor.nil();


					RGBA101=(Token)match(input,RGBA,FOLLOW_RGBA_in_singleValue1721); 
					RGBA101_tree = (Object)adaptor.create(RGBA101);
					adaptor.addChild(root_0, RGBA101_tree);

					}
					break;
				case 18 :
					// CSS.g:495:9: STRING
					{
					root_0 = (Object)adaptor.nil();


					STRING102=(Token)match(input,STRING,FOLLOW_STRING_in_singleValue1731); 
					STRING102_tree = (Object)adaptor.create(STRING102);
					adaptor.addChild(root_0, STRING102_tree);

					}
					break;
				case 19 :
					// CSS.g:496:9: ID
					{
					root_0 = (Object)adaptor.nil();


					ID103=(Token)match(input,ID,FOLLOW_ID_in_singleValue1747); 
					ID103_tree = (Object)adaptor.create(ID103);
					adaptor.addChild(root_0, ID103_tree);

					}
					break;
				case 20 :
					// CSS.g:497:9: OPERATOR
					{
					root_0 = (Object)adaptor.nil();


					OPERATOR104=(Token)match(input,OPERATOR,FOLLOW_OPERATOR_in_singleValue1757); 
					OPERATOR104_tree = (Object)adaptor.create(OPERATOR104);
					adaptor.addChild(root_0, OPERATOR104_tree);

					}
					break;
				case 21 :
					// CSS.g:498:9: IMPORTANT
					{
					root_0 = (Object)adaptor.nil();


					IMPORTANT105=(Token)match(input,IMPORTANT,FOLLOW_IMPORTANT_in_singleValue1767); 
					IMPORTANT105_tree = (Object)adaptor.create(IMPORTANT105);
					adaptor.addChild(root_0, IMPORTANT105_tree);

					}
					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;
	}
	// $ANTLR end "singleValue"


	public static class formatOption_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "formatOption"
	// CSS.g:501:1: formatOption : FORMAT ARGUMENTS -> ^( FORMAT ARGUMENTS ) ;
	public final CSSParser.formatOption_return formatOption() throws RecognitionException {
		CSSParser.formatOption_return retval = new CSSParser.formatOption_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token FORMAT106=null;
		Token ARGUMENTS107=null;

		Object FORMAT106_tree=null;
		Object ARGUMENTS107_tree=null;
		RewriteRuleTokenStream stream_ARGUMENTS=new RewriteRuleTokenStream(adaptor,"token ARGUMENTS");
		RewriteRuleTokenStream stream_FORMAT=new RewriteRuleTokenStream(adaptor,"token FORMAT");

		try {
			// CSS.g:502:5: ( FORMAT ARGUMENTS -> ^( FORMAT ARGUMENTS ) )
			// CSS.g:502:9: FORMAT ARGUMENTS
			{
			FORMAT106=(Token)match(input,FORMAT,FOLLOW_FORMAT_in_formatOption1787);  
			stream_FORMAT.add(FORMAT106);

			ARGUMENTS107=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_formatOption1789);  
			stream_ARGUMENTS.add(ARGUMENTS107);

			// AST REWRITE
			// elements: FORMAT, ARGUMENTS
			// 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 = (Object)adaptor.nil();
			// 502:26: -> ^( FORMAT ARGUMENTS )
			{
				// CSS.g:502:29: ^( FORMAT ARGUMENTS )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_FORMAT.nextNode(), root_1);
				adaptor.addChild(root_1, stream_ARGUMENTS.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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;
	}
	// $ANTLR end "formatOption"


	public static class attributeSelector_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "attributeSelector"
	// CSS.g:505:1: attributeSelector : SQUARE_OPEN attributeName ( attributeOperator )* ( attributeValue )* SQUARE_END ;
	public final CSSParser.attributeSelector_return attributeSelector() throws RecognitionException {
		CSSParser.attributeSelector_return retval = new CSSParser.attributeSelector_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SQUARE_OPEN108=null;
		Token SQUARE_END112=null;
		ParserRuleReturnScope attributeName109 =null;
		ParserRuleReturnScope attributeOperator110 =null;
		ParserRuleReturnScope attributeValue111 =null;

		Object SQUARE_OPEN108_tree=null;
		Object SQUARE_END112_tree=null;

		try {
			// CSS.g:506:5: ( SQUARE_OPEN attributeName ( attributeOperator )* ( attributeValue )* SQUARE_END )
			// CSS.g:506:9: SQUARE_OPEN attributeName ( attributeOperator )* ( attributeValue )* SQUARE_END
			{
			root_0 = (Object)adaptor.nil();


			SQUARE_OPEN108=(Token)match(input,SQUARE_OPEN,FOLLOW_SQUARE_OPEN_in_attributeSelector1817); 
			SQUARE_OPEN108_tree = (Object)adaptor.create(SQUARE_OPEN108);
			adaptor.addChild(root_0, SQUARE_OPEN108_tree);

			pushFollow(FOLLOW_attributeName_in_attributeSelector1819);
			attributeName109=attributeName();
			state._fsp--;

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

			// CSS.g:506:35: ( attributeOperator )*
			loop23:
			while (true) {
				int alt23=2;
				int LA23_0 = input.LA(1);
				if ( (LA23_0==BEGINS_WITH||LA23_0==CONTAINS||(LA23_0 >= ENDS_WITH && LA23_0 <= EQUALS)||LA23_0==HREFLANG_MATCH||LA23_0==LIST_MATCH) ) {
					alt23=1;
				}

				switch (alt23) {
				case 1 :
					// CSS.g:506:35: attributeOperator
					{
					pushFollow(FOLLOW_attributeOperator_in_attributeSelector1821);
					attributeOperator110=attributeOperator();
					state._fsp--;

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

					}
					break;

				default :
					break loop23;
				}
			}

			// CSS.g:506:54: ( attributeValue )*
			loop24:
			while (true) {
				int alt24=2;
				int LA24_0 = input.LA(1);
				if ( (LA24_0==STRING) ) {
					alt24=1;
				}

				switch (alt24) {
				case 1 :
					// CSS.g:506:54: attributeValue
					{
					pushFollow(FOLLOW_attributeValue_in_attributeSelector1824);
					attributeValue111=attributeValue();
					state._fsp--;

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

					}
					break;

				default :
					break loop24;
				}
			}

			SQUARE_END112=(Token)match(input,SQUARE_END,FOLLOW_SQUARE_END_in_attributeSelector1827); 
			SQUARE_END112_tree = (Object)adaptor.create(SQUARE_END112);
			adaptor.addChild(root_0, SQUARE_END112_tree);

			}

			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;
	}
	// $ANTLR end "attributeSelector"


	public static class attributeName_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "attributeName"
	// CSS.g:509:1: attributeName : ID ;
	public final CSSParser.attributeName_return attributeName() throws RecognitionException {
		CSSParser.attributeName_return retval = new CSSParser.attributeName_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ID113=null;

		Object ID113_tree=null;

		try {
			// CSS.g:510:5: ( ID )
			// CSS.g:510:10: ID
			{
			root_0 = (Object)adaptor.nil();


			ID113=(Token)match(input,ID,FOLLOW_ID_in_attributeName1851); 
			ID113_tree = (Object)adaptor.create(ID113);
			adaptor.addChild(root_0, ID113_tree);

			}

			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;
	}
	// $ANTLR end "attributeName"


	public static class attributeOperator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "attributeOperator"
	// CSS.g:513:1: attributeOperator : ( BEGINS_WITH | ENDS_WITH | CONTAINS | LIST_MATCH | HREFLANG_MATCH | EQUALS );
	public final CSSParser.attributeOperator_return attributeOperator() throws RecognitionException {
		CSSParser.attributeOperator_return retval = new CSSParser.attributeOperator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set114=null;

		Object set114_tree=null;

		try {
			// CSS.g:514:5: ( BEGINS_WITH | ENDS_WITH | CONTAINS | LIST_MATCH | HREFLANG_MATCH | EQUALS )
			// CSS.g:
			{
			root_0 = (Object)adaptor.nil();


			set114=input.LT(1);
			if ( input.LA(1)==BEGINS_WITH||input.LA(1)==CONTAINS||(input.LA(1) >= ENDS_WITH && input.LA(1) <= EQUALS)||input.LA(1)==HREFLANG_MATCH||input.LA(1)==LIST_MATCH ) {
				input.consume();
				adaptor.addChild(root_0, (Object)adaptor.create(set114));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			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;
	}
	// $ANTLR end "attributeOperator"


	public static class attributeValue_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "attributeValue"
	// CSS.g:522:1: attributeValue : STRING ;
	public final CSSParser.attributeValue_return attributeValue() throws RecognitionException {
		CSSParser.attributeValue_return retval = new CSSParser.attributeValue_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token STRING115=null;

		Object STRING115_tree=null;

		try {
			// CSS.g:523:5: ( STRING )
			// CSS.g:523:10: STRING
			{
			root_0 = (Object)adaptor.nil();


			STRING115=(Token)match(input,STRING,FOLLOW_STRING_in_attributeValue1954); 
			STRING115_tree = (Object)adaptor.create(STRING115);
			adaptor.addChild(root_0, STRING115_tree);

			}

			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;
	}
	// $ANTLR end "attributeValue"

	// Delegated rules



	public static final BitSet FOLLOW_namespaceStatement_in_stylesheet149 = new BitSet(new long[]{0x0020000240C207C2L,0x0000000000000060L});
	public static final BitSet FOLLOW_fontFace_in_stylesheet153 = new BitSet(new long[]{0x0020000240C207C2L,0x0000000000000060L});
	public static final BitSet FOLLOW_keyframes_in_stylesheet157 = new BitSet(new long[]{0x0020000240C207C2L,0x0000000000000060L});
	public static final BitSet FOLLOW_mediaQuery_in_stylesheet161 = new BitSet(new long[]{0x0020000240C207C2L,0x0000000000000060L});
	public static final BitSet FOLLOW_ruleset_in_stylesheet165 = new BitSet(new long[]{0x0020000240C207C2L,0x0000000000000060L});
	public static final BitSet FOLLOW_AT_NAMESPACE_in_namespaceStatement189 = new BitSet(new long[]{0x0000000200000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_ID_in_namespaceStatement191 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_STRING_in_namespaceStatement194 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_namespaceStatement196 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_KEYFRAMES_in_keyframes239 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_keyframes241 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_BLOCK_OPEN_in_keyframes243 = new BitSet(new long[]{0x0020000240C21000L,0x0000000000000060L});
	public static final BitSet FOLLOW_ruleset_in_keyframes245 = new BitSet(new long[]{0x0020000240C21000L,0x0000000000000060L});
	public static final BitSet FOLLOW_BLOCK_END_in_keyframes248 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_WEBKIT_KEYFRAMES_in_keyframes274 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_keyframes276 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_BLOCK_OPEN_in_keyframes278 = new BitSet(new long[]{0x0020000240C21000L,0x0000000000000060L});
	public static final BitSet FOLLOW_ruleset_in_keyframes280 = new BitSet(new long[]{0x0020000240C21000L,0x0000000000000060L});
	public static final BitSet FOLLOW_BLOCK_END_in_keyframes283 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_MEDIA_in_mediaQuery322 = new BitSet(new long[]{0x0080000200040020L});
	public static final BitSet FOLLOW_medium_in_mediaQuery324 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_BLOCK_OPEN_in_mediaQuery326 = new BitSet(new long[]{0x0020000240C21000L,0x0000000000000060L});
	public static final BitSet FOLLOW_ruleset_in_mediaQuery328 = new BitSet(new long[]{0x0020000240C21000L,0x0000000000000060L});
	public static final BitSet FOLLOW_BLOCK_END_in_mediaQuery331 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_mediumCondition_in_medium371 = new BitSet(new long[]{0x0080000200040022L,0x0000000000002000L});
	public static final BitSet FOLLOW_77_in_medium414 = new BitSet(new long[]{0x0080000200040020L});
	public static final BitSet FOLLOW_mediumCondition_in_medium429 = new BitSet(new long[]{0x0080000200040022L,0x0000000000002000L});
	public static final BitSet FOLLOW_mediumCondition_in_medium445 = new BitSet(new long[]{0x0080000200040022L,0x0000000000002000L});
	public static final BitSet FOLLOW_ID_in_mediumCondition496 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ONLY_in_mediumCondition506 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_mediumCondition508 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ARGUMENTS_in_mediumCondition522 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_mediumCondition532 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_FONT_FACE_in_fontFace561 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_declarationsBlock_in_fontFace563 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_selectorGroup_in_ruleset594 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_declarationsBlock_in_ruleset596 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_compoundSelector_in_selectorGroup630 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_COMMA_in_selectorGroup634 = new BitSet(new long[]{0x0020000240C20000L,0x0000000000000060L});
	public static final BitSet FOLLOW_compoundSelector_in_selectorGroup636 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_simpleSelectorFraction_in_compoundSelector701 = new BitSet(new long[]{0x0820000240C28002L,0x0000000000000060L});
	public static final BitSet FOLLOW_PRECEDED_in_compoundSelector705 = new BitSet(new long[]{0x0020000240C20002L,0x0000000000000060L});
	public static final BitSet FOLLOW_CHILD_in_compoundSelector709 = new BitSet(new long[]{0x0020000240C20002L,0x0000000000000060L});
	public static final BitSet FOLLOW_condition_in_simpleSelectorFraction782 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_element_in_simpleSelectorFraction793 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOT_in_condition819 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_condition822 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_WORD_in_condition834 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_condition847 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_NOT_in_condition850 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_condition852 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_condition865 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_condition868 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_COLON_in_condition881 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_condition884 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_attributeSelector_in_condition897 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_element931 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_PIPE_in_element933 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_element936 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_PERCENT_in_element946 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_element968 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_element988 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BLOCK_OPEN_in_declarationsBlock1017 = new BitSet(new long[]{0x0000000200001000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_declarationsBlock1045 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_declaration_in_declarationsBlock1063 = new BitSet(new long[]{0x0000000000001000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_declarationsBlock1097 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_declaration_in_declarationsBlock1116 = new BitSet(new long[]{0x0000000000001000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_declarationsBlock1146 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BLOCK_END_in_declarationsBlock1169 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_declaration1209 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_COLON_in_declaration1211 = new BitSet(new long[]{0xF162000661014010L,0x0000000000000C85L});
	public static final BitSet FOLLOW_value_in_declaration1213 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_multiValue_in_value1259 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_COMMA_in_value1263 = new BitSet(new long[]{0xF162000661014010L,0x0000000000000C85L});
	public static final BitSet FOLLOW_multiValue_in_value1265 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_singleValue_in_multiValue1346 = new BitSet(new long[]{0xF162000661014012L,0x0000000000000C85L});
	public static final BitSet FOLLOW_singleValue_in_multiValue1350 = new BitSet(new long[]{0xF162000661014012L,0x0000000000000C85L});
	public static final BitSet FOLLOW_NUMBER_WITH_PERCENT_in_singleValue1420 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_UNIT_in_singleValue1430 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_WORD_in_singleValue1440 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CLASS_REFERENCE_in_singleValue1450 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1452 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROPERTY_REFERENCE_in_singleValue1482 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1484 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EMBED_in_singleValue1514 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1516 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_URL_in_singleValue1546 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1548 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_formatOption_in_singleValue1550 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_LOCAL_in_singleValue1574 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1576 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALC_in_singleValue1603 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1605 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FUNCTIONS_in_singleValue1632 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1634 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALPHA_VALUE_in_singleValue1661 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SCALE_VALUE_in_singleValue1671 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RECT_VALUE_in_singleValue1681 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ROTATE_VALUE_in_singleValue1691 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRANSLATE3D_VALUE_in_singleValue1701 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RGB_in_singleValue1711 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RGBA_in_singleValue1721 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_singleValue1731 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_singleValue1747 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPERATOR_in_singleValue1757 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPORTANT_in_singleValue1767 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FORMAT_in_formatOption1787 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_formatOption1789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SQUARE_OPEN_in_attributeSelector1817 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_attributeName_in_attributeSelector1819 = new BitSet(new long[]{0x0001000106100800L,0x0000000000000090L});
	public static final BitSet FOLLOW_attributeOperator_in_attributeSelector1821 = new BitSet(new long[]{0x0001000106100800L,0x0000000000000090L});
	public static final BitSet FOLLOW_attributeValue_in_attributeSelector1824 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000090L});
	public static final BitSet FOLLOW_SQUARE_END_in_attributeSelector1827 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_attributeName1851 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_attributeValue1954 = new BitSet(new long[]{0x0000000000000002L});
}