src/main/java/com/bazaarvoice/jless/parser/Parser.java
Rule Arguments() {
        return FirstOf(
                Sequence(
                        Ws0(), '(', Ws0(),
                        ExpressionPhrase(), push(new ArgumentsNode(new ExpressionGroupNode(pop()))),
                        Ws0(),
                        ZeroOrMore(
                                ',', Ws0(),
                                ExpressionPhrase(), peek(1).addChild(new ExpressionGroupNode(pop())),
                                Ws0()
                        ),
                        ')'
                ),
                Sequence(Ws0(), '(', Ws0(), ')', push(new ArgumentsNode()))
        );
    }
Rule Arguments() {
        return FirstOf(
                Sequence(
                        Ws0(), '(', Ws0(),
                        ExpressionPhrase(), push(new ArgumentsNode(new ExpressionGroupNode(pop()))),
                        Ws0(),
                        ZeroOrMore(
                                ',', Ws0(),
                                ExpressionPhrase(), peek(1).addChild(new ExpressionGroupNode(pop())),
                                Ws0()
                        ),
                        ')'
                ),
                Sequence(Ws0(), '(', Ws0(), ')', push(new ArgumentsNode()))
        );
    }
'(' Ws0 ExpressionPhrase Ws0 (',' Ws0 ExpressionPhrase Ws0)* ')' / '(' Ws0 ')'