A compiler is a program
that reads a program written in one language-the source language-and translates
it into an equivalent program in another language-the target language. As an
important part of this translation process, the compiler reports to its user
the presence of errors in the source program.
1.1 A Compiler
Compilers are sometimes
classified as single-pass, multi-pass, load-and-go, debugging, or optimizing,
depending on how they have been constructed or on what function they are
supposed to perform. Despite this apparent complexity, the basic tasks that any
compiler must perform are essentially the same.
The Analysis – Synthesis Model of
There are two parts of compilation.
The analysis part breaks up the source program into
constant piece and creates an
intermediate representation of the source program.
The synthesis part
constructs the desired target program from the intermediate representation.
Software tools used in
Analysis part: 1) Structure editor:
Takes as input a sequence of commands to
build a source program.
The structure editor not only performs
the text-creation and modification functions of an ordinary text editor, but it
also analyzes the program text, putting an appropriate hierarchical
structure on the source program.
For example , it can supply key words
automatically - while …. do and begin….. end
2) Pretty printers :
A pretty printer analyzes a program and
prints it in such a way that the structure of the program becomes clearly
visible. For example, comments may appear in a special font.
3) Static checkers
A static checker reads a program,
analyzes it, and attempts to discover potential bugs without running the
For example, a static checker may detect
that parts of the source program can never be executed.
4) Interpreters :
Translates from high level language
(BASIC, FORTRAN, etc..) into machine language.
An interpreter might build a syntax tree
and then carry out the operations at the nodes as it walks the tree.
Interpreters are frequently used to
execute command language since each operator executed in a command language is
usually an invocation of a complex routine such as an editor or complier.
1.2 A language processing system