def application(self, func):
        start = self.tokens.matched.start
        if self.tokens.accept(common_grammar.rparen):
            return ast.Apply(func, start=start, end=self.tokens.matched.end,
                             source=self.original)
        arguments = [self.expression()]
        while self.tokens.accept(common_grammar.comma):
            arguments.append(self.expression())
        self.tokens.expect(common_grammar.rparen)
        return ast.Apply(func, *arguments, start=start,
                         end=self.tokens.matched.end, source=self.original)