One of my hobbies is building translators for computer languages - this is a time consuming process like most hobbies!
Translators are entities that perform semantically equivalent conversions from one language to another language. The computer term translator is often reserved for a process that maps from one high-level language to another high-level language.
Computer language compilers are a special category of translator which convert a high-level language specification to a semantically equivalent low-level language output for execution on a target computer architecture.
The term Assembler is reserved for a translator which accepts assembly language as input and produces an instruction stream as output. Assembly language is a low-level source language which maps very closely to the target machine instruction set.
An interpretter is a program, written in some high-level language, which is used to execute or interpret an intermediate instruction stream. The instruction stream is obtained from source code or more commonly derived from the translation of the source code. Since interpretters interpret a virtual instruction stream they suffer from additional runtime performance overheads not present in systems which compile directly to code that executes in a physical hardware architecture.
This site is best veiwed with IE6 or Opera 7, the site is being converted to use CSS so you may experience some problems printing, (back).