Rule MediaTypeRestriction() {
        return Sequence(
            push(new MediaTypeRestriction()),
            Ws0(), "and", Ws0(), '(',
            Sequence(
                    Ident(), peek().addChild(new SimpleNode(match())),
                    ':', peek().addChild(new SimpleNode(":")),
                    Optional(Ws0()),
                    peek().addChild(new SpacingNode(" ")),
                    ExpressionPhrase()
            ),
            ')',
            peek(1).addChild(pop())
        );
    }
Rule MediaTypeRestriction() {
        return Sequence(
            push(new MediaTypeRestriction()),
            Ws0(), "and", Ws0(), '(',
            Sequence(
                    Ident(), peek().addChild(new SimpleNode(match())),
                    ':', peek().addChild(new SimpleNode(":")),
                    Optional(Ws0()),
                    peek().addChild(new SpacingNode(" ")),
                    ExpressionPhrase()
            ),
            ')',
            peek(1).addChild(pop())
        );
    }
Rule MediaTypeRestriction ( ) { return Sequence ( push ( new MediaTypeRestriction ( ) ) , Ws0 ( ) , "and" , Ws0 ( ) , ' ' , Sequence ( Ident ( ) , peek ( ) . addChild ( new SimpleNode ( match ( ) ) ) , ' ' , peek ( ) . addChild ( new SimpleNode ( ":" ) ) , Optional ( Ws0 ( ) ) , peek ( ) . addChild ( new SpacingNode ( " " ) ) , ExpressionPhrase ( ) ) , ' ' , peek ( 1 ) . addChild ( pop ( ) ) ) ; }
Sequence ( Whitespace "and" Whitespace "(" Css Property ")" )
Sequence ( Whitespace and Whitespace ( Css Property ) )