ADAED
Section: Unix Programmer's Manual ()
Updated: 23 September 1991
Index
Return to Main Contents
NAME
adaed - NYU translator and interpreter for the Ada programming language
SYNOPSIS
adacomp
[ option ] ...
file
adabind
[ option ] ...
[
library
]
- adaexec
-
[ option ] ...
[
library
]
adalib
[
library
]
DESCRIPTION
Adaed is a translator/interpreter for the Ada programming language
that is intended primarily for educational use.
Adacomp
compiles an Ada program; it invokes in succession
the three compilation phases: parsing, semantic analysis,
and code generation. The
file
argument refers to the source file; if it contains no suffix
the Ada source is assumed to be in
file.ada.
It may be a full path name.
The output of the compiler is
an instruction stream for an abstract Ada machine, which is
subsequently interpreted.
Adabind
binds the library with the specified main_unit to form
an executable program.
Adaexec
invokes the Ada machine interpreter.
Library
specifies a library containing a bound program.
Adalib
is a utility that enables the user to examine the contents
of the specified library.
Note: all options must precede the file name (for
adacomp),
or library name (for
adabind, adaexec, and adalib)
and must be in
lower case.
LIBRARY
All compilations require a library.
A library is a subdirectory, which is created or reinitialized
when the user invokes a command
containing -n option, such as:
adacomp -n -l libname adafile
Intermediate files appear in subdirectory libname.
This directory is created by the command if it does not already exist.
Only the listing files are created in the directory from which adacomp
is invoked.
The libname directory should be used to hold files created by
the adaed commands only (i.e. those produced by the Ada/Ed system);
confusion and grief may result if you attempt to use a library directory
to hold other files.
The libname argument may be a full path name.
If the environment variable ADALIB is defined, its value is used as
a default library
and the -l option (including its libname argument)
to adacomp can be omitted.
Similarly, if ADALIB is defined then
the library name need not be provided to adabind, adaexec,
and adalib.
A given utility library, UL (e.g. one that contains mathematical functions)
may be used by several unrelated programs. It may then be convenient to
create independent libraries for each program, and initialize each library
with the contents of UL. This can be done simply by
creating directories for each library, and copying the contents of UL
into each of these.
OPTIONS
The options for
adacomp
are as follows:
- -a
-
Generates instructions for use by
the interpreter (adaexec command) to trace the Ada source lines. Used in
conjunction with the -t a option of adaexec.
- -b
-
Indicates that the binding of the library is to be performed if the current
compilation is completed without errors.
- -g
-
Specifies that the compiler is to produce a listing of the generated
instructions for the Ada machine (of little interest to most users).
- -ix
-
This is an option to the binder and is relevant only if the -b
option is used.
See options for adabind below.
- -llibrary
-
Uses the specified library to satisfy references to compilation units not
present in the file being compiled. If the compilation is successful, the units
defined in the file are added to the library.
If this option is not specified explicitly, a default library is implicitly
defined by the ADALIB environment variable.
- -munit_name
-
This is an option to the binder and is relevant only if the -b
option is used.
See options for adabind below.
- -n
-
Indicates that a new library is to be created for this compilation. The name of
the library is indicated by the
-l
option or through the ADALIB environment variable. The
-n
option must be specified if the library referenced by the
-l
option (or the ADALIB environment variable)
does not already exist or must be reinitialized.
- -s
-
Produces a listing of the source file. The name of the listing file is
the input file name prefix with suffix .lis.
By default, no listing file is generated unless
there are warnings, errors or informational messages to report.
- -v
-
Gives a (verbose) descriptive trace showing the subsidiary
programs invoked by the
adacomp
command, the options and arguments passed to them, and their exit status.
This is used primarily for system checkout.
The options for
adabind
are as follows:
- -munit_name
-
Specifies the name of the unit which is to serve as a main program.
When the library contains only one main program (which must be a parameterless
procedure) this option is not needed.
- -ix
-
To be used for programs that use pragma INTERFACE. x
designates the non-Ada interfaced procedures and may be a) the name of
an object file, created by the user, of the form filename.o
(that appears in the same directory as the Ada program); or b)
an abbreviation for the library '/lib/libx.a'.
If that does not exist then '/usr/lib/libx.a' is searched.
This library is unrelated to the Ada program library referenced by
the various adaed commands, and generally refers to a standard
library provided for another programming language.
This option may be used as many times as necessary, providing that each use
represents only a single file or library.
Thus, adabind -i a.o -i b.o -i lib ... is acceptable,
while adabind -i a.o b.o lib ... is not.
To use this option,
the environment variable INT must be set to point to the directory
containing the file adaint (see the Setup file or your system manager).
Usage examples appear below.
The options for
adaexec
are as follows:
- -mbound_main_unit
-
Specifies the name of the bound main unit, i.e. the main unit
that was specified to adabind, or adacomp. Note that a given
library may have been bound several times with different main units.
When the library has been bound with only one main unit, this option
is not needed.
- -hheap_size
-
Specify the size of the heap increment in kilowords, by which
the heap is expanded when the elaboration of a new entity
requires it. The heap expands to fill available memory.
The default increment is 128.
This parameter limits the size of the largest object that can be created
in a program.
- -pp_size
-
Specifies the size in bytes of the program stack size for the main task.
The default is 10000.
Argument values in the range 1..31 are multiplied by 1024 to obtain the
stack size in bytes.
The maximum value is 32767.
- -st_size
-
Specifies the size in bytes of the stack size for each new task.
The default is 10000. Argument values in the range 1..31 are multiplied
by 1024 to obtain the stack size in bytes.
Use of small stack sizes may be appropriate when executing programs with
many tasks, each of which can run with a small stack.
The maximum value is 32767.
- -ttrace_options
-
Specify one or more of the following letters indicating the
kind of trace(s) requested for the execution of the program.
-
- a (Ada line)
-
Display the source line numbers.
This requires that the program be compiled with the -a option.
- c (calls)
-
Display the name of each subprogram as it is entered and exited.
- e (exceptions)
-
Display the name of each exception as it is raised.
- r (rendezvous)
-
Trace each rendezvous.
- t (tasks)
-
Display task creation, activation, and termination.
EXAMPLES
The following examples show typical usage:
-
- 1)
-
Compile t1.ada into a new library called testlib and bind the library; then
execute it.
The listing is written to t1.lis.
Note that -s is used to force a listing file to be created.
adacomp -s -nl testlib -b t1
adaexec testlib
- 2)
-
Compile a package specification in p.spc and corresponding body in p.bod
into a new library called tstlib.
Then compile t2.ada into the same library, bind the main program, and
execute it
adacomp -nl tstlib p.spc
adacomp -l tstlib p.bod
adacomp -l tstlib -b t2
adaexec tstlib
- 3)
-
In the example above, the binding could be done in a separate phase.
This is achieved by replacing the third command above with:
adacomp -l tstlib t2
adabind tstlib
- 4)
-
Example 2 above could be done without explicitly specifying the library
by setting the environment variable ADALIB, as follows:
setenv ADALIB my_default_directory
adacomp -n p.spc
adacomp p.bod
adacomp -b t2
adaexec
- 5)
-
Compile a program with line numbers included in the generated code.
Execute it displaying Ada source line numbers as they are encountered.
adacomp -a -nl libname -b t1
adaexec -t a libname
- 6)
-
Compile a program with two parameterless procedures (potential main programs)
which are named MAIN1 and MAIN2
in files p1.ada and p2.ada respectively, and bind the library tstlib
using MAIN1 as the main program.
adacomp -nl tstlib p1
adacomp -l tstlib p2
adabind -m main1 tstlib
adaexec tstlib
- 7)
-
Suppose we wish to add another program to the library tstlib (created in
Example 6) whose main program unit is named MAIN3 and appears in file p3.ada.
The following commands will compile and execute MAIN3. As tstlib was
previously bound with MAIN1 as a main unit, it is now necessary to use the
-m option to adaexec in order to select the desired bound
main unit.
adacomp -l tstlib p3
adabind -m main3 tstlib
adaexec -m main3 tstlib
- 8)
-
The contents of the library above can be examined by:
adalib tstlib
Adalib writes the name, type and compilation date of each unit
in the specified library to standard output.
In addition, it writes the current status (active or obsolete) of each
unit. Units which may be main programs are noted by "(Main)"; if there
is more than one such unit, the -m option to adabind must be
specified during binding. Libraries that have been bound will contain
at least one unit labeled "binding unit". If several of these are active,
the -m option must be specified for adaexec.
PRAGMA INTERFACE
Pragma interface (LRM 13.9) is currently supported for
interfacing to subprograms written in FORTRAN or C.
Arguments to interfaced procedures must be
one of the following types:
For C: integer, float, access, array, record, and enumeration types.
For FORTRAN: integer, float and array.
The return types available are integer and float.
Following are sample Ada programs that are interfaced
to subprograms coded in FORTRAN and C,
together with the code for the interfaced subprograms:
- 1)
-
Interface to FORTRAN
C This is a source file called func.f which contains two functions to be used in an
C Ada program with pragma INTERFACE.
function sqr(x)
sqr = x*x
return
end
function cube(x)
cube = x*x*x
return
end
-- Assume that the following are the contents of file fortlib.ada.
-- It contains a compilation unit that defines two functions which are
-- interfaced to the above routines.
package FORTRAN_LIB is
function SQR(X:FLOAT) return FLOAT;
function CUBE(X:FLOAT) return FLOAT;
private
pragma INTERFACE(FORTRAN, SQR);
pragma INTERFACE(FORTRAN, CUBE);
end FORTRAN_LIB;
with FORTRAN_LIB, TEXT_IO; use FORTRAN_LIB, TEXT_IO;
procedure TEST is
function SQRT(X : FLOAT) return FLOAT;
pragma INTERFACE(C,SQRT);
package MY_FLOAT_IO is new FLOAT_IO(FLOAT); use MY_FLOAT_IO;
begin
PUT(SQR(2.0));
NEW_LINE;
PUT(CUBE(2.0));
NEW_LINE;
PUT(SQRT(2.0));
NEW_LINE;
end TEST;
To compile and execute, enter the following commands:
f77 -c func.f
adacomp -nl testlib -b -i func.o fortlib
adaexec testlib
The output will be:
4.00000E+00
8.00000E+00
1.41421E+00
- 2)
-
Interface to C
/*
* Source file proc.c contains procedures PRINTA and PRINTS1 called by
* the Ada program above.
*/
printa(ara)
int ara[];
{
int i;
for (i=0;i<10;i++) {
printf("%d ",ara[i]);
}
printf("\n");
}
prints1(ara,len)
int ara[];
int len;
{
int i;
for (i=0;i<len;i++) {
printf("%c",ara[i]);
}
printf("\n");
}
-- Assume that file test_interface.ada contains the following program:
procedure C_INTERFACES is
type ARA10 is array(1..10) of INTEGER;
A10: ARA10 := (1,2,3,4,5,6,7,8,9,10);
procedure PRINTA(A:ARA10);
-- PRINTA prints an array of 10 elements of type INTEGER
pragma INTERFACE(C, PRINTA);
procedure PRINTS1(A:STRING; LEN: INTEGER);
-- PRINTS1 prints an array of LEN elements of type CHARACTER
pragma INTERFACE(C, PRINTS1);
procedure PRINTS(A:STRING) is
-- This routine prints a string by passing the string and its length
-- to the routine PRINTS1 which is written in C.
begin
PRINTS1(A, A'length);
end;
begin
PRINTA(A10);
PRINTS("this is any string");
end;
To compile and execute, enter the following:
cc -c proc.c
adacomp -i proc.o -nl testlib -b test_interface
adaexec testlib
The resulting output is as follows:
1 2 3 4 5 6 7 8 9 10
this is any string
ENVIRONMENT
The environment variable
ADALIB
contains the name of the library used if none is specified on the command line.
Normally the executables called by
adacomp
and the predefined libraries are in a directory built into the system.
The directory containing these can be specified by the environment
variable
ADAED
which overrides the built in directory name.
The location of individual components called by
adacomp
or the location of the predefined libraries can be overridden with the
following environment variables:
PRS For the parser, adaprs;
SEM For the semantic analyzer, adasem;
GEN For the code generator, adagen;
BND For the binder, adabind; and
ADAEDPREDEF For the predefined libraries.
FILES
file.ada Ada source file
adaint partially built interpreter (used for pragma interface)
predef.axq symbol table for predef
predef.trc tree file for predef
predef.lib library for predef
DIAGNOSTICS
Adaed commands return an exit code of 0 in the
case of success, and nonzero otherwise.
An error code of 1 indicates errors in usage of the Ada language,
2 is returned if there is an internal Adaed system error, and 3
denotes some invalid usage of the Adaed system.
Error messages regarding invalid system usage are directed to
the standard error file.
Ada language related messages detected at compilation are written to the
listing file, while those detected by
adabind
or
adaexec
appear on standard output.
Note, that an error in a given compilation unit may cause subsequent
compilation units (within the same compilation) not to be recognized.
AUTHORS
Ada/Ed-C was written by the following members of the NYU Ada Project:
Bernard Banner, Jerome Chiabaut, Robert Dewar, Anne Dinning, Alain Lauque,
Gail Schenker Morgulis, Brett Porter,
Jean-Pierre Rosen, Edmond Schonberg, David Shields, Brian Siritzky,
Franck Triplet.
BUGS
We give absolutley no warranty as to the correctness of the system. It was
designed strictly for teaching purposes. Currently it is unvalidated although
we hope to put it in a validatable shape in the near future.
Any compilation or execution that terminates abnormally with
mention of
internal error
has uncovered a bug that should be reported to the
NYU Ada group.
-
NYUADA project
New York University
251 Mercer Street
New York, N.Y. 10012
(212) 998 - 3480
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- LIBRARY
-
- OPTIONS
-
- EXAMPLES
-
- PRAGMA INTERFACE
-
- ENVIRONMENT
-
- FILES
-
- DIAGNOSTICS
-
- AUTHORS
-
- BUGS
-
This document was created by
man2html,
using the manual pages.
Time: 15:09:22 GMT, November 05, 2024