Package com.threelevers.css

Source Code of com.threelevers.css.CssSelectorsParser$DFA7

// $ANTLR 3.0.1 /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g 2011-12-21 22:33:13

    package com.threelevers.css;
   
    import static com.threelevers.css.CssSelectors.*;
    import static com.threelevers.css.Combinator.*;
    import static com.threelevers.css.AttributeComparator.*;
    import static com.threelevers.css.NthExpressions.*;
    import java.util.List;
    import java.util.LinkedList;


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

public class CssSelectorsParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "S", "IDENT", "STRING", "NUMBER", "DASH", "','", "'+'", "'>'", "'~'", "'*'", "'#'", "'.'", "'['", "'='", "'^='", "'$='", "'*='", "'~='", "'|='", "']'", "':'", "'first-child'", "'last-child'", "'only-child'", "'first-of-type'", "'last-of-type'", "'only-of-type'", "'empty'", "'enabled'", "'disabled'", "'checked'", "'selected'", "'nth-child('", "'odd'", "'even'", "')'", "'nth-last-child('", "'nth-of-type('", "'nth-last-of-type('", "'not('"
    };
    public static final int DASH=8;
    public static final int NUMBER=7;
    public static final int IDENT=5;
    public static final int S=4;
    public static final int EOF=-1;
    public static final int STRING=6;

        public CssSelectorsParser(TokenStream input) {
            super(input);
        }
       

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "/Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g"; }



    // $ANTLR start selectors
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:18:1: selectors returns [GroupingSelector selector] : s= selector ( ',' s= selector )* ;
    public final GroupingSelector selectors() throws RecognitionException {
        GroupingSelector selector = null;

        CombinableSelector s = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:19:5: (s= selector ( ',' s= selector )* )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:19:7: s= selector ( ',' s= selector )*
            {
            pushFollow(FOLLOW_selector_in_selectors38);
            s=selector();
            _fsp--;

             selector = CssSelectors.selectors(s);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:20:7: ( ',' s= selector )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==9) ) {
                    alt1=1;
                }


                switch (alt1) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:20:8: ',' s= selector
                  {
                  match(input,9,FOLLOW_9_in_selectors49);
                  pushFollow(FOLLOW_selector_in_selectors53);
                  s=selector();
                  _fsp--;

                   selector = selector.or(s);

                  }
                  break;

              default :
                  break loop1;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end selectors


    // $ANTLR start selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:23:1: selector returns [CombinableSelector selector] : ( S )* s= simple_selector (c= combinator s= simple_selector )* ;
    public final CombinableSelector selector() throws RecognitionException {
        CombinableSelector selector = null;

        SimpleSelector s = null;

        Combinator c = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:24:5: ( ( S )* s= simple_selector (c= combinator s= simple_selector )* )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:24:7: ( S )* s= simple_selector (c= combinator s= simple_selector )*
            {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:24:7: ( S )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==S) ) {
                    alt2=1;
                }


                switch (alt2) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:24:7: S
                  {
                  match(input,S,FOLLOW_S_in_selector83);

                  }
                  break;

              default :
                  break loop2;
                }
            } while (true);

            pushFollow(FOLLOW_simple_selector_in_selector88);
            s=simple_selector();
            _fsp--;

             selector = CssSelectors.selector(s);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:25:7: (c= combinator s= simple_selector )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==S||(LA3_0>=10 && LA3_0<=12)) ) {
                    alt3=1;
                }


                switch (alt3) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:25:9: c= combinator s= simple_selector
                  {
                  pushFollow(FOLLOW_combinator_in_selector102);
                  c=combinator();
                  _fsp--;

                  pushFollow(FOLLOW_simple_selector_in_selector106);
                  s=simple_selector();
                  _fsp--;

                  
                          switch (c) {
                              case DESCENDANT:
                                  selector = selector.ancestorOf(s);
                                  break;
                              case ADJACENT:
                                  selector = selector.adjacentTo(s);
                                  break;
                              case CHILDOF:
                                  selector = selector.parentOf(s);
                                  break;
                              case SIBLING:
                                  selector = selector.siblingOf(s);
                                  break;
                          }
                       

                  }
                  break;

              default :
                  break loop3;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end selector


    // $ANTLR start combinator
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:43:1: combinator returns [Combinator combinator] : ( S | ( S )* '+' | ( S )* '>' | ( S )* '~' ) ( S )* ;
    public final Combinator combinator() throws RecognitionException {
        Combinator combinator = null;

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:44:5: ( ( S | ( S )* '+' | ( S )* '>' | ( S )* '~' ) ( S )* )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:44:7: ( S | ( S )* '+' | ( S )* '>' | ( S )* '~' ) ( S )*
            {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:44:7: ( S | ( S )* '+' | ( S )* '>' | ( S )* '~' )
            int alt7=4;
            alt7 = dfa7.predict(input);
            switch (alt7) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:44:9: S
                    {
                    match(input,S,FOLLOW_S_in_combinator134);
                     combinator = DESCENDANT;

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:45:9: ( S )* '+'
                    {
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:45:9: ( S )*
                    loop4:
                    do {
                        int alt4=2;
                        int LA4_0 = input.LA(1);

                        if ( (LA4_0==S) ) {
                            alt4=1;
                        }


                        switch (alt4) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:45:9: S
                          {
                          match(input,S,FOLLOW_S_in_combinator146);

                          }
                          break;

                      default :
                          break loop4;
                        }
                    } while (true);

                    match(input,10,FOLLOW_10_in_combinator149);
                     combinator = ADJACENT;

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:46:9: ( S )* '>'
                    {
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:46:9: ( S )*
                    loop5:
                    do {
                        int alt5=2;
                        int LA5_0 = input.LA(1);

                        if ( (LA5_0==S) ) {
                            alt5=1;
                        }


                        switch (alt5) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:46:9: S
                          {
                          match(input,S,FOLLOW_S_in_combinator161);

                          }
                          break;

                      default :
                          break loop5;
                        }
                    } while (true);

                    match(input,11,FOLLOW_11_in_combinator164);
                     combinator = CHILDOF;

                    }
                    break;
                case 4 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:47:9: ( S )* '~'
                    {
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:47:9: ( S )*
                    loop6:
                    do {
                        int alt6=2;
                        int LA6_0 = input.LA(1);

                        if ( (LA6_0==S) ) {
                            alt6=1;
                        }


                        switch (alt6) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:47:9: S
                          {
                          match(input,S,FOLLOW_S_in_combinator176);

                          }
                          break;

                      default :
                          break loop6;
                        }
                    } while (true);

                    match(input,12,FOLLOW_12_in_combinator179);
                     combinator = SIBLING;

                    }
                    break;

            }

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:47:45: ( S )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==S) ) {
                    alt8=1;
                }


                switch (alt8) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:47:45: S
                  {
                  match(input,S,FOLLOW_S_in_combinator185);

                  }
                  break;

              default :
                  break loop8;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return combinator;
    }
    // $ANTLR end combinator


    // $ANTLR start simple_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:50:1: simple_selector returns [SimpleSelector selector] : ( ( type_selector | universal ) ( element_selector )* | e= element_selector (e= element_selector )* );
    public final SimpleSelector simple_selector() throws RecognitionException {
        SimpleSelector selector = null;

        ElementSelector e = null;

        TypeSelector type_selector1 = null;

        TypeSelector universal2 = null;

        ElementSelector element_selector3 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:51:5: ( ( type_selector | universal ) ( element_selector )* | e= element_selector (e= element_selector )* )
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==IDENT||LA12_0==13) ) {
                alt12=1;
            }
            else if ( ((LA12_0>=14 && LA12_0<=16)||LA12_0==24) ) {
                alt12=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("50:1: simple_selector returns [SimpleSelector selector] : ( ( type_selector | universal ) ( element_selector )* | e= element_selector (e= element_selector )* );", 12, 0, input);

                throw nvae;
            }
            switch (alt12) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:51:7: ( type_selector | universal ) ( element_selector )*
                    {
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:51:7: ( type_selector | universal )
                    int alt9=2;
                    int LA9_0 = input.LA(1);

                    if ( (LA9_0==IDENT) ) {
                        alt9=1;
                    }
                    else if ( (LA9_0==13) ) {
                        alt9=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("51:7: ( type_selector | universal )", 9, 0, input);

                        throw nvae;
                    }
                    switch (alt9) {
                        case 1 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:51:9: type_selector
                            {
                            pushFollow(FOLLOW_type_selector_in_simple_selector209);
                            type_selector1=type_selector();
                            _fsp--;

                             selector = type_selector1;

                            }
                            break;
                        case 2 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:52:9: universal
                            {
                            pushFollow(FOLLOW_universal_in_simple_selector222);
                            universal2=universal();
                            _fsp--;

                             selector = universal2;

                            }
                            break;

                    }

                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:53:7: ( element_selector )*
                    loop10:
                    do {
                        int alt10=2;
                        int LA10_0 = input.LA(1);

                        if ( ((LA10_0>=14 && LA10_0<=16)||LA10_0==24) ) {
                            alt10=1;
                        }


                        switch (alt10) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:53:9: element_selector
                          {
                          pushFollow(FOLLOW_element_selector_in_simple_selector236);
                          element_selector3=element_selector();
                          _fsp--;

                           selector = selector.and(element_selector3);

                          }
                          break;

                      default :
                          break loop10;
                        }
                    } while (true);


                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:54:7: e= element_selector (e= element_selector )*
                    {
                    pushFollow(FOLLOW_element_selector_in_simple_selector251);
                    e=element_selector();
                    _fsp--;

                     selector = e;
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:55:7: (e= element_selector )*
                    loop11:
                    do {
                        int alt11=2;
                        int LA11_0 = input.LA(1);

                        if ( ((LA11_0>=14 && LA11_0<=16)||LA11_0==24) ) {
                            alt11=1;
                        }


                        switch (alt11) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:55:9: e= element_selector
                          {
                          pushFollow(FOLLOW_element_selector_in_simple_selector265);
                          e=element_selector();
                          _fsp--;

                           selector.and(e);

                          }
                          break;

                      default :
                          break loop11;
                        }
                    } while (true);


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end simple_selector


    // $ANTLR start element_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:58:1: element_selector returns [ElementSelector selector] : ( id_selector | class_selector | attrib_selector | pseudo_selector );
    public final ElementSelector element_selector() throws RecognitionException {
        ElementSelector selector = null;

        ElementSelector id_selector4 = null;

        ElementSelector class_selector5 = null;

        ElementSelector attrib_selector6 = null;

        ElementSelector pseudo_selector7 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:59:5: ( id_selector | class_selector | attrib_selector | pseudo_selector )
            int alt13=4;
            switch ( input.LA(1) ) {
            case 14:
                {
                alt13=1;
                }
                break;
            case 15:
                {
                alt13=2;
                }
                break;
            case 16:
                {
                alt13=3;
                }
                break;
            case 24:
                {
                alt13=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("58:1: element_selector returns [ElementSelector selector] : ( id_selector | class_selector | attrib_selector | pseudo_selector );", 13, 0, input);

                throw nvae;
            }

            switch (alt13) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:59:7: id_selector
                    {
                    pushFollow(FOLLOW_id_selector_in_element_selector290);
                    id_selector4=id_selector();
                    _fsp--;

                     selector = id_selector4;

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:60:7: class_selector
                    {
                    pushFollow(FOLLOW_class_selector_in_element_selector300);
                    class_selector5=class_selector();
                    _fsp--;

                     selector = class_selector5;

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:61:7: attrib_selector
                    {
                    pushFollow(FOLLOW_attrib_selector_in_element_selector310);
                    attrib_selector6=attrib_selector();
                    _fsp--;

                     selector = attrib_selector6;

                    }
                    break;
                case 4 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:62:7: pseudo_selector
                    {
                    pushFollow(FOLLOW_pseudo_selector_in_element_selector320);
                    pseudo_selector7=pseudo_selector();
                    _fsp--;

                     selector = pseudo_selector7;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end element_selector


    // $ANTLR start type_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:66:1: type_selector returns [TypeSelector selector] : element_name ;
    public final TypeSelector type_selector() throws RecognitionException {
        TypeSelector selector = null;

        element_name_return element_name8 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:67:5: ( element_name )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:67:35: element_name
            {
            pushFollow(FOLLOW_element_name_in_type_selector346);
            element_name8=element_name();
            _fsp--;

             selector = tag(input.toString(element_name8.start,element_name8.stop));

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end type_selector

    public static class element_name_return extends ParserRuleReturnScope {
    };

    // $ANTLR start element_name
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:70:1: element_name : IDENT ;
    public final element_name_return element_name() throws RecognitionException {
        element_name_return retval = new element_name_return();
        retval.start = input.LT(1);

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:71:5: ( IDENT )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:71:7: IDENT
            {
            match(input,IDENT,FOLLOW_IDENT_in_element_name365);

            }

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

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end element_name


    // $ANTLR start universal
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:75:1: universal returns [TypeSelector selector] : '*' ;
    public final TypeSelector universal() throws RecognitionException {
        TypeSelector selector = null;

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:76:5: ( '*' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:76:35: '*'
            {
            match(input,13,FOLLOW_13_in_universal389);
             selector = any();

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end universal


    // $ANTLR start id_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:80:1: id_selector returns [ElementSelector selector] : '#' id= IDENT ;
    public final ElementSelector id_selector() throws RecognitionException {
        ElementSelector selector = null;

        Token id=null;

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:81:5: ( '#' id= IDENT )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:81:7: '#' id= IDENT
            {
            match(input,14,FOLLOW_14_in_id_selector413);
            id=(Token)input.LT(1);
            match(input,IDENT,FOLLOW_IDENT_in_id_selector417);
             selector = id(id.getText());

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end id_selector


    // $ANTLR start class_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:84:1: class_selector returns [ElementSelector selector] : '.' className= IDENT ;
    public final ElementSelector class_selector() throws RecognitionException {
        ElementSelector selector = null;

        Token className=null;

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:85:5: ( '.' className= IDENT )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:85:7: '.' className= IDENT
            {
            match(input,15,FOLLOW_15_in_class_selector440);
            className=(Token)input.LT(1);
            match(input,IDENT,FOLLOW_IDENT_in_class_selector444);
             selector = cssClass(className.getText());

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end class_selector


    // $ANTLR start attrib_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:89:1: attrib_selector returns [ElementSelector selector] : '[' ( S )* attribName= IDENT ( S )* ( ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT ) ( S )* )? ']' ;
    public final ElementSelector attrib_selector() throws RecognitionException {
        ElementSelector selector = null;

        Token attribName=null;
        Token v=null;
        Token a=null;

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:90:5: ( '[' ( S )* attribName= IDENT ( S )* ( ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT ) ( S )* )? ']' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:90:7: '[' ( S )* attribName= IDENT ( S )* ( ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT ) ( S )* )? ']'
            {
            match(input,16,FOLLOW_16_in_attrib_selector468);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:90:11: ( S )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==S) ) {
                    alt14=1;
                }


                switch (alt14) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:90:11: S
                  {
                  match(input,S,FOLLOW_S_in_attrib_selector470);

                  }
                  break;

              default :
                  break loop14;
                }
            } while (true);

            attribName=(Token)input.LT(1);
            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector477);
             selector = attrib(attribName.getText());
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:90:101: ( S )*
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( (LA15_0==S) ) {
                    alt15=1;
                }


                switch (alt15) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:90:101: S
                  {
                  match(input,S,FOLLOW_S_in_attrib_selector481);

                  }
                  break;

              default :
                  break loop15;
                }
            } while (true);

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:91:7: ( ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT ) ( S )* )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( ((LA30_0>=17 && LA30_0<=22)) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:91:9: ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT ) ( S )*
                    {
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:91:9: ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT )
                    int alt28=12;
                    alt28 = dfa28.predict(input);
                    switch (alt28) {
                        case 1 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:91:11: '=' ( S )* v= STRING
                            {
                            match(input,17,FOLLOW_17_in_attrib_selector494);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:91:15: ( S )*
                            loop16:
                            do {
                                int alt16=2;
                                int LA16_0 = input.LA(1);

                                if ( (LA16_0==S) ) {
                                    alt16=1;
                                }


                                switch (alt16) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:91:15: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector496);

                                  }
                                  break;

                              default :
                                  break loop16;
                                }
                            } while (true);

                            v=(Token)input.LT(1);
                            match(input,STRING,FOLLOW_STRING_in_attrib_selector501);
                             selector = ((AttributeSelector) selector).equalTo(v.getText());

                            }
                            break;
                        case 2 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:92:11: '^=' ( S )* v= STRING
                            {
                            match(input,18,FOLLOW_18_in_attrib_selector515);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:92:16: ( S )*
                            loop17:
                            do {
                                int alt17=2;
                                int LA17_0 = input.LA(1);

                                if ( (LA17_0==S) ) {
                                    alt17=1;
                                }


                                switch (alt17) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:92:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector517);

                                  }
                                  break;

                              default :
                                  break loop17;
                                }
                            } while (true);

                            v=(Token)input.LT(1);
                            match(input,STRING,FOLLOW_STRING_in_attrib_selector522);
                             selector = ((AttributeSelector) selector).startsWith(v.getText());

                            }
                            break;
                        case 3 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:93:11: '$=' ( S )* v= STRING
                            {
                            match(input,19,FOLLOW_19_in_attrib_selector536);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:93:16: ( S )*
                            loop18:
                            do {
                                int alt18=2;
                                int LA18_0 = input.LA(1);

                                if ( (LA18_0==S) ) {
                                    alt18=1;
                                }


                                switch (alt18) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:93:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector538);

                                  }
                                  break;

                              default :
                                  break loop18;
                                }
                            } while (true);

                            v=(Token)input.LT(1);
                            match(input,STRING,FOLLOW_STRING_in_attrib_selector543);
                             selector = ((AttributeSelector) selector).endsWith(v.getText());

                            }
                            break;
                        case 4 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:94:11: '*=' ( S )* v= STRING
                            {
                            match(input,20,FOLLOW_20_in_attrib_selector557);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:94:16: ( S )*
                            loop19:
                            do {
                                int alt19=2;
                                int LA19_0 = input.LA(1);

                                if ( (LA19_0==S) ) {
                                    alt19=1;
                                }


                                switch (alt19) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:94:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector559);

                                  }
                                  break;

                              default :
                                  break loop19;
                                }
                            } while (true);

                            v=(Token)input.LT(1);
                            match(input,STRING,FOLLOW_STRING_in_attrib_selector564);
                             selector = ((AttributeSelector) selector).contains(v.getText());

                            }
                            break;
                        case 5 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:95:11: '~=' ( S )* v= STRING
                            {
                            match(input,21,FOLLOW_21_in_attrib_selector578);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:95:16: ( S )*
                            loop20:
                            do {
                                int alt20=2;
                                int LA20_0 = input.LA(1);

                                if ( (LA20_0==S) ) {
                                    alt20=1;
                                }


                                switch (alt20) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:95:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector580);

                                  }
                                  break;

                              default :
                                  break loop20;
                                }
                            } while (true);

                            v=(Token)input.LT(1);
                            match(input,STRING,FOLLOW_STRING_in_attrib_selector585);
                             selector = ((AttributeSelector) selector).has(v.getText());

                            }
                            break;
                        case 6 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:96:11: '|=' ( S )* v= STRING
                            {
                            match(input,22,FOLLOW_22_in_attrib_selector599);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:96:16: ( S )*
                            loop21:
                            do {
                                int alt21=2;
                                int LA21_0 = input.LA(1);

                                if ( (LA21_0==S) ) {
                                    alt21=1;
                                }


                                switch (alt21) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:96:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector601);

                                  }
                                  break;

                              default :
                                  break loop21;
                                }
                            } while (true);

                            v=(Token)input.LT(1);
                            match(input,STRING,FOLLOW_STRING_in_attrib_selector606);
                             selector = ((AttributeSelector) selector).equalsLangSubcode(v.getText());

                            }
                            break;
                        case 7 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:97:11: '=' ( S )* a= IDENT
                            {
                            match(input,17,FOLLOW_17_in_attrib_selector620);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:97:15: ( S )*
                            loop22:
                            do {
                                int alt22=2;
                                int LA22_0 = input.LA(1);

                                if ( (LA22_0==S) ) {
                                    alt22=1;
                                }


                                switch (alt22) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:97:15: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector622);

                                  }
                                  break;

                              default :
                                  break loop22;
                                }
                            } while (true);

                            a=(Token)input.LT(1);
                            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector627);
                             selector = ((AttributeSelector) selector).equalTo(attrib(a.getText()));

                            }
                            break;
                        case 8 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:98:11: '^=' ( S )* a= IDENT
                            {
                            match(input,18,FOLLOW_18_in_attrib_selector641);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:98:16: ( S )*
                            loop23:
                            do {
                                int alt23=2;
                                int LA23_0 = input.LA(1);

                                if ( (LA23_0==S) ) {
                                    alt23=1;
                                }


                                switch (alt23) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:98:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector643);

                                  }
                                  break;

                              default :
                                  break loop23;
                                }
                            } while (true);

                            a=(Token)input.LT(1);
                            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector648);
                             selector = ((AttributeSelector) selector).startsWith(attrib(a.getText()));

                            }
                            break;
                        case 9 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:99:11: '$=' ( S )* a= IDENT
                            {
                            match(input,19,FOLLOW_19_in_attrib_selector662);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:99:16: ( S )*
                            loop24:
                            do {
                                int alt24=2;
                                int LA24_0 = input.LA(1);

                                if ( (LA24_0==S) ) {
                                    alt24=1;
                                }


                                switch (alt24) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:99:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector664);

                                  }
                                  break;

                              default :
                                  break loop24;
                                }
                            } while (true);

                            a=(Token)input.LT(1);
                            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector669);
                             selector = ((AttributeSelector) selector).endsWith(attrib(a.getText()));

                            }
                            break;
                        case 10 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:100:11: '*=' ( S )* a= IDENT
                            {
                            match(input,20,FOLLOW_20_in_attrib_selector683);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:100:16: ( S )*
                            loop25:
                            do {
                                int alt25=2;
                                int LA25_0 = input.LA(1);

                                if ( (LA25_0==S) ) {
                                    alt25=1;
                                }


                                switch (alt25) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:100:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector685);

                                  }
                                  break;

                              default :
                                  break loop25;
                                }
                            } while (true);

                            a=(Token)input.LT(1);
                            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector690);
                             selector = ((AttributeSelector) selector).contains(attrib(a.getText()));

                            }
                            break;
                        case 11 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:101:11: '~=' ( S )* a= IDENT
                            {
                            match(input,21,FOLLOW_21_in_attrib_selector704);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:101:16: ( S )*
                            loop26:
                            do {
                                int alt26=2;
                                int LA26_0 = input.LA(1);

                                if ( (LA26_0==S) ) {
                                    alt26=1;
                                }


                                switch (alt26) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:101:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector706);

                                  }
                                  break;

                              default :
                                  break loop26;
                                }
                            } while (true);

                            a=(Token)input.LT(1);
                            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector711);
                             selector = ((AttributeSelector) selector).has(attrib(a.getText()));

                            }
                            break;
                        case 12 :
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:102:11: '|=' ( S )* a= IDENT
                            {
                            match(input,22,FOLLOW_22_in_attrib_selector725);
                            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:102:16: ( S )*
                            loop27:
                            do {
                                int alt27=2;
                                int LA27_0 = input.LA(1);

                                if ( (LA27_0==S) ) {
                                    alt27=1;
                                }


                                switch (alt27) {
                              case 1 :
                                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:102:16: S
                                  {
                                  match(input,S,FOLLOW_S_in_attrib_selector727);

                                  }
                                  break;

                              default :
                                  break loop27;
                                }
                            } while (true);

                            a=(Token)input.LT(1);
                            match(input,IDENT,FOLLOW_IDENT_in_attrib_selector732);
                             selector = ((AttributeSelector) selector).equalsLangSubcode(attrib(a.getText()));

                            }
                            break;

                    }

                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:103:11: ( S )*
                    loop29:
                    do {
                        int alt29=2;
                        int LA29_0 = input.LA(1);

                        if ( (LA29_0==S) ) {
                            alt29=1;
                        }


                        switch (alt29) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:103:11: S
                          {
                          match(input,S,FOLLOW_S_in_attrib_selector746);

                          }
                          break;

                      default :
                          break loop29;
                        }
                    } while (true);


                    }
                    break;

            }

            match(input,23,FOLLOW_23_in_attrib_selector758);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end attrib_selector


    // $ANTLR start pseudo_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:107:1: pseudo_selector returns [ElementSelector selector] : ':' ( ':' )? ( negation | functional_pseudo_selector ) ;
    public final ElementSelector pseudo_selector() throws RecognitionException {
        ElementSelector selector = null;

        ElementSelector negation9 = null;

        ElementSelector functional_pseudo_selector10 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:112:5: ( ':' ( ':' )? ( negation | functional_pseudo_selector ) )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:112:7: ':' ( ':' )? ( negation | functional_pseudo_selector )
            {
            match(input,24,FOLLOW_24_in_pseudo_selector803);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:112:11: ( ':' )?
            int alt31=2;
            int LA31_0 = input.LA(1);

            if ( (LA31_0==24) ) {
                alt31=1;
            }
            switch (alt31) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:112:11: ':'
                    {
                    match(input,24,FOLLOW_24_in_pseudo_selector805);

                    }
                    break;

            }

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:113:9: ( negation | functional_pseudo_selector )
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==43) ) {
                alt32=1;
            }
            else if ( ((LA32_0>=25 && LA32_0<=36)||(LA32_0>=40 && LA32_0<=42)) ) {
                alt32=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("113:9: ( negation | functional_pseudo_selector )", 32, 0, input);

                throw nvae;
            }
            switch (alt32) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:113:11: negation
                    {
                    pushFollow(FOLLOW_negation_in_pseudo_selector818);
                    negation9=negation();
                    _fsp--;

                     selector = negation9;

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:114:11: functional_pseudo_selector
                    {
                    pushFollow(FOLLOW_functional_pseudo_selector_in_pseudo_selector832);
                    functional_pseudo_selector10=functional_pseudo_selector();
                    _fsp--;

                     selector = functional_pseudo_selector10;

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end pseudo_selector


    // $ANTLR start functional_pseudo_selector
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:118:1: functional_pseudo_selector returns [ElementSelector selector] : ( nth_child | nth_last_child | 'first-child' | 'last-child' | 'only-child' | nth_of_type | nth_last_of_type | 'first-of-type' | 'last-of-type' | 'only-of-type' | 'empty' | 'enabled' | 'disabled' | 'checked' | 'selected' );
    public final ElementSelector functional_pseudo_selector() throws RecognitionException {
        ElementSelector selector = null;

        ElementSelector nth_child11 = null;

        ElementSelector nth_last_child12 = null;

        ElementSelector nth_of_type13 = null;

        ElementSelector nth_last_of_type14 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:119:5: ( nth_child | nth_last_child | 'first-child' | 'last-child' | 'only-child' | nth_of_type | nth_last_of_type | 'first-of-type' | 'last-of-type' | 'only-of-type' | 'empty' | 'enabled' | 'disabled' | 'checked' | 'selected' )
            int alt33=15;
            switch ( input.LA(1) ) {
            case 36:
                {
                alt33=1;
                }
                break;
            case 40:
                {
                alt33=2;
                }
                break;
            case 25:
                {
                alt33=3;
                }
                break;
            case 26:
                {
                alt33=4;
                }
                break;
            case 27:
                {
                alt33=5;
                }
                break;
            case 41:
                {
                alt33=6;
                }
                break;
            case 42:
                {
                alt33=7;
                }
                break;
            case 28:
                {
                alt33=8;
                }
                break;
            case 29:
                {
                alt33=9;
                }
                break;
            case 30:
                {
                alt33=10;
                }
                break;
            case 31:
                {
                alt33=11;
                }
                break;
            case 32:
                {
                alt33=12;
                }
                break;
            case 33:
                {
                alt33=13;
                }
                break;
            case 34:
                {
                alt33=14;
                }
                break;
            case 35:
                {
                alt33=15;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("118:1: functional_pseudo_selector returns [ElementSelector selector] : ( nth_child | nth_last_child | 'first-child' | 'last-child' | 'only-child' | nth_of_type | nth_last_of_type | 'first-of-type' | 'last-of-type' | 'only-of-type' | 'empty' | 'enabled' | 'disabled' | 'checked' | 'selected' );", 33, 0, input);

                throw nvae;
            }

            switch (alt33) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:119:7: nth_child
                    {
                    pushFollow(FOLLOW_nth_child_in_functional_pseudo_selector865);
                    nth_child11=nth_child();
                    _fsp--;

                     selector = nth_child11;

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:120:7: nth_last_child
                    {
                    pushFollow(FOLLOW_nth_last_child_in_functional_pseudo_selector875);
                    nth_last_child12=nth_last_child();
                    _fsp--;

                     selector = nth_last_child12;

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:121:7: 'first-child'
                    {
                    match(input,25,FOLLOW_25_in_functional_pseudo_selector885);
                     selector = firstChild();

                    }
                    break;
                case 4 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:122:7: 'last-child'
                    {
                    match(input,26,FOLLOW_26_in_functional_pseudo_selector895);
                     selector = lastChild();

                    }
                    break;
                case 5 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:123:7: 'only-child'
                    {
                    match(input,27,FOLLOW_27_in_functional_pseudo_selector905);
                     selector = onlyChild();

                    }
                    break;
                case 6 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:124:7: nth_of_type
                    {
                    pushFollow(FOLLOW_nth_of_type_in_functional_pseudo_selector915);
                    nth_of_type13=nth_of_type();
                    _fsp--;

                     selector = nth_of_type13;

                    }
                    break;
                case 7 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:125:7: nth_last_of_type
                    {
                    pushFollow(FOLLOW_nth_last_of_type_in_functional_pseudo_selector925);
                    nth_last_of_type14=nth_last_of_type();
                    _fsp--;

                     selector = nth_last_of_type14;

                    }
                    break;
                case 8 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:126:7: 'first-of-type'
                    {
                    match(input,28,FOLLOW_28_in_functional_pseudo_selector935);
                     selector = firstOfType();

                    }
                    break;
                case 9 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:127:7: 'last-of-type'
                    {
                    match(input,29,FOLLOW_29_in_functional_pseudo_selector945);
                     selector = lastOfType();

                    }
                    break;
                case 10 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:128:7: 'only-of-type'
                    {
                    match(input,30,FOLLOW_30_in_functional_pseudo_selector955);
                     selector = onlyOfType();

                    }
                    break;
                case 11 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:129:7: 'empty'
                    {
                    match(input,31,FOLLOW_31_in_functional_pseudo_selector965);
                     selector = empty();

                    }
                    break;
                case 12 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:130:7: 'enabled'
                    {
                    match(input,32,FOLLOW_32_in_functional_pseudo_selector975);
                     selector = enabled();

                    }
                    break;
                case 13 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:131:7: 'disabled'
                    {
                    match(input,33,FOLLOW_33_in_functional_pseudo_selector985);
                     selector = disabled();

                    }
                    break;
                case 14 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:132:7: 'checked'
                    {
                    match(input,34,FOLLOW_34_in_functional_pseudo_selector995);
                     selector = checked();

                    }
                    break;
                case 15 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:133:7: 'selected'
                    {
                    match(input,35,FOLLOW_35_in_functional_pseudo_selector1005);
                     selector = selected();

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end functional_pseudo_selector


    // $ANTLR start nth_child
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:136:1: nth_child returns [ElementSelector selector] : 'nth-child(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' ;
    public final ElementSelector nth_child() throws RecognitionException {
        ElementSelector selector = null;

        nth_expr_return nth_expr15 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:137:5: ( 'nth-child(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:137:7: 'nth-child(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')'
            {
            match(input,36,FOLLOW_36_in_nth_child1032);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:137:20: ( S )*
            loop34:
            do {
                int alt34=2;
                int LA34_0 = input.LA(1);

                if ( (LA34_0==S) ) {
                    alt34=1;
                }


                switch (alt34) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:137:20: S
                  {
                  match(input,S,FOLLOW_S_in_nth_child1034);

                  }
                  break;

              default :
                  break loop34;
                }
            } while (true);

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:138:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )
            int alt37=3;
            switch ( input.LA(1) ) {
            case IDENT:
            case STRING:
            case NUMBER:
            case DASH:
            case 10:
                {
                alt37=1;
                }
                break;
            case 37:
                {
                alt37=2;
                }
                break;
            case 38:
                {
                alt37=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("138:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )", 37, 0, input);

                throw nvae;
            }

            switch (alt37) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:138:9: nth_expr
                    {
                    pushFollow(FOLLOW_nth_expr_in_nth_child1045);
                    nth_expr15=nth_expr();
                    _fsp--;


                              NthExpression nthExpr = CssSelectorsParserHelper.parseNthExpression(input.toString(nth_expr15.start,nth_expr15.stop));
                              selector = nthChild(nthExpr);
                           

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:142:9: 'odd' ( S )*
                    {
                    match(input,37,FOLLOW_37_in_nth_child1057);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:142:15: ( S )*
                    loop35:
                    do {
                        int alt35=2;
                        int LA35_0 = input.LA(1);

                        if ( (LA35_0==S) ) {
                            alt35=1;
                        }


                        switch (alt35) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:142:15: S
                          {
                          match(input,S,FOLLOW_S_in_nth_child1059);

                          }
                          break;

                      default :
                          break loop35;
                        }
                    } while (true);

                     selector = nthChild(odd);

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:143:9: 'even' ( S )*
                    {
                    match(input,38,FOLLOW_38_in_nth_child1072);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:143:16: ( S )*
                    loop36:
                    do {
                        int alt36=2;
                        int LA36_0 = input.LA(1);

                        if ( (LA36_0==S) ) {
                            alt36=1;
                        }


                        switch (alt36) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:143:16: S
                          {
                          match(input,S,FOLLOW_S_in_nth_child1074);

                          }
                          break;

                      default :
                          break loop36;
                        }
                    } while (true);

                     selector = nthChild(even);

                    }
                    break;

            }

            match(input,39,FOLLOW_39_in_nth_child1087);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end nth_child


    // $ANTLR start nth_last_child
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:147:1: nth_last_child returns [ElementSelector selector] : 'nth-last-child(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' ;
    public final ElementSelector nth_last_child() throws RecognitionException {
        ElementSelector selector = null;

        nth_expr_return nth_expr16 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:148:5: ( 'nth-last-child(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:148:7: 'nth-last-child(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')'
            {
            match(input,40,FOLLOW_40_in_nth_last_child1112);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:148:25: ( S )*
            loop38:
            do {
                int alt38=2;
                int LA38_0 = input.LA(1);

                if ( (LA38_0==S) ) {
                    alt38=1;
                }


                switch (alt38) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:148:25: S
                  {
                  match(input,S,FOLLOW_S_in_nth_last_child1114);

                  }
                  break;

              default :
                  break loop38;
                }
            } while (true);

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:149:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )
            int alt41=3;
            switch ( input.LA(1) ) {
            case IDENT:
            case STRING:
            case NUMBER:
            case DASH:
            case 10:
                {
                alt41=1;
                }
                break;
            case 37:
                {
                alt41=2;
                }
                break;
            case 38:
                {
                alt41=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("149:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )", 41, 0, input);

                throw nvae;
            }

            switch (alt41) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:149:9: nth_expr
                    {
                    pushFollow(FOLLOW_nth_expr_in_nth_last_child1125);
                    nth_expr16=nth_expr();
                    _fsp--;


                              NthExpression nthExpr = CssSelectorsParserHelper.parseNthExpression(input.toString(nth_expr16.start,nth_expr16.stop));
                              selector = nthLastChild(nthExpr);
                           

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:153:9: 'odd' ( S )*
                    {
                    match(input,37,FOLLOW_37_in_nth_last_child1137);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:153:15: ( S )*
                    loop39:
                    do {
                        int alt39=2;
                        int LA39_0 = input.LA(1);

                        if ( (LA39_0==S) ) {
                            alt39=1;
                        }


                        switch (alt39) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:153:15: S
                          {
                          match(input,S,FOLLOW_S_in_nth_last_child1139);

                          }
                          break;

                      default :
                          break loop39;
                        }
                    } while (true);

                     selector = nthLastChild(odd);

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:154:9: 'even' ( S )*
                    {
                    match(input,38,FOLLOW_38_in_nth_last_child1152);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:154:16: ( S )*
                    loop40:
                    do {
                        int alt40=2;
                        int LA40_0 = input.LA(1);

                        if ( (LA40_0==S) ) {
                            alt40=1;
                        }


                        switch (alt40) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:154:16: S
                          {
                          match(input,S,FOLLOW_S_in_nth_last_child1154);

                          }
                          break;

                      default :
                          break loop40;
                        }
                    } while (true);

                     selector = nthLastChild(even);

                    }
                    break;

            }

            match(input,39,FOLLOW_39_in_nth_last_child1167);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end nth_last_child


    // $ANTLR start nth_of_type
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:158:1: nth_of_type returns [ElementSelector selector] : 'nth-of-type(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' ;
    public final ElementSelector nth_of_type() throws RecognitionException {
        ElementSelector selector = null;

        nth_expr_return nth_expr17 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:159:5: ( 'nth-of-type(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:159:7: 'nth-of-type(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')'
            {
            match(input,41,FOLLOW_41_in_nth_of_type1194);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:159:22: ( S )*
            loop42:
            do {
                int alt42=2;
                int LA42_0 = input.LA(1);

                if ( (LA42_0==S) ) {
                    alt42=1;
                }


                switch (alt42) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:159:22: S
                  {
                  match(input,S,FOLLOW_S_in_nth_of_type1196);

                  }
                  break;

              default :
                  break loop42;
                }
            } while (true);

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:160:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )
            int alt45=3;
            switch ( input.LA(1) ) {
            case IDENT:
            case STRING:
            case NUMBER:
            case DASH:
            case 10:
                {
                alt45=1;
                }
                break;
            case 37:
                {
                alt45=2;
                }
                break;
            case 38:
                {
                alt45=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("160:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )", 45, 0, input);

                throw nvae;
            }

            switch (alt45) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:160:9: nth_expr
                    {
                    pushFollow(FOLLOW_nth_expr_in_nth_of_type1207);
                    nth_expr17=nth_expr();
                    _fsp--;


                              NthExpression nthExpr = CssSelectorsParserHelper.parseNthExpression(input.toString(nth_expr17.start,nth_expr17.stop));
                              selector = nthOfType(nthExpr);
                           

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:164:9: 'odd' ( S )*
                    {
                    match(input,37,FOLLOW_37_in_nth_of_type1219);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:164:15: ( S )*
                    loop43:
                    do {
                        int alt43=2;
                        int LA43_0 = input.LA(1);

                        if ( (LA43_0==S) ) {
                            alt43=1;
                        }


                        switch (alt43) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:164:15: S
                          {
                          match(input,S,FOLLOW_S_in_nth_of_type1221);

                          }
                          break;

                      default :
                          break loop43;
                        }
                    } while (true);

                     selector = nthOfType(odd);

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:165:9: 'even' ( S )*
                    {
                    match(input,38,FOLLOW_38_in_nth_of_type1234);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:165:16: ( S )*
                    loop44:
                    do {
                        int alt44=2;
                        int LA44_0 = input.LA(1);

                        if ( (LA44_0==S) ) {
                            alt44=1;
                        }


                        switch (alt44) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:165:16: S
                          {
                          match(input,S,FOLLOW_S_in_nth_of_type1236);

                          }
                          break;

                      default :
                          break loop44;
                        }
                    } while (true);

                     selector = nthOfType(even);

                    }
                    break;

            }

            match(input,39,FOLLOW_39_in_nth_of_type1249);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end nth_of_type


    // $ANTLR start nth_last_of_type
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:169:1: nth_last_of_type returns [ElementSelector selector] : 'nth-last-of-type(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' ;
    public final ElementSelector nth_last_of_type() throws RecognitionException {
        ElementSelector selector = null;

        nth_expr_return nth_expr18 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:170:5: ( 'nth-last-of-type(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:170:7: 'nth-last-of-type(' ( S )* ( nth_expr | 'odd' ( S )* | 'even' ( S )* ) ')'
            {
            match(input,42,FOLLOW_42_in_nth_last_of_type1270);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:170:27: ( S )*
            loop46:
            do {
                int alt46=2;
                int LA46_0 = input.LA(1);

                if ( (LA46_0==S) ) {
                    alt46=1;
                }


                switch (alt46) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:170:27: S
                  {
                  match(input,S,FOLLOW_S_in_nth_last_of_type1272);

                  }
                  break;

              default :
                  break loop46;
                }
            } while (true);

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:171:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )
            int alt49=3;
            switch ( input.LA(1) ) {
            case IDENT:
            case STRING:
            case NUMBER:
            case DASH:
            case 10:
                {
                alt49=1;
                }
                break;
            case 37:
                {
                alt49=2;
                }
                break;
            case 38:
                {
                alt49=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("171:7: ( nth_expr | 'odd' ( S )* | 'even' ( S )* )", 49, 0, input);

                throw nvae;
            }

            switch (alt49) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:171:9: nth_expr
                    {
                    pushFollow(FOLLOW_nth_expr_in_nth_last_of_type1283);
                    nth_expr18=nth_expr();
                    _fsp--;


                              NthExpression nthExpr = CssSelectorsParserHelper.parseNthExpression(input.toString(nth_expr18.start,nth_expr18.stop));
                              selector = nthLastOfType(nthExpr);
                           

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:175:9: 'odd' ( S )*
                    {
                    match(input,37,FOLLOW_37_in_nth_last_of_type1295);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:175:15: ( S )*
                    loop47:
                    do {
                        int alt47=2;
                        int LA47_0 = input.LA(1);

                        if ( (LA47_0==S) ) {
                            alt47=1;
                        }


                        switch (alt47) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:175:15: S
                          {
                          match(input,S,FOLLOW_S_in_nth_last_of_type1297);

                          }
                          break;

                      default :
                          break loop47;
                        }
                    } while (true);

                     selector = nthLastOfType(odd);

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:176:9: 'even' ( S )*
                    {
                    match(input,38,FOLLOW_38_in_nth_last_of_type1310);
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:176:16: ( S )*
                    loop48:
                    do {
                        int alt48=2;
                        int LA48_0 = input.LA(1);

                        if ( (LA48_0==S) ) {
                            alt48=1;
                        }


                        switch (alt48) {
                      case 1 :
                          // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:176:16: S
                          {
                          match(input,S,FOLLOW_S_in_nth_last_of_type1312);

                          }
                          break;

                      default :
                          break loop48;
                        }
                    } while (true);

                     selector = nthLastOfType(even);

                    }
                    break;

            }

            match(input,39,FOLLOW_39_in_nth_last_of_type1325);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end nth_last_of_type

    public static class nth_expr_return extends ParserRuleReturnScope {
    };

    // $ANTLR start nth_expr
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:190:1: nth_expr : ( ( '+' | '-' | NUMBER | STRING | IDENT ) ( S )* )+ ;
    public final nth_expr_return nth_expr() throws RecognitionException {
        nth_expr_return retval = new nth_expr_return();
        retval.start = input.LT(1);

        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:191:5: ( ( ( '+' | '-' | NUMBER | STRING | IDENT ) ( S )* )+ )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:191:7: ( ( '+' | '-' | NUMBER | STRING | IDENT ) ( S )* )+
            {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:191:7: ( ( '+' | '-' | NUMBER | STRING | IDENT ) ( S )* )+
            int cnt51=0;
            loop51:
            do {
                int alt51=2;
                int LA51_0 = input.LA(1);

                if ( ((LA51_0>=IDENT && LA51_0<=DASH)||LA51_0==10) ) {
                    alt51=1;
                }


                switch (alt51) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:191:9: ( '+' | '-' | NUMBER | STRING | IDENT ) ( S )*
                  {
                  if ( (input.LA(1)>=IDENT && input.LA(1)<=DASH)||input.LA(1)==10 ) {
                      input.consume();
                      errorRecovery=false;
                  }
                  else {
                      MismatchedSetException mse =
                          new MismatchedSetException(null,input);
                      recoverFromMismatchedSet(input,mse,FOLLOW_set_in_nth_expr1354);    throw mse;
                  }

                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:191:49: ( S )*
                  loop50:
                  do {
                      int alt50=2;
                      int LA50_0 = input.LA(1);

                      if ( (LA50_0==S) ) {
                          alt50=1;
                      }


                      switch (alt50) {
                    case 1 :
                        // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:191:49: S
                        {
                        match(input,S,FOLLOW_S_in_nth_expr1376);

                        }
                        break;

                    default :
                        break loop50;
                      }
                  } while (true);


                  }
                  break;

              default :
                  if ( cnt51 >= 1 ) break loop51;
                        EarlyExitException eee =
                            new EarlyExitException(51, input);
                        throw eee;
                }
                cnt51++;
            } while (true);


            }

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

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end nth_expr


    // $ANTLR start negation
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:194:1: negation returns [ElementSelector selector ] : 'not(' ( S )* negation_arg ( S )* ')' ;
    public final ElementSelector negation() throws RecognitionException {
        ElementSelector selector = null;

        ElementSelector negation_arg19 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:195:5: ( 'not(' ( S )* negation_arg ( S )* ')' )
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:195:7: 'not(' ( S )* negation_arg ( S )* ')'
            {
            match(input,43,FOLLOW_43_in_negation1402);
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:195:14: ( S )*
            loop52:
            do {
                int alt52=2;
                int LA52_0 = input.LA(1);

                if ( (LA52_0==S) ) {
                    alt52=1;
                }


                switch (alt52) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:195:14: S
                  {
                  match(input,S,FOLLOW_S_in_negation1404);

                  }
                  break;

              default :
                  break loop52;
                }
            } while (true);

            pushFollow(FOLLOW_negation_arg_in_negation1407);
            negation_arg19=negation_arg();
            _fsp--;

            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:195:30: ( S )*
            loop53:
            do {
                int alt53=2;
                int LA53_0 = input.LA(1);

                if ( (LA53_0==S) ) {
                    alt53=1;
                }


                switch (alt53) {
              case 1 :
                  // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:195:30: S
                  {
                  match(input,S,FOLLOW_S_in_negation1409);

                  }
                  break;

              default :
                  break loop53;
                }
            } while (true);

            match(input,39,FOLLOW_39_in_negation1412);
             selector = not(negation_arg19);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end negation


    // $ANTLR start negation_arg
    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:198:1: negation_arg returns [ElementSelector selector] : ( type_selector | universal | id_selector | class_selector | attrib_selector | functional_pseudo_selector );
    public final ElementSelector negation_arg() throws RecognitionException {
        ElementSelector selector = null;

        TypeSelector type_selector20 = null;

        TypeSelector universal21 = null;

        ElementSelector id_selector22 = null;

        ElementSelector class_selector23 = null;

        ElementSelector attrib_selector24 = null;


        try {
            // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:199:5: ( type_selector | universal | id_selector | class_selector | attrib_selector | functional_pseudo_selector )
            int alt54=6;
            switch ( input.LA(1) ) {
            case IDENT:
                {
                alt54=1;
                }
                break;
            case 13:
                {
                alt54=2;
                }
                break;
            case 14:
                {
                alt54=3;
                }
                break;
            case 15:
                {
                alt54=4;
                }
                break;
            case 16:
                {
                alt54=5;
                }
                break;
            case 25:
            case 26:
            case 27:
            case 28:
            case 29:
            case 30:
            case 31:
            case 32:
            case 33:
            case 34:
            case 35:
            case 36:
            case 40:
            case 41:
            case 42:
                {
                alt54=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("198:1: negation_arg returns [ElementSelector selector] : ( type_selector | universal | id_selector | class_selector | attrib_selector | functional_pseudo_selector );", 54, 0, input);

                throw nvae;
            }

            switch (alt54) {
                case 1 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:199:7: type_selector
                    {
                    pushFollow(FOLLOW_type_selector_in_negation_arg1435);
                    type_selector20=type_selector();
                    _fsp--;

                     selector = type_selector20;

                    }
                    break;
                case 2 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:200:7: universal
                    {
                    pushFollow(FOLLOW_universal_in_negation_arg1445);
                    universal21=universal();
                    _fsp--;

                     selector = universal21;

                    }
                    break;
                case 3 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:201:7: id_selector
                    {
                    pushFollow(FOLLOW_id_selector_in_negation_arg1455);
                    id_selector22=id_selector();
                    _fsp--;

                     selector = id_selector22;

                    }
                    break;
                case 4 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:202:7: class_selector
                    {
                    pushFollow(FOLLOW_class_selector_in_negation_arg1465);
                    class_selector23=class_selector();
                    _fsp--;

                     selector = class_selector23;

                    }
                    break;
                case 5 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:203:7: attrib_selector
                    {
                    pushFollow(FOLLOW_attrib_selector_in_negation_arg1475);
                    attrib_selector24=attrib_selector();
                    _fsp--;

                     selector = attrib_selector24;

                    }
                    break;
                case 6 :
                    // /Users/vtence/Development/Trainings/cssselectors/src/main/antlr/com/threelevers/css/CssSelectors.g:204:7: functional_pseudo_selector
                    {
                    pushFollow(FOLLOW_functional_pseudo_selector_in_negation_arg1485);
                    functional_pseudo_selector();
                    _fsp--;


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selector;
    }
    // $ANTLR end negation_arg


    protected DFA7 dfa7 = new DFA7(this);
    protected DFA28 dfa28 = new DFA28(this);
    static final String DFA7_eotS =
        "\7\uffff";
    static final String DFA7_eofS =
        "\7\uffff";
    static final String DFA7_minS =
        "\2\4\3\uffff\1\4\1\uffff";
    static final String DFA7_maxS =
        "\1\14\1\30\3\uffff\1\30\1\uffff";
    static final String DFA7_acceptS =
        "\2\uffff\1\2\1\3\1\4\1\uffff\1\1";
    static final String DFA7_specialS =
        "\7\uffff}>";
    static final String[] DFA7_transitionS = {
            "\1\1\5\uffff\1\2\1\3\1\4",
            "\1\5\1\6\4\uffff\1\2\1\3\1\4\4\6\7\uffff\1\6",
            "",
            "",
            "",
            "\1\5\1\6\4\uffff\1\2\1\3\1\4\4\6\7\uffff\1\6",
            ""
    };

    static final short[] DFA7_eot = DFA.unpackEncodedString(DFA7_eotS);
    static final short[] DFA7_eof = DFA.unpackEncodedString(DFA7_eofS);
    static final char[] DFA7_min = DFA.unpackEncodedStringToUnsignedChars(DFA7_minS);
    static final char[] DFA7_max = DFA.unpackEncodedStringToUnsignedChars(DFA7_maxS);
    static final short[] DFA7_accept = DFA.unpackEncodedString(DFA7_acceptS);
    static final short[] DFA7_special = DFA.unpackEncodedString(DFA7_specialS);
    static final short[][] DFA7_transition;

    static {
        int numStates = DFA7_transitionS.length;
        DFA7_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA7_transition[i] = DFA.unpackEncodedString(DFA7_transitionS[i]);
        }
    }

    class DFA7 extends DFA {

        public DFA7(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 7;
            this.eot = DFA7_eot;
            this.eof = DFA7_eof;
            this.min = DFA7_min;
            this.max = DFA7_max;
            this.accept = DFA7_accept;
            this.special = DFA7_special;
            this.transition = DFA7_transition;
        }
        public String getDescription() {
            return "44:7: ( S | ( S )* '+' | ( S )* '>' | ( S )* '~' )";
        }
    }
    static final String DFA28_eotS =
        "\31\uffff";
    static final String DFA28_eofS =
        "\31\uffff";
    static final String DFA28_minS =
        "\1\21\7\4\2\uffff\1\4\2\uffff\1\4\2\uffff\1\4\2\uffff\1\4\2\uffff"+
        "\1\4\2\uffff";
    static final String DFA28_maxS =
        "\1\26\7\6\2\uffff\1\6\2\uffff\1\6\2\uffff\1\6\2\uffff\1\6\2\uffff"+
        "\1\6\2\uffff";
    static final String DFA28_acceptS =
        "\10\uffff\1\1\1\7\1\uffff\1\10\1\2\1\uffff\1\3\1\11\1\uffff\1\4"+
        "\1\12\1\uffff\1\13\1\5\1\uffff\1\14\1\6";
    static final String DFA28_specialS =
        "\31\uffff}>";
    static final String[] DFA28_transitionS = {
            "\1\1\1\2\1\3\1\4\1\5\1\6",
            "\1\7\1\11\1\10",
            "\1\12\1\13\1\14",
            "\1\15\1\17\1\16",
            "\1\20\1\22\1\21",
            "\1\23\1\24\1\25",
            "\1\26\1\27\1\30",
            "\1\7\1\11\1\10",
            "",
            "",
            "\1\12\1\13\1\14",
            "",
            "",
            "\1\15\1\17\1\16",
            "",
            "",
            "\1\20\1\22\1\21",
            "",
            "",
            "\1\23\1\24\1\25",
            "",
            "",
            "\1\26\1\27\1\30",
            "",
            ""
    };

    static final short[] DFA28_eot = DFA.unpackEncodedString(DFA28_eotS);
    static final short[] DFA28_eof = DFA.unpackEncodedString(DFA28_eofS);
    static final char[] DFA28_min = DFA.unpackEncodedStringToUnsignedChars(DFA28_minS);
    static final char[] DFA28_max = DFA.unpackEncodedStringToUnsignedChars(DFA28_maxS);
    static final short[] DFA28_accept = DFA.unpackEncodedString(DFA28_acceptS);
    static final short[] DFA28_special = DFA.unpackEncodedString(DFA28_specialS);
    static final short[][] DFA28_transition;

    static {
        int numStates = DFA28_transitionS.length;
        DFA28_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA28_transition[i] = DFA.unpackEncodedString(DFA28_transitionS[i]);
        }
    }

    class DFA28 extends DFA {

        public DFA28(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 28;
            this.eot = DFA28_eot;
            this.eof = DFA28_eof;
            this.min = DFA28_min;
            this.max = DFA28_max;
            this.accept = DFA28_accept;
            this.special = DFA28_special;
            this.transition = DFA28_transition;
        }
        public String getDescription() {
            return "91:9: ( '=' ( S )* v= STRING | '^=' ( S )* v= STRING | '$=' ( S )* v= STRING | '*=' ( S )* v= STRING | '~=' ( S )* v= STRING | '|=' ( S )* v= STRING | '=' ( S )* a= IDENT | '^=' ( S )* a= IDENT | '$=' ( S )* a= IDENT | '*=' ( S )* a= IDENT | '~=' ( S )* a= IDENT | '|=' ( S )* a= IDENT )";
        }
    }

    public static final BitSet FOLLOW_selector_in_selectors38 = new BitSet(new long[]{0x0000000000000202L});
    public static final BitSet FOLLOW_9_in_selectors49 = new BitSet(new long[]{0x000000000101E030L});
    public static final BitSet FOLLOW_selector_in_selectors53 = new BitSet(new long[]{0x0000000000000202L});
    public static final BitSet FOLLOW_S_in_selector83 = new BitSet(new long[]{0x000000000101E030L});
    public static final BitSet FOLLOW_simple_selector_in_selector88 = new BitSet(new long[]{0x0000000000001C12L});
    public static final BitSet FOLLOW_combinator_in_selector102 = new BitSet(new long[]{0x000000000101E020L});
    public static final BitSet FOLLOW_simple_selector_in_selector106 = new BitSet(new long[]{0x0000000000001C12L});
    public static final BitSet FOLLOW_S_in_combinator134 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_S_in_combinator146 = new BitSet(new long[]{0x0000000000000410L});
    public static final BitSet FOLLOW_10_in_combinator149 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_S_in_combinator161 = new BitSet(new long[]{0x0000000000000810L});
    public static final BitSet FOLLOW_11_in_combinator164 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_S_in_combinator176 = new BitSet(new long[]{0x0000000000001010L});
    public static final BitSet FOLLOW_12_in_combinator179 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_S_in_combinator185 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_type_selector_in_simple_selector209 = new BitSet(new long[]{0x000000000101C002L});
    public static final BitSet FOLLOW_universal_in_simple_selector222 = new BitSet(new long[]{0x000000000101C002L});
    public static final BitSet FOLLOW_element_selector_in_simple_selector236 = new BitSet(new long[]{0x000000000101C002L});
    public static final BitSet FOLLOW_element_selector_in_simple_selector251 = new BitSet(new long[]{0x000000000101C002L});
    public static final BitSet FOLLOW_element_selector_in_simple_selector265 = new BitSet(new long[]{0x000000000101C002L});
    public static final BitSet FOLLOW_id_selector_in_element_selector290 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_class_selector_in_element_selector300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_attrib_selector_in_element_selector310 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_pseudo_selector_in_element_selector320 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_element_name_in_type_selector346 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENT_in_element_name365 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_universal389 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_14_in_id_selector413 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_IDENT_in_id_selector417 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_15_in_class_selector440 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_IDENT_in_class_selector444 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_attrib_selector468 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector470 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector477 = new BitSet(new long[]{0x0000000000FE0010L});
    public static final BitSet FOLLOW_S_in_attrib_selector481 = new BitSet(new long[]{0x0000000000FE0010L});
    public static final BitSet FOLLOW_17_in_attrib_selector494 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_S_in_attrib_selector496 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_STRING_in_attrib_selector501 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_18_in_attrib_selector515 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_S_in_attrib_selector517 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_STRING_in_attrib_selector522 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_19_in_attrib_selector536 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_S_in_attrib_selector538 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_STRING_in_attrib_selector543 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_20_in_attrib_selector557 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_S_in_attrib_selector559 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_STRING_in_attrib_selector564 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_21_in_attrib_selector578 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_S_in_attrib_selector580 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_STRING_in_attrib_selector585 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_22_in_attrib_selector599 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_S_in_attrib_selector601 = new BitSet(new long[]{0x0000000000000050L});
    public static final BitSet FOLLOW_STRING_in_attrib_selector606 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_17_in_attrib_selector620 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector622 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector627 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_18_in_attrib_selector641 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector643 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector648 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_19_in_attrib_selector662 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector664 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector669 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_20_in_attrib_selector683 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector685 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector690 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_21_in_attrib_selector704 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector706 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector711 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_22_in_attrib_selector725 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_S_in_attrib_selector727 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_IDENT_in_attrib_selector732 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_S_in_attrib_selector746 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_23_in_attrib_selector758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_pseudo_selector803 = new BitSet(new long[]{0x00000F1FFF000000L});
    public static final BitSet FOLLOW_24_in_pseudo_selector805 = new BitSet(new long[]{0x00000F1FFE000000L});
    public static final BitSet FOLLOW_negation_in_pseudo_selector818 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_functional_pseudo_selector_in_pseudo_selector832 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nth_child_in_functional_pseudo_selector865 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nth_last_child_in_functional_pseudo_selector875 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_functional_pseudo_selector885 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_functional_pseudo_selector895 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_functional_pseudo_selector905 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nth_of_type_in_functional_pseudo_selector915 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nth_last_of_type_in_functional_pseudo_selector925 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_functional_pseudo_selector935 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_functional_pseudo_selector945 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_30_in_functional_pseudo_selector955 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_functional_pseudo_selector965 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_functional_pseudo_selector975 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_functional_pseudo_selector985 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_functional_pseudo_selector995 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_functional_pseudo_selector1005 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_nth_child1032 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_S_in_nth_child1034 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_nth_expr_in_nth_child1045 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_37_in_nth_child1057 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_child1059 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_38_in_nth_child1072 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_child1074 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_39_in_nth_child1087 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_40_in_nth_last_child1112 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_S_in_nth_last_child1114 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_nth_expr_in_nth_last_child1125 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_37_in_nth_last_child1137 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_last_child1139 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_38_in_nth_last_child1152 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_last_child1154 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_39_in_nth_last_child1167 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_41_in_nth_of_type1194 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_S_in_nth_of_type1196 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_nth_expr_in_nth_of_type1207 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_37_in_nth_of_type1219 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_of_type1221 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_38_in_nth_of_type1234 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_of_type1236 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_39_in_nth_of_type1249 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_nth_last_of_type1270 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_S_in_nth_last_of_type1272 = new BitSet(new long[]{0x00000060000005F0L});
    public static final BitSet FOLLOW_nth_expr_in_nth_last_of_type1283 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_37_in_nth_last_of_type1295 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_last_of_type1297 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_38_in_nth_last_of_type1310 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_nth_last_of_type1312 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_39_in_nth_last_of_type1325 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_nth_expr1354 = new BitSet(new long[]{0x00000000000005F2L});
    public static final BitSet FOLLOW_S_in_nth_expr1376 = new BitSet(new long[]{0x00000000000005F2L});
    public static final BitSet FOLLOW_43_in_negation1402 = new BitSet(new long[]{0x0000071FFE01E030L});
    public static final BitSet FOLLOW_S_in_negation1404 = new BitSet(new long[]{0x0000071FFE01E030L});
    public static final BitSet FOLLOW_negation_arg_in_negation1407 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_S_in_negation1409 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_39_in_negation1412 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_type_selector_in_negation_arg1435 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_universal_in_negation_arg1445 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_selector_in_negation_arg1455 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_class_selector_in_negation_arg1465 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_attrib_selector_in_negation_arg1475 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_functional_pseudo_selector_in_negation_arg1485 = new BitSet(new long[]{0x0000000000000002L});

}
TOP

Related Classes of com.threelevers.css.CssSelectorsParser$DFA7

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.