A language rewriter is usually a program that translates the form of expressions without a change of language. A program that translates between high-level languages is usually called a source-to-source compiler or transpiler. A program that translates from a low-level language to a higher level one is a decompiler. A bootstrap compiler is written in the language that it intends to compile. If the compiled program can run on a computer whose CPU or operating system is different from the one on which the compiler runs, the compiler is a cross-compiler. However, there are many different types of compilers. The name compiler is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program. A compiler is a computer program that translates computer code written in one programming language (the source language) into another programming language (the target language).