In order to bettter understand the workings of the GNAT system, the following brief description of its organization may be helpful:
sc
contain the lexical scanner.
par
are components of the parser. The
numbers correspond to chapters of the Ada Reference Manual. For example,
parsing of select statements can be found in par-ch9.adb
.
sem
perform semantic analysis. The
numbers correspond to chapters of the Ada standard. For example, all
issues involving context clauses can be found in
sem_ch10.adb
. In addition, some features of the language
require sufficient special processing to justify their own semantic
files, such as sem_aggr.adb
for aggregates and
sem_disp.adb
for dynamic dispatching.
exp
perform normalization and
expansion of the intermediate representation (abstract syntax tree, or AST).
The expansion has the effect of lowering the semantic level of the AST to
a level closer to what the back end can handle. For example, it converts
tasking operations into calls to the appropriate runtime routines.
These files use the same numbering scheme as the parser and semantics files.
For example, the construction of record initialization procedures is done in
exp_ch3.adb
.
bind
implement the binder, which
verifies the consistency of the compilation, determines an order of
elaboration, and generates the bind file.
atree.ads
and atree.adb
detail the low-level
data structures used by the front-end.
sinfo.ads
and sinfo.adb
detail the structure of
the abstract syntax tree as produced by the parser.
einfo.ads
and einfo.adb
detail the attributes of
all entities, computed during semantic analysis.
gen_il
generate most of the functions
defined in sinfo.ads
and einfo.ads
, which set and get
various fields and flags of the AST.
lib
.
a-
are children of Ada
, as
defined in Annex A.
i-
are children of Interfaces
, as
defined in Annex B.
s-
are children of System
. This includes
both language-defined children and GNAT run-time routines.
g-
are children of GNAT
. These are useful
general-purpose packages, fully documented in their specs. All
the other .c
files are modifications of common gcc
files.