5 Language Front Ends in GCC

The interface to front ends for languages in GCC, and in particular
the tree structure (see Trees), was initially designed for
C, and many aspects of it are still somewhat biased towards C and
C-like languages. It is, however, reasonably well suited to other
procedural languages, and front ends for many such languages have been
written for GCC.

Writing a compiler as a front end for GCC, rather than compiling
directly to assembler or generating C code which is then compiled by
GCC, has several advantages:

GCC front ends benefit from the support for many different
target machines already present in GCC.

GCC front ends benefit from all the optimizations in GCC. Some
of these, such as alias analysis, may work better when GCC is
compiling directly from source code then when it is compiling from
generated C code.

Because of the advantages of writing a compiler as a GCC front end,
GCC front ends have also been created for languages very different
from those for which GCC was designed, such as the declarative
logic/functional language Mercury. For these reasons, it may also be
useful to implement compilers created for specialized purposes (for
example, as part of a research project) as GCC front ends.