Rule FilterArguments() {
        return FirstOf(
                Sequence(
                        '(', Ws0(),
                        FilterArgument(), push(new ArgumentsNode(pop())),
                        Ws0(),
                        ZeroOrMore(
                                ',', Ws0(),
                                FilterArgument(), peek(1).addChild(pop()),
                                Ws0()
                        ),
                        ')'
                ),
                Sequence('(', Ws0(), ')', push(new ArgumentsNode()))
        );
    }
Rule FilterArguments() {
        return FirstOf(
                Sequence(
                        '(', Ws0(),
                        FilterArgument(), push(new ArgumentsNode(pop())),
                        Ws0(),
                        ZeroOrMore(
                                ',', Ws0(),
                                FilterArgument(), peek(1).addChild(pop()),
                                Ws0()
                        ),
                        ')'
                ),
                Sequence('(', Ws0(), ')', push(new ArgumentsNode()))
        );
    }
Rule FilterArguments ( ) { return FirstOf ( Sequence ( ' ' , Ws0 ( ) , FilterArgument ( ) , push ( new ArgumentsNode ( pop ( ) ) ) , Ws0 ( ) , ZeroOrMore ( ' ' , Ws0 ( ) , FilterArgument ( ) , peek ( 1 ) . addChild ( pop ( ) ) , Ws0 ( ) ) , ' ' ) , Sequence ( ' ' , Ws0 ( ) , ' ' , push ( new ArgumentsNode ( ) ) ) ) ; }
'(' Ws0 FilterArgument Ws0 (',' Ws0 FilterArgument Ws0)* ')' / '(' Ws0 ')'
( Ws0 FilterArgument Ws0 ( Ws0 FilterArgument Ws0 ) * ) / ( Ws0 )