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

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

There is a newer version: 0.9.12
Show newest version
// $ANTLR 3.5.2 CSS.g 2018-02-08 10:27:25

/*
 *
 *  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);
	    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:167: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:168:5: ( ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )* )
			// CSS.g:168:9: ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )*
			{
			root_0 = (Object)adaptor.nil();


			// CSS.g:168: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:168:11: namespaceStatement
					{
					pushFollow(FOLLOW_namespaceStatement_in_stylesheet149);
					namespaceStatement1=namespaceStatement();
					state._fsp--;

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

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

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

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

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

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

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

					}
					break;
				case 5 :
					// CSS.g:168: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:180: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:181:5: ( AT_NAMESPACE ( ID )? STRING SEMI_COLONS -> ^( AT_NAMESPACE ( ID )? STRING ) )
			// CSS.g:181: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:181:22: ( ID )?
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==ID) ) {
				alt2=1;
			}
			switch (alt2) {
				case 1 :
					// CSS.g:181: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: AT_NAMESPACE, STRING, 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();
			// 182:6: -> ^( AT_NAMESPACE ( ID )? STRING )
			{
				// CSS.g:182:9: ^( AT_NAMESPACE ( ID )? STRING )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_AT_NAMESPACE.nextNode(), root_1);
				// CSS.g:182: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:193: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:194: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:194: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:194: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:194: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();
					// 195:6: -> ^( AT_KEYFRAMES ID ( ruleset )* )
					{
						// CSS.g:195: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:195: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:196: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:196: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:196: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: AT_WEBKIT_KEYFRAMES, ID, ruleset
					// 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();
					// 197:6: -> ^( AT_WEBKIT_KEYFRAMES ID ( ruleset )* )
					{
						// CSS.g:197: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:197: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:208: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:209:5: ( AT_MEDIA medium BLOCK_OPEN ( ruleset )* BLOCK_END -> ^( AT_MEDIA medium ( ruleset )* ) )
			// CSS.g:209: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:209: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:209: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();
			// 210:6: -> ^( AT_MEDIA medium ( ruleset )* )
			{
				// CSS.g:210: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:210: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:217: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:218:5: ( mediumCondition ( 'and' mediumCondition | mediumCondition )* -> ^( I_MEDIUM_CONDITIONS ( mediumCondition )* ) )
			// CSS.g:218:9: mediumCondition ( 'and' mediumCondition | mediumCondition )*
			{
			pushFollow(FOLLOW_mediumCondition_in_medium371);
			mediumCondition25=mediumCondition();
			state._fsp--;

			stream_mediumCondition.add(mediumCondition25.getTree());
			// CSS.g:219: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:221: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:223: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();
			// 225:9: -> ^( I_MEDIUM_CONDITIONS ( mediumCondition )* )
			{
				// CSS.g:225: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:225: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:232: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:233: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:233: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:234: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:235: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:236: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:250: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:251:5: ( AT_FONT_FACE declarationsBlock -> ^( AT_FONT_FACE declarationsBlock ) )
			// CSS.g:251: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();
			// 251:40: -> ^( AT_FONT_FACE declarationsBlock )
			{
				// CSS.g:251: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:257: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:258:5: ( selectorGroup declarationsBlock -> ^( I_RULE selectorGroup declarationsBlock ) )
			// CSS.g:258: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();
			// 259:9: -> ^( I_RULE selectorGroup declarationsBlock )
			{
				// CSS.g:259: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:265: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:266:2: ( compoundSelector ( COMMA compoundSelector )* -> ^( I_SELECTOR_GROUP ( compoundSelector )+ ) )
			// CSS.g:266:4: compoundSelector ( COMMA compoundSelector )*
			{
			pushFollow(FOLLOW_compoundSelector_in_selectorGroup630);
			compoundSelector38=compoundSelector();
			state._fsp--;

			stream_compoundSelector.add(compoundSelector38.getTree());
			// CSS.g:266: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:266: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();
			// 267:9: -> ^( I_SELECTOR_GROUP ( compoundSelector )+ )
			{
				// CSS.g:267: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:278: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;

		ParserRuleReturnScope l =null;

		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:291:5: ( (l= simpleSelectorFraction )+ -> ^( I_SELECTOR ) )
			// CSS.g:291:9: (l= simpleSelectorFraction )+
			{
			// CSS.g:291:9: (l= simpleSelectorFraction )+
			int cnt10=0;
			loop10:
			while (true) {
				int alt10=2;
				int LA10_0 = input.LA(1);
				if ( (LA10_0==COLON||(LA10_0 >= DOT && LA10_0 <= DOUBLE_COLON)||LA10_0==HASH_WORD||LA10_0==ID||LA10_0==NUMBER_WITH_PERCENT||(LA10_0 >= SQUARE_OPEN && LA10_0 <= STAR)) ) {
					alt10=1;
				}

				switch (alt10) {
				case 1 :
					// CSS.g:291:13: l= simpleSelectorFraction
					{
					pushFollow(FOLLOW_simpleSelectorFraction_in_compoundSelector701);
					l=simpleSelectorFraction();
					state._fsp--;

					stream_simpleSelectorFraction.add(l.getTree());
					 
								    // 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 ( cnt10 >= 1 ) break loop10;
					EarlyExitException eee = new EarlyExitException(10, input);
					throw eee;
				}
				cnt10++;
			}

			// 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();
			// 323:9: -> ^( I_SELECTOR )
			{
				// CSS.g:323: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:350: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 condition41 =null;
		ParserRuleReturnScope element42 =null;


		try {
			// CSS.g:351:5: ( condition | element )
			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==SQUARE_OPEN) ) {
				alt11=1;
			}
			else if ( (LA11_0==ID||LA11_0==NUMBER_WITH_PERCENT||LA11_0==STAR) ) {
				alt11=2;
			}

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

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


					pushFollow(FOLLOW_condition_in_simpleSelectorFraction771);
					condition41=condition();
					state._fsp--;

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

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


					pushFollow(FOLLOW_element_in_simpleSelectorFraction782);
					element42=element();
					state._fsp--;

					adaptor.addChild(root_0, element42.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:359: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 DOT43=null;
		Token ID44=null;
		Token HASH_WORD45=null;
		Token COLON46=null;
		Token NOT47=null;
		Token ARGUMENTS48=null;
		Token COLON49=null;
		Token ID50=null;
		Token DOUBLE_COLON51=null;
		Token ID52=null;
		ParserRuleReturnScope attributeSelector53 =null;

		Object DOT43_tree=null;
		Object ID44_tree=null;
		Object HASH_WORD45_tree=null;
		Object COLON46_tree=null;
		Object NOT47_tree=null;
		Object ARGUMENTS48_tree=null;
		Object COLON49_tree=null;
		Object ID50_tree=null;
		Object DOUBLE_COLON51_tree=null;
		Object ID52_tree=null;

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


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

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

				}
				break;
			case DOUBLE_COLON:
				{
				alt12=5;
				}
				break;
			case SQUARE_OPEN:
				{
				alt12=6;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 12, 0, input);
				throw nvae;
			}
			switch (alt12) {
				case 1 :
					// CSS.g:360:11: DOT ^ ID
					{
					DOT43=(Token)match(input,DOT,FOLLOW_DOT_in_condition808); 
					DOT43_tree = (Object)adaptor.create(DOT43);
					root_0 = (Object)adaptor.becomeRoot(DOT43_tree, root_0);

					ID44=(Token)match(input,ID,FOLLOW_ID_in_condition811); 
					ID44_tree = (Object)adaptor.create(ID44);
					adaptor.addChild(root_0, ID44_tree);

					}
					break;
				case 2 :
					// CSS.g:361:11: HASH_WORD
					{
					HASH_WORD45=(Token)match(input,HASH_WORD,FOLLOW_HASH_WORD_in_condition823); 
					HASH_WORD45_tree = (Object)adaptor.create(HASH_WORD45);
					adaptor.addChild(root_0, HASH_WORD45_tree);

					}
					break;
				case 3 :
					// CSS.g:362:11: COLON ^ NOT ARGUMENTS
					{
					COLON46=(Token)match(input,COLON,FOLLOW_COLON_in_condition836); 
					COLON46_tree = (Object)adaptor.create(COLON46);
					root_0 = (Object)adaptor.becomeRoot(COLON46_tree, root_0);

					NOT47=(Token)match(input,NOT,FOLLOW_NOT_in_condition839); 
					NOT47_tree = (Object)adaptor.create(NOT47);
					adaptor.addChild(root_0, NOT47_tree);

					ARGUMENTS48=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_condition841); 
					ARGUMENTS48_tree = (Object)adaptor.create(ARGUMENTS48);
					adaptor.addChild(root_0, ARGUMENTS48_tree);

					}
					break;
				case 4 :
					// CSS.g:363:11: COLON ^ ID
					{
					COLON49=(Token)match(input,COLON,FOLLOW_COLON_in_condition854); 
					COLON49_tree = (Object)adaptor.create(COLON49);
					root_0 = (Object)adaptor.becomeRoot(COLON49_tree, root_0);

					ID50=(Token)match(input,ID,FOLLOW_ID_in_condition857); 
					ID50_tree = (Object)adaptor.create(ID50);
					adaptor.addChild(root_0, ID50_tree);

					}
					break;
				case 5 :
					// CSS.g:364:11: DOUBLE_COLON ^ ID
					{
					DOUBLE_COLON51=(Token)match(input,DOUBLE_COLON,FOLLOW_DOUBLE_COLON_in_condition870); 
					DOUBLE_COLON51_tree = (Object)adaptor.create(DOUBLE_COLON51);
					root_0 = (Object)adaptor.becomeRoot(DOUBLE_COLON51_tree, root_0);

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

					}
					break;
				case 6 :
					// CSS.g:365:11: attributeSelector
					{
					pushFollow(FOLLOW_attributeSelector_in_condition886);
					attributeSelector53=attributeSelector();
					state._fsp--;

					adaptor.addChild(root_0, attributeSelector53.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:374: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 ID54=null;
		Token PIPE55=null;
		Token ID56=null;
		Token NUMBER_WITH_PERCENT57=null;
		Token ID58=null;
		Token STAR59=null;

		Object ID54_tree=null;
		Object PIPE55_tree=null;
		Object ID56_tree=null;
		Object NUMBER_WITH_PERCENT57_tree=null;
		Object ID58_tree=null;
		Object STAR59_tree=null;

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

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

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


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

					PIPE55=(Token)match(input,PIPE,FOLLOW_PIPE_in_element922); 
					PIPE55_tree = (Object)adaptor.create(PIPE55);
					root_0 = (Object)adaptor.becomeRoot(PIPE55_tree, root_0);

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

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


					NUMBER_WITH_PERCENT57=(Token)match(input,NUMBER_WITH_PERCENT,FOLLOW_NUMBER_WITH_PERCENT_in_element935); 
					NUMBER_WITH_PERCENT57_tree = (Object)adaptor.create(NUMBER_WITH_PERCENT57);
					adaptor.addChild(root_0, NUMBER_WITH_PERCENT57_tree);

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


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

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


					STAR59=(Token)match(input,STAR,FOLLOW_STAR_in_element977); 
					STAR59_tree = (Object)adaptor.create(STAR59);
					adaptor.addChild(root_0, STAR59_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:386: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_OPEN60=null;
		Token SEMI_COLONS61=null;
		Token SEMI_COLONS63=null;
		Token SEMI_COLONS65=null;
		Token BLOCK_END66=null;
		ParserRuleReturnScope declaration62 =null;
		ParserRuleReturnScope declaration64 =null;

		Object BLOCK_OPEN60_tree=null;
		Object SEMI_COLONS61_tree=null;
		Object SEMI_COLONS63_tree=null;
		Object SEMI_COLONS65_tree=null;
		Object BLOCK_END66_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:387:5: ( BLOCK_OPEN ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )? BLOCK_END -> ^( I_DECL ( declaration )* ) )
			// CSS.g:387:9: BLOCK_OPEN ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )? BLOCK_END
			{
			BLOCK_OPEN60=(Token)match(input,BLOCK_OPEN,FOLLOW_BLOCK_OPEN_in_declarationsBlock1006);  
			stream_BLOCK_OPEN.add(BLOCK_OPEN60);

			// CSS.g:388:9: ( ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )? )?
			int alt17=2;
			int LA17_0 = input.LA(1);
			if ( (LA17_0==ID||LA17_0==SEMI_COLONS) ) {
				alt17=1;
			}
			switch (alt17) {
				case 1 :
					// CSS.g:389:13: ( SEMI_COLONS )? declaration ( SEMI_COLONS declaration )* ( SEMI_COLONS )?
					{
					// CSS.g:389:13: ( SEMI_COLONS )?
					int alt14=2;
					int LA14_0 = input.LA(1);
					if ( (LA14_0==SEMI_COLONS) ) {
						alt14=1;
					}
					switch (alt14) {
						case 1 :
							// CSS.g:389:13: SEMI_COLONS
							{
							SEMI_COLONS61=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_declarationsBlock1034);  
							stream_SEMI_COLONS.add(SEMI_COLONS61);

							}
							break;

					}

					pushFollow(FOLLOW_declaration_in_declarationsBlock1052);
					declaration62=declaration();
					state._fsp--;

					stream_declaration.add(declaration62.getTree());
					// CSS.g:391:13: ( SEMI_COLONS declaration )*
					loop15:
					while (true) {
						int alt15=2;
						int LA15_0 = input.LA(1);
						if ( (LA15_0==SEMI_COLONS) ) {
							int LA15_1 = input.LA(2);
							if ( (LA15_1==ID) ) {
								alt15=1;
							}

						}

						switch (alt15) {
						case 1 :
							// CSS.g:392:17: SEMI_COLONS declaration
							{
							SEMI_COLONS63=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_declarationsBlock1086);  
							stream_SEMI_COLONS.add(SEMI_COLONS63);

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

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

						default :
							break loop15;
						}
					}

					// CSS.g:395:13: ( SEMI_COLONS )?
					int alt16=2;
					int LA16_0 = input.LA(1);
					if ( (LA16_0==SEMI_COLONS) ) {
						alt16=1;
					}
					switch (alt16) {
						case 1 :
							// CSS.g:395:13: SEMI_COLONS
							{
							SEMI_COLONS65=(Token)match(input,SEMI_COLONS,FOLLOW_SEMI_COLONS_in_declarationsBlock1135);  
							stream_SEMI_COLONS.add(SEMI_COLONS65);

							}
							break;

					}

					}
					break;

			}

			BLOCK_END66=(Token)match(input,BLOCK_END,FOLLOW_BLOCK_END_in_declarationsBlock1158);  
			stream_BLOCK_END.add(BLOCK_END66);

			// 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();
			// 398:9: -> ^( I_DECL ( declaration )* )
			{
				// CSS.g:398: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:398: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:406: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 ID67=null;
		Token COLON68=null;
		ParserRuleReturnScope value69 =null;

		Object ID67_tree=null;
		Object COLON68_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:407:5: ( ID COLON value -> ^( COLON ID value ) )
			// CSS.g:407:9: ID COLON value
			{
			ID67=(Token)match(input,ID,FOLLOW_ID_in_declaration1198);  
			stream_ID.add(ID67);

			COLON68=(Token)match(input,COLON,FOLLOW_COLON_in_declaration1200);  
			stream_COLON.add(COLON68);

			pushFollow(FOLLOW_value_in_declaration1202);
			value69=value();
			state._fsp--;

			stream_value.add(value69.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();
			// 407:24: -> ^( COLON ID value )
			{
				// CSS.g:407: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:423: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 COMMA71=null;
		ParserRuleReturnScope multiValue70 =null;
		ParserRuleReturnScope multiValue72 =null;

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

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

			stream_multiValue.add(multiValue70.getTree());
			// CSS.g:425:20: ( COMMA multiValue )*
			loop18:
			while (true) {
				int alt18=2;
				int LA18_0 = input.LA(1);
				if ( (LA18_0==COMMA) ) {
					alt18=1;
				}

				switch (alt18) {
				case 1 :
					// CSS.g:425:22: COMMA multiValue
					{
					COMMA71=(Token)match(input,COMMA,FOLLOW_COMMA_in_value1252);  
					stream_COMMA.add(COMMA71);

					pushFollow(FOLLOW_multiValue_in_value1254);
					multiValue72=multiValue();
					state._fsp--;

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

				default :
					break loop18;
				}
			}

			// 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();
			// 426:9: -> {count > 1}? ^( I_ARRAY ( multiValue )+ )
			if (count > 1) {
				// CSS.g:426: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 // 427: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:439: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 singleValue73 =null;
		ParserRuleReturnScope singleValue74 =null;

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

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

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

				switch (alt19) {
				case 1 :
					// CSS.g:441:23: singleValue
					{
					pushFollow(FOLLOW_singleValue_in_multiValue1339);
					singleValue74=singleValue();
					state._fsp--;

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

				default :
					break loop19;
				}
			}

			// 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();
			// 442:9: -> {count > 1}? ^( I_MULTIVALUE ( singleValue )+ )
			if (count > 1) {
				// CSS.g:442: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 // 443: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:461: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_PERCENT75=null;
		Token NUMBER_WITH_UNIT76=null;
		Token HASH_WORD77=null;
		Token CLASS_REFERENCE78=null;
		Token ARGUMENTS79=null;
		Token PROPERTY_REFERENCE80=null;
		Token ARGUMENTS81=null;
		Token EMBED82=null;
		Token ARGUMENTS83=null;
		Token URL84=null;
		Token ARGUMENTS85=null;
		Token LOCAL87=null;
		Token ARGUMENTS88=null;
		Token CALC89=null;
		Token ARGUMENTS90=null;
		Token FUNCTIONS91=null;
		Token ARGUMENTS92=null;
		Token ALPHA_VALUE93=null;
		Token SCALE_VALUE94=null;
		Token RECT_VALUE95=null;
		Token ROTATE_VALUE96=null;
		Token TRANSLATE3D_VALUE97=null;
		Token RGB98=null;
		Token RGBA99=null;
		Token STRING100=null;
		Token ID101=null;
		Token OPERATOR102=null;
		Token IMPORTANT103=null;
		ParserRuleReturnScope formatOption86 =null;

		Object NUMBER_WITH_PERCENT75_tree=null;
		Object NUMBER_WITH_UNIT76_tree=null;
		Object HASH_WORD77_tree=null;
		Object CLASS_REFERENCE78_tree=null;
		Object ARGUMENTS79_tree=null;
		Object PROPERTY_REFERENCE80_tree=null;
		Object ARGUMENTS81_tree=null;
		Object EMBED82_tree=null;
		Object ARGUMENTS83_tree=null;
		Object URL84_tree=null;
		Object ARGUMENTS85_tree=null;
		Object LOCAL87_tree=null;
		Object ARGUMENTS88_tree=null;
		Object CALC89_tree=null;
		Object ARGUMENTS90_tree=null;
		Object FUNCTIONS91_tree=null;
		Object ARGUMENTS92_tree=null;
		Object ALPHA_VALUE93_tree=null;
		Object SCALE_VALUE94_tree=null;
		Object RECT_VALUE95_tree=null;
		Object ROTATE_VALUE96_tree=null;
		Object TRANSLATE3D_VALUE97_tree=null;
		Object RGB98_tree=null;
		Object RGBA99_tree=null;
		Object STRING100_tree=null;
		Object ID101_tree=null;
		Object OPERATOR102_tree=null;
		Object IMPORTANT103_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:462: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 alt21=21;
			switch ( input.LA(1) ) {
			case NUMBER_WITH_PERCENT:
				{
				alt21=1;
				}
				break;
			case NUMBER_WITH_UNIT:
				{
				alt21=2;
				}
				break;
			case HASH_WORD:
				{
				alt21=3;
				}
				break;
			case CLASS_REFERENCE:
				{
				alt21=4;
				}
				break;
			case PROPERTY_REFERENCE:
				{
				alt21=5;
				}
				break;
			case EMBED:
				{
				alt21=6;
				}
				break;
			case URL:
				{
				alt21=7;
				}
				break;
			case LOCAL:
				{
				alt21=8;
				}
				break;
			case CALC:
				{
				alt21=9;
				}
				break;
			case FUNCTIONS:
				{
				alt21=10;
				}
				break;
			case ALPHA_VALUE:
				{
				alt21=11;
				}
				break;
			case SCALE_VALUE:
				{
				alt21=12;
				}
				break;
			case RECT_VALUE:
				{
				alt21=13;
				}
				break;
			case ROTATE_VALUE:
				{
				alt21=14;
				}
				break;
			case TRANSLATE3D_VALUE:
				{
				alt21=15;
				}
				break;
			case RGB:
				{
				alt21=16;
				}
				break;
			case RGBA:
				{
				alt21=17;
				}
				break;
			case STRING:
				{
				alt21=18;
				}
				break;
			case ID:
				{
				alt21=19;
				}
				break;
			case OPERATOR:
				{
				alt21=20;
				}
				break;
			case IMPORTANT:
				{
				alt21=21;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 21, 0, input);
				throw nvae;
			}
			switch (alt21) {
				case 1 :
					// CSS.g:462:9: NUMBER_WITH_PERCENT
					{
					root_0 = (Object)adaptor.nil();


					NUMBER_WITH_PERCENT75=(Token)match(input,NUMBER_WITH_PERCENT,FOLLOW_NUMBER_WITH_PERCENT_in_singleValue1409); 
					NUMBER_WITH_PERCENT75_tree = (Object)adaptor.create(NUMBER_WITH_PERCENT75);
					adaptor.addChild(root_0, NUMBER_WITH_PERCENT75_tree);

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


					NUMBER_WITH_UNIT76=(Token)match(input,NUMBER_WITH_UNIT,FOLLOW_NUMBER_WITH_UNIT_in_singleValue1419); 
					NUMBER_WITH_UNIT76_tree = (Object)adaptor.create(NUMBER_WITH_UNIT76);
					adaptor.addChild(root_0, NUMBER_WITH_UNIT76_tree);

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


					HASH_WORD77=(Token)match(input,HASH_WORD,FOLLOW_HASH_WORD_in_singleValue1429); 
					HASH_WORD77_tree = (Object)adaptor.create(HASH_WORD77);
					adaptor.addChild(root_0, HASH_WORD77_tree);

					}
					break;
				case 4 :
					// CSS.g:465:9: CLASS_REFERENCE ARGUMENTS
					{
					CLASS_REFERENCE78=(Token)match(input,CLASS_REFERENCE,FOLLOW_CLASS_REFERENCE_in_singleValue1439);  
					stream_CLASS_REFERENCE.add(CLASS_REFERENCE78);

					ARGUMENTS79=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1441);  
					stream_ARGUMENTS.add(ARGUMENTS79);

					// AST REWRITE
					// elements: ARGUMENTS, CLASS_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();
					// 466:13: -> ^( CLASS_REFERENCE ARGUMENTS )
					{
						// CSS.g:466: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:467:9: PROPERTY_REFERENCE ARGUMENTS
					{
					PROPERTY_REFERENCE80=(Token)match(input,PROPERTY_REFERENCE,FOLLOW_PROPERTY_REFERENCE_in_singleValue1471);  
					stream_PROPERTY_REFERENCE.add(PROPERTY_REFERENCE80);

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

					// 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();
					// 468:13: -> ^( PROPERTY_REFERENCE ARGUMENTS )
					{
						// CSS.g:468: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:469:9: EMBED ARGUMENTS
					{
					EMBED82=(Token)match(input,EMBED,FOLLOW_EMBED_in_singleValue1503);  
					stream_EMBED.add(EMBED82);

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

					// 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();
					// 470:13: -> ^( EMBED ARGUMENTS )
					{
						// CSS.g:470: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:471:9: URL ARGUMENTS ( formatOption )*
					{
					URL84=(Token)match(input,URL,FOLLOW_URL_in_singleValue1535);  
					stream_URL.add(URL84);

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

					// CSS.g:471:23: ( formatOption )*
					loop20:
					while (true) {
						int alt20=2;
						int LA20_0 = input.LA(1);
						if ( (LA20_0==FORMAT) ) {
							alt20=1;
						}

						switch (alt20) {
						case 1 :
							// CSS.g:471:23: formatOption
							{
							pushFollow(FOLLOW_formatOption_in_singleValue1539);
							formatOption86=formatOption();
							state._fsp--;

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

						default :
							break loop20;
						}
					}

					// AST REWRITE
					// elements: ARGUMENTS, formatOption, 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();
					// 471:39: -> ^( URL ARGUMENTS ( formatOption )* )
					{
						// CSS.g:471: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:471: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:472:9: LOCAL ARGUMENTS
					{
					LOCAL87=(Token)match(input,LOCAL,FOLLOW_LOCAL_in_singleValue1563);  
					stream_LOCAL.add(LOCAL87);

					ARGUMENTS88=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1565);  
					stream_ARGUMENTS.add(ARGUMENTS88);

					// AST REWRITE
					// elements: ARGUMENTS, LOCAL
					// 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();
					// 472:34: -> ^( LOCAL ARGUMENTS )
					{
						// CSS.g:472: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:473:9: CALC ARGUMENTS
					{
					CALC89=(Token)match(input,CALC,FOLLOW_CALC_in_singleValue1592);  
					stream_CALC.add(CALC89);

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

					// 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();
					// 473:33: -> ^( CALC ARGUMENTS )
					{
						// CSS.g:473: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:474:9: FUNCTIONS ARGUMENTS
					{
					FUNCTIONS91=(Token)match(input,FUNCTIONS,FOLLOW_FUNCTIONS_in_singleValue1621);  
					stream_FUNCTIONS.add(FUNCTIONS91);

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

					// AST REWRITE
					// elements: FUNCTIONS, 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();
					// 474:38: -> ^( FUNCTIONS ARGUMENTS )
					{
						// CSS.g:474: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:475:9: ALPHA_VALUE
					{
					root_0 = (Object)adaptor.nil();


					ALPHA_VALUE93=(Token)match(input,ALPHA_VALUE,FOLLOW_ALPHA_VALUE_in_singleValue1650); 
					ALPHA_VALUE93_tree = (Object)adaptor.create(ALPHA_VALUE93);
					adaptor.addChild(root_0, ALPHA_VALUE93_tree);

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


					SCALE_VALUE94=(Token)match(input,SCALE_VALUE,FOLLOW_SCALE_VALUE_in_singleValue1660); 
					SCALE_VALUE94_tree = (Object)adaptor.create(SCALE_VALUE94);
					adaptor.addChild(root_0, SCALE_VALUE94_tree);

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


					RECT_VALUE95=(Token)match(input,RECT_VALUE,FOLLOW_RECT_VALUE_in_singleValue1670); 
					RECT_VALUE95_tree = (Object)adaptor.create(RECT_VALUE95);
					adaptor.addChild(root_0, RECT_VALUE95_tree);

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


					ROTATE_VALUE96=(Token)match(input,ROTATE_VALUE,FOLLOW_ROTATE_VALUE_in_singleValue1680); 
					ROTATE_VALUE96_tree = (Object)adaptor.create(ROTATE_VALUE96);
					adaptor.addChild(root_0, ROTATE_VALUE96_tree);

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


					TRANSLATE3D_VALUE97=(Token)match(input,TRANSLATE3D_VALUE,FOLLOW_TRANSLATE3D_VALUE_in_singleValue1690); 
					TRANSLATE3D_VALUE97_tree = (Object)adaptor.create(TRANSLATE3D_VALUE97);
					adaptor.addChild(root_0, TRANSLATE3D_VALUE97_tree);

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


					RGB98=(Token)match(input,RGB,FOLLOW_RGB_in_singleValue1700); 
					RGB98_tree = (Object)adaptor.create(RGB98);
					adaptor.addChild(root_0, RGB98_tree);

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


					RGBA99=(Token)match(input,RGBA,FOLLOW_RGBA_in_singleValue1710); 
					RGBA99_tree = (Object)adaptor.create(RGBA99);
					adaptor.addChild(root_0, RGBA99_tree);

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


					STRING100=(Token)match(input,STRING,FOLLOW_STRING_in_singleValue1720); 
					STRING100_tree = (Object)adaptor.create(STRING100);
					adaptor.addChild(root_0, STRING100_tree);

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


					ID101=(Token)match(input,ID,FOLLOW_ID_in_singleValue1736); 
					ID101_tree = (Object)adaptor.create(ID101);
					adaptor.addChild(root_0, ID101_tree);

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


					OPERATOR102=(Token)match(input,OPERATOR,FOLLOW_OPERATOR_in_singleValue1746); 
					OPERATOR102_tree = (Object)adaptor.create(OPERATOR102);
					adaptor.addChild(root_0, OPERATOR102_tree);

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


					IMPORTANT103=(Token)match(input,IMPORTANT,FOLLOW_IMPORTANT_in_singleValue1756); 
					IMPORTANT103_tree = (Object)adaptor.create(IMPORTANT103);
					adaptor.addChild(root_0, IMPORTANT103_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:488: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 FORMAT104=null;
		Token ARGUMENTS105=null;

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

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

			ARGUMENTS105=(Token)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_formatOption1778);  
			stream_ARGUMENTS.add(ARGUMENTS105);

			// AST REWRITE
			// elements: ARGUMENTS, FORMAT
			// 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();
			// 489:26: -> ^( FORMAT ARGUMENTS )
			{
				// CSS.g:489: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:492: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_OPEN106=null;
		Token SQUARE_END110=null;
		ParserRuleReturnScope attributeName107 =null;
		ParserRuleReturnScope attributeOperator108 =null;
		ParserRuleReturnScope attributeValue109 =null;

		Object SQUARE_OPEN106_tree=null;
		Object SQUARE_END110_tree=null;

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


			SQUARE_OPEN106=(Token)match(input,SQUARE_OPEN,FOLLOW_SQUARE_OPEN_in_attributeSelector1806); 
			SQUARE_OPEN106_tree = (Object)adaptor.create(SQUARE_OPEN106);
			adaptor.addChild(root_0, SQUARE_OPEN106_tree);

			pushFollow(FOLLOW_attributeName_in_attributeSelector1808);
			attributeName107=attributeName();
			state._fsp--;

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

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

				switch (alt22) {
				case 1 :
					// CSS.g:493:35: attributeOperator
					{
					pushFollow(FOLLOW_attributeOperator_in_attributeSelector1810);
					attributeOperator108=attributeOperator();
					state._fsp--;

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

					}
					break;

				default :
					break loop22;
				}
			}

			// CSS.g:493:54: ( attributeValue )*
			loop23:
			while (true) {
				int alt23=2;
				int LA23_0 = input.LA(1);
				if ( (LA23_0==STRING) ) {
					alt23=1;
				}

				switch (alt23) {
				case 1 :
					// CSS.g:493:54: attributeValue
					{
					pushFollow(FOLLOW_attributeValue_in_attributeSelector1813);
					attributeValue109=attributeValue();
					state._fsp--;

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

					}
					break;

				default :
					break loop23;
				}
			}

			SQUARE_END110=(Token)match(input,SQUARE_END,FOLLOW_SQUARE_END_in_attributeSelector1816); 
			SQUARE_END110_tree = (Object)adaptor.create(SQUARE_END110);
			adaptor.addChild(root_0, SQUARE_END110_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:496: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 ID111=null;

		Object ID111_tree=null;

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


			ID111=(Token)match(input,ID,FOLLOW_ID_in_attributeName1840); 
			ID111_tree = (Object)adaptor.create(ID111);
			adaptor.addChild(root_0, ID111_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:500: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 set112=null;

		Object set112_tree=null;

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


			set112=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(set112));
				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:509: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 STRING113=null;

		Object STRING113_tree=null;

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


			STRING113=(Token)match(input,STRING,FOLLOW_STRING_in_attributeValue1943); 
			STRING113_tree = (Object)adaptor.create(STRING113);
			adaptor.addChild(root_0, STRING113_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[]{0x0020000240C20002L,0x0000000000000060L});
	public static final BitSet FOLLOW_condition_in_simpleSelectorFraction771 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_element_in_simpleSelectorFraction782 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOT_in_condition808 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_condition811 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_WORD_in_condition823 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_condition836 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_NOT_in_condition839 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_condition841 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_condition854 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_condition857 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_COLON_in_condition870 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_condition873 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_attributeSelector_in_condition886 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_element920 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_PIPE_in_element922 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ID_in_element925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_PERCENT_in_element935 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_element957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_element977 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BLOCK_OPEN_in_declarationsBlock1006 = new BitSet(new long[]{0x0000000200001000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_declarationsBlock1034 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_declaration_in_declarationsBlock1052 = new BitSet(new long[]{0x0000000000001000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_declarationsBlock1086 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_declaration_in_declarationsBlock1105 = new BitSet(new long[]{0x0000000000001000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SEMI_COLONS_in_declarationsBlock1135 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BLOCK_END_in_declarationsBlock1158 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_declaration1198 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_COLON_in_declaration1200 = new BitSet(new long[]{0xF162000661014010L,0x0000000000000C85L});
	public static final BitSet FOLLOW_value_in_declaration1202 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_multiValue_in_value1248 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_COMMA_in_value1252 = new BitSet(new long[]{0xF162000661014010L,0x0000000000000C85L});
	public static final BitSet FOLLOW_multiValue_in_value1254 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_singleValue_in_multiValue1335 = new BitSet(new long[]{0xF162000661014012L,0x0000000000000C85L});
	public static final BitSet FOLLOW_singleValue_in_multiValue1339 = new BitSet(new long[]{0xF162000661014012L,0x0000000000000C85L});
	public static final BitSet FOLLOW_NUMBER_WITH_PERCENT_in_singleValue1409 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_UNIT_in_singleValue1419 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_WORD_in_singleValue1429 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CLASS_REFERENCE_in_singleValue1439 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1441 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROPERTY_REFERENCE_in_singleValue1471 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1473 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EMBED_in_singleValue1503 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1505 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_URL_in_singleValue1535 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1537 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_formatOption_in_singleValue1539 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_LOCAL_in_singleValue1563 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1565 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALC_in_singleValue1592 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1594 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FUNCTIONS_in_singleValue1621 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1623 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALPHA_VALUE_in_singleValue1650 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SCALE_VALUE_in_singleValue1660 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RECT_VALUE_in_singleValue1670 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ROTATE_VALUE_in_singleValue1680 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRANSLATE3D_VALUE_in_singleValue1690 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RGB_in_singleValue1700 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RGBA_in_singleValue1710 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_singleValue1720 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_singleValue1736 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPERATOR_in_singleValue1746 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPORTANT_in_singleValue1756 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FORMAT_in_formatOption1776 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_formatOption1778 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SQUARE_OPEN_in_attributeSelector1806 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_attributeName_in_attributeSelector1808 = new BitSet(new long[]{0x0001000106100800L,0x0000000000000090L});
	public static final BitSet FOLLOW_attributeOperator_in_attributeSelector1810 = new BitSet(new long[]{0x0001000106100800L,0x0000000000000090L});
	public static final BitSet FOLLOW_attributeValue_in_attributeSelector1813 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000090L});
	public static final BitSet FOLLOW_SQUARE_END_in_attributeSelector1816 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_attributeName1840 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_attributeValue1943 = new BitSet(new long[]{0x0000000000000002L});
}