Compiler. assembler and programmer are differente things. You can build your code with any compiler (c, basic, java based,etc) or with an assembler (like MPLAB). The result will be an *.hex file. This is the file that you'll use to program the PIC. Use any programmer that support the target PIC. Choose what interface you'd like to use (serial, paralel or usb) then build or buy your programmer. Search the forum and you'll find some links. I personal use ICPROG with JDM programmer (serial interface, no external power supplie) but some times have an error, specialy with OTP PIC's, and EPIC programmer (very stable and simple to use, disavantage, is for paralel port).
For a litle help getting started see
**broken link removed**
Hope it helps you.