The problem you are addressing is really a problem with any compiler. For example, many compilers are written in C. Well...how do you compile a C compiler without having a C compiler without...etc, etc, etc.
The process you are looking for is called bootstrapping. From Wikipedia (and see the article for more information and links to other articles):
Bootstrapping is a term used in
computer science to describe the
techniques involved in writing a
compiler (or assembler) in the target
programming language which it is
intended to compile. Applying this
technique leads to a self-hosting
compiler.
A large proportion of programming languages are bootstrapped, including
BASIC, C, Pascal, Factor, Haskell,
Modula-2, Oberon, OCaml, Common Lisp,
Scheme, Python and more.
The article also addresses the chicken and the egg problem that you pointed out. I could quote it all here, but, hopefully this get you started in understanding it. Great question!