File: asistant.ug

package info (click to toggle)
asis 2014-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 14,064 kB
  • ctags: 37
  • sloc: ada: 146,541; makefile: 364; sh: 50; xml: 48; csh: 10
file content (821 lines) | stat: -rw-r--r-- 28,242 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
A S I S t a n t
User's Guide

Version 1.5

Author:
  Vasiliy Fofanov,   Ada Core Technologies, Inc.

Co-authors:
  Sergey Rybin,      Ada Core Technologies, Inc.
  Alfred Strohmeier, Swiss Federal Institute of Technology in Lausanne

Date: March 2, 2000


Revisions history

  V1.5   02.03.2000   Online help expanded (see 8.)
  V1.4   15.11.1999   Source location search capability added (see 4.5.3.4.)
                      Browser capability expanded (see 5.)
  V1.3.3 11.11.1999   Special script processing mode added (see 2.)
  V1.3.2 23.06.1999   Interactive script execution added (see 7.)
  V1.3.1 03.06.1999   Partial support for Asis.Data_Decomposition
  V1.2   21.01.1999   ASIStant commands may now optionally terminate with ';'
                      Several bugs fixed
  V1.1   31.10.1998   Browser capability added (see 5.)
                      Output section revised   (see 4.5.2.4.)
  V1.0   15.10.1998   Original version



Contents

1. Introduction
2. Launching ASIStant
3. General ASIStant Language Description
4. Language Components
  4.1. Data Types
  4.2. Constants
  4.3. Variables
  4.4. Expressions
  4.5. Function Calls
    4.5.1. ASIS Queries
    4.5.2. ASIStant Utilities
      4.5.2.1. Help system
      4.5.2.2. Environment control
      4.5.2.3. Variable handling
      4.5.2.4. Output
      4.5.2.5. Conditional execution
    4.5.3. ASIStant Service Functions
      4.5.3.1. Access to components of ASIS record types
      4.5.3.2. List handling
      4.5.3.3. Functions for the types String, Boolean and Integer
      4.5.3.4. Source location search capability
5. Browser capability
  5.1. Access to the Browser capability from inside ASIStant
  5.2. Browser environment
  5.3. Displaying the current Element
  5.4. Advanced traversal
  5.5. Going to a different source location.
6. Log Management
7. Script Management
8. Online help
  8.1. Help on query syntax profile
  8.2. Help on applicable queries
9. Implementation Limitations of ASIStant
  9.1. Syntax and Run-Time Limitations
  9.2. Default Parameters
  9.3. Not Implemented ASIS Queries
  9.4. Ambiguous ASIS Queries
  9.5. Package Asis.Data_Decomposition
10. References



1.  Introduction

ASIStant, a contraction of ASIS Tester And iNTerpreter, pronounced like
assistant, is an interactive ASIS interpreter with scripting and integrated
ASIS Browser capability. It may be used for learning ASIS, i.e. the user may
try out interactively the effects of the various ASIS queries. It might also
be used as an assistant (sic!) when experimenting with ASIS queries, e.g. in
order to find out a way of implementing a part of an ASIS application, or to
correct it. ASIStant was developed jointly with ASIS-for-GNAT [1,2] and is
extensively used during the debugging and testing of ASIS-for-GNAT
implementation.

ASIStant allows the user to call ASIS queries interactively. For this purpose
a command language is provided. Commands may also be grouped in a script, and
such a script can be called both interactively and in batch mode. Both the
input and the output of a session can be logged in a file. The input commands
can then be replayed in another session.


Acknowledgments

The original version of this tool, then called ASIStint, was developed as part
of the collaboration between Software Engineering Laboratory of the Swiss
Federal Institute of Technology in Lausanne, Switzerland, and the Scientific
Research Computer Center of Moscow University, Russia, supported by a grant
from the Swiss National Science Foundation, no 7SUPJ048247, funding a project
"Development of ASIS for GNAT with industry quality" [3].

The original version of the ASIS Browser tool was created by Alain Le Guennec.


2.  Launching ASIStant

Provided that the executable for ASIStant is named "asistant", the command
line syntax for ASIStant is

  asistant [-o<output_level] [<script_filename>]

If no filename is specified, ASIStant enters the interactive mode and its
command prompt appears.

The key -o, followed by a number from 0 to 6, allows to change the amount of
output to the screen. This is typically used in the batch mode to filter
unnecessary output. When -o0 is specified, everything is displayed, while in
-o6 mode, nothing. For explanation of other values, refer to 4.5.2.2.

The following script enables logging the session to the file "dummy.log",
initializes an ASIS environment and prepares the compilation unit "dummy" for
further work:

  log ("dummy.log") -- log session to file "dummy.log".

  Initialize ("")
  -- initialize an ASIS environment; will call Asis.Implementation.-
  -- Initialize, and pass "" as parameter to this ASIS query.

  set (Ctx)
  -- create an undefined Asis.Context variable Ctx.

  Associate (Ctx, "", "")
  -- call Asis.Environments.Associate with empty strings as parameters;
  -- this call assigns the context by default to the previously created
  -- variable Ctx.

  Open (Ctx)
  -- call to Asis.Environments.Open with Ctx as a parameter.

  set (Dummy_Unit, Library_Unit_Declaration ("dummy", Ctx))

  -- fetch the library unit "dummy" from the context Ctx; will call the
  -- Asis.Compilation_Units.Library_Unit_Declaration query.

Although identifiers are not case-sensitive, we will use all small letters for
identifiers of ASIStant-specific operations, i.e. log, set, and initial
capital letters for ASIS queries, i.e. Initialize, Associate, Open,
Library_Unit_Declaration, and for variable names, i.e. Ctx, Dummy_Unit.

If the previous script is in a file named "dummy.scr", it can be launched
automatically upon startup with the following command:

  asistant dummy.scr

After finishing the script, ASIStant switches to command-line mode with the
variables Ctx and Dummy_Unit properly initialized.

ASIStant only interprets calls to ASIS queries, and it does not produce any
calls to ASIS queries on its own. Therefore, to simulate the correct behavior
of an ASIS application when working with ASIStant, one should follow the
general rules given in the root package of the ASIS 95 specification. An
ASIStant session should therefore start by initializing an ASIS
implementation; then it should define a context variable and associate it with
an Ada environment, called a context in ASIS; then the context must be opened,
before issuing any query for it.

NOTE: ASIStant is considered to be running in a special script mode when it is
launched with the command

  asistant -o5 <script_filename>

In this mode, ASIStant will quit whenever it would normally enter interactive
mode (i.e. upon script errors or script termination).


3.  General ASIStant Language Description

The ASIStant command language is a simple functional language.

An ASIStant program is a sequence of function calls, also called commands when
at the level of the program. Function calls may take other function calls as
arguments. The function Set allows the user to define an arbitrary number of
variables of all ASIS types.

In a command-line mode, a function call must fit on a single line. In a script,
line breaks may appear wherever a blank space is allowed. There are no other
formatting limitations: spaces, tabs and line terminators are not significant
and can be present in any number.

Ada-style comments are allowed: a comment starts with a double hyphen "--" and
lasts to the end of the line.

An ASIStant program can be stored on disk as a script file; there are no
restrictions on script file names.

Identifiers are not case sensitive.


4.  Language Components

4.1.  Data Types

ASIStant supports the following predefined Ada types: Integer, Boolean, and
String, but only with a limited set of operations (see 4.5.3.3.).

All ASIS composite types are supported by ASIStant.

All ASIS record types are implemented as private types in ASIStant. For these
types, functions are provided for accessing their components; e.g. for the
Asis.Span type, there are the service functions First_Line, First_Column, etc.
that take a Span as a parameter and return the value of the corresponding
component.

The values of ASIS enumeration types are mapped to string literals, in
conformance to the 'Image attribute.

The values of the Ada.Calendar.Time type are represented by Strings.

For variables of the ASIS list types, i.e. Element_List, etc., indexing is
defined:

  <list_variable> (<integer_index>)


4.2.  Constants

Literals for the predefined Ada types Integer, Boolean and String are
supported.

There are also predefined constants for the composite ASIS types, which have a
nil value. The prefix Nil is used in their names: Nil_Element,
Nil_Element_List, etc.


4.3.  Variables

ASIStant variables are used to store values returned from queries, in order to
display them, and in order to pass them to subsequent calls.

ASIStant variables can be of any ASIStant type.

A variable name is an Ada-style identifier.

Variables are created and assigned by the ASIStant Set utility. There are no
predefined variables at the start of a session.

The first (or the only) parameter of the Set utility must be a variable name.
The second parameter (if any) is an ASIStant expression. ASIStant starts by
creating dynamically a variable of the given name, if there is not yet such a
variable. In any case, the variable inherits the type of the expression
provided by the second parameter. Finally, the value of the expression is
assigned to the variable.

In one case, the Set utility has only one parameter. It is provided for
creating a context variable, which is of a limited type and therefore cannot
be initialized by means of an assignment. Thus the command

        set (My_Context)

creates an undefined context variable My_Context which can then be initialized
by a call to the Associate query.


4.4.  Expressions

An ASIStant expression is either an ASIStant constant, an ASIStant variable,
an indexed ASIStant list variable, or an ASIStant function call.

All ASIStant variables used in expressions should previously be (dynamically)
initialized.


4.5.  Function Calls

An ASIStant function call follows the Ada syntax for a function call, but only
positional parameter association is allowed.

There are two kinds of functions: ASIS queries and ASIStant-specific
functions, which are in turn divided into ASIStant utilities and ASIStant
service functions.

ASIStant function calls may have empty results, and are then procedures alike;
this holds for all ASIStant utilities, but also for some ASIS queries, e.g.
Initialize, Open, etc.

A script is a sequence of function calls; the result of such a function call
at the level of a script, also called a command, is always ignored.

An ASIStant command may optionally be terminated by a semicolon.


4.5.1.  ASIS Queries

ASIStant supports all queries defined by ASIS 95, except for the generic
procedure Traverse_Element which does not fit consistently in the
interpretation-oriented concept.


4.5.2.  ASIStant Utilities

In this subsection <ID> means <ASIStant_variable_name> and <EXPR> means
<ASIStant_expression>.


4.5.2.1.  Help system

  Help

Displays a list and a brief description of ASIStant utilities.

  Help (<topic-name>)

Displays the help specific to the <topic-name>.

  Info

Displays ASIS and ASIStant technical information.


4.5.2.2.  Environment control

- Program exit:

  Quit [ (<exit-status>) ]

Exits the program, after setting the operating system execution environment
variable to the value specified by the <exit-status> expression, which should
be an integer expression, or to 0 if the expression is omitted.

A script file to be used in batch mode should finish with a Quit command.

- Log control:

  Log ("<filename>")

Opens file <filename> and uses it for the session log.

  Log

Closes the current log file.

  Loglevel (<level>)

Sets the log control level to the natural value <level>; the default value is
1. All output is always displayed, but only output with a level higher or
equal to the specified one is sent to the log file. The available control
levels are:

  Level 5: ASIS exceptions, and Print output.
  Level 4: ASIStant warnings.
  Level 3: ASIStant standard messages.
  Level 2: Command prompts, and input logging.
  Level 1: Reserved for future extensions.
  Level 0: Internal ASIStant debugging information.

NOTE: Regardless of the log control level, ASIStant keeps track of all I/O
throughout the session in the files "input.log" (input) and "session.log"
(input+output). Therefore, it is usually enough to set the log control level
to 5.

- Script control:

  Run ("<filename>")
  IRun ("<filename>")

Launches the script in the file <filename>, reading further commands from it.

  Pause

Pauses the current script, and switches to command mode.

  Run
  IRun

Resumes the current script, which was previously paused.

  Exit

Exits the script and returns to the calling script or to command mode.


4.5.2.3. Variable handling

  Set ( <ID>, <EXPR> )

For the first (dynamically) occurrence of the given ID, the corresponding
ASIStant variable is created. ID is further used as its name. The type and the
value of the variable is inherited from <EXPR>. If <EXPR> contains a call to
an ASIS query that raises an exception, the variable is not created; any
further reference to it is hence invalid.

If the ASIStant variable ID already exists, its type and value are changed to
those of <EXPR>. If <EXPR> contains a call to an ASIS query that raises an
exception, the variable is not changed.

<EXPR> can be of any ASIStant type, except Asis.Context.

  Set (<ID>)

Creates a variable with name <ID> of the type Asis.Context.


4.5.2.4. Output

  Print ( <EXPR> )

Displays the value of the expression <EXPR>:

- For standard predefined types (Integer, Boolean and String) the
  value is directly displayed.

- For ASIS.Text.Span type the value is displayed in the form

    (First_Line:First_Column)-(Last_Line:Last_Column)

- For ASIS.Element type the value by default is displayed in the form

    <Element Kind> <Element position>

  where Element kind is the exact position of an Element in the ASIS Element
  classification hierarchy (e.g., An_Assignment_Statement, but not
  A_Statement), and position is represented by the span of the Element's text
  image.

  On demand, the Element's Debug_Image and Text Image may be displayed.
  This is controlled by the Printdetail utility (see below).

- For ASIS.Compilation_Unit type and ASIS.Context type the value is displayed
  by means of Debug_Image query.

- For ASIS.Element_List and ASIS.Compilation_Unit_List types, first the
  length of the list is displayed, and then the values of all its components

  Printdetail("{d|D}{t|T}")

Switches display of additional information for Elements on or off. The
parameter is the string of two characters "DT", both of which can be in the
upper or lower case. 'D' controls the output of Debug_Image, and 'T' - the
output of Text Image. The use of upper case switches the corresponding option
on, and the lower case switches it off. The default is "dt".


4.5.2.5. Conditional execution

  If ( <bool_expr> , <ASIStant_command1> [, <ASIStant_command2>] )

Evaluates the boolean expression <bool_expr>, and then executes
<ASIStant_command1> if <bool_expr> is True, and executes <ASIStant_command2>,
if any, if <bool_expr> is False.

For example,

  set ( Debug, True )
  if ( Debug, Initialize("-asisd"), Initialize("") )
  -- switch on the ASIS-for-GNAT internal debugging mode depending
  -- on the state of the Debug flag

There are no restrictions on the <ASIStant_command> parts. Therefore, several
If statements can be nested.

The execution of another script can be conditionally started with a command
like

  if ( Debug , run ("debug.scr") )


4.5.3.  ASIStant Service Functions

4.5.3.1. Access to components of ASIS record types

- Asis.Span

  function First_Line   (Sp: in Span) return Integer
  function First_Column (Sp: in Span) return Integer
  function Last_Line    (Sp: in Span) return Integer
  function Last_Column  (Sp: in Span) return Integer

- Asis.Compilation_Units.Relations.Relationship

  function Consistent   (R: in Relationship) return Compilation_Unit_List
  function Inconsistent (R: in Relationship) return Compilation_Unit_List
  function Missing      (R: in Relationship) return Compilation_Unit_List
  function Circular     (R: in Relationship) return Compilation_Unit_List

4.5.3.2. List handling

  function Length (L: in 'any ASIS list type') return Integer

A set of overloaded queries for all ASIS list types, e.g.
Compilation_Unit_List.

4.5.3.3. Functions for the types String, Boolean and Integer

- String

  function Concat (S1, S2: in String) return String
  function Eq     (S1, S2: in String) return Boolean
  function Lt     (S1, S2: in String) return Boolean
  function Gt     (S1, S2: in String) return Boolean

- Boolean

  function Not (B:      in Boolean) return Boolean
  function And (B1, B2: in Boolean) return Boolean
  function Or  (B1, B2: in Boolean) return Boolean

- Integer

  function Add (I1, I2: in Integer) return Integer
  function Sub (I1, I2: in Integer) return Integer
  function Eq  (I1, I2: in Integer) return Boolean
  function Lt  (I1, I2: in Integer) return Boolean
  function Gt  (I1, I2: in Integer) return Boolean

4.5.3.4. Source location search capability

The service function Find_Element allows to go to the innermost ASIS
Element that corresponds to a given source location (SLOC). This
function accepts three parameters, the first one, a Compilation_Unit
corresponding to the source text, the second, SLOC line, and the third,
SLOC column. It returns an Element that contains this SLOC or
Nil_Element if none do or Nil_Compilation_Unit was supplied.

If the column value supplied is outside the line bounds, the search of
a deepest Element on this line is performed.

This function is extremely helpful if a user wants to experiment with
a certain fragment of the source text but would like to avoid having to
build entire ASIS execution context that leads to the subtree he is
interested in.


5. Browser capability

5.1. Access to the Browser capability from inside ASIStant

Browser is invoked from the ASIStant command line by calling the ASIStant
service function BROWSE. BROWSE disables the ASIStant command interpreter and
enables the command interpreter of Browser. The Browser 'Q' command switches
back into the ASIStant environment by enabling ASIStant command interpreter
and disabling the Browser interpreter.

BROWSE has a single parameter of Element type, and it starts browsing the ASIS
tree starting from its argument Element. BROWSE returns the result of Element
type, an Element on which the process of tree browsing was stopped.

In the ASIStant environment Browse can be called as an ordinary ASIS
query or ASIStant command. E.g. if a user types

> set (e0, Browse (e1))

he will start ASIS tree browsing from e1, and when he finishes the
browsing, e0 will represent the last Element being visited during the
browsing.

If a user types

> Browse (e1)

he will be able to browse the ASIS tree, but the last element of the
browsing will be discarded.

Additionally, a version that starts with a Compilation_Unit is supplied.
Calling Browse for Compilation_Unit C is exactly equivalent to calling
Browse for Unit_Declaration (C), but saves a lot of keystrokes.


5.2. Browser environment

In a loop, the Browser displays (see 5.3.) the ASIS Element it currently
points at and expects one of the following keystrokes:

  U - one step up the ASIS tree (equivalent to calling the ASIS
      Enclosing_Element query);

  D - one step down the ASIS tree, to the left-most component of the
      current Element

  N - go to the right sibling (to the next element in the ASIS tree
      hierarchy)

  P - go to the left sibling (to the previous element in the ASIS
      tree hierarchy)

  \<option> - change the form of displaying the current Element

  ? - print the list of ASIS structural queries applicable to the current
      Element (see 8.2. for more information)

  <SPACE><query> - call the <query> for the current Element (see 5.4.);

  G - go to a certain SLOC in the source of a unit containing current
      element (see 5.5);

  Q - back to the ASIStant environment, the Browser command interpreter is
      disabled and the ASIStant command interpreter is enabled with the
      current Element returned as a result of the call to BROWSE;

Browser immediately interprets the keystroke and displays the new current
Element. If the message "Cannot go in this direction." appears, this means
that traversal in this direction from current node is impossible (that is,
the current node is either a terminal Element and it is not possible to go
down, or it is the leftmost or the rightmost component of some element, and
it is not possible to go left or right, or it is the top Element in its
enclosing unit structure and it is not possible to go up).


5.3. Displaying the current Element

The current Element is displayed in the same format as PRINT utility, using
whatever additions are imposed by the current PRINTDETAIL setting. By pressing
the '\' key it is possible to change this setting from inside the Browser
session. The '\' command is an equivalent of PRINTDETAIL (see 4.5.2.4.)


5.4. Advanced traversal

It is possible to issue additional queries from inside the Browser (for
example, semantic queries). The legal queries are those that accept one
parameter of type Element and return Element as a result.

When the user presses <SPACE>, he is asked to enter the query name. If the
query is legal, the current Element is replaced by the result of the call to
the given query with the current Element as a parameter.


5.5. Going to a different source location

The SLOC search capability (see 4.5.3.4) is also accessible from the Browser.

When the user presses "G", he is asked to enter the SLOC line, and after that,
the SLOC column. The Browser then switches to the Element corresponding to this
SLOC in a unit to which current Element belongs.


6.  Log Management

ASIStant is able to record the trace of a session in a log file. Logging is
started by calling the utility Log, and providing a name for the log file. For
example, the command

  log ("dummy.log")

will start recording the session to the file "dummy.log". Logging can be
stopped and the log file closed by a Log command without parameters.

NOTE: ASIStant always records all session events in the file "session.log". It
contains the most detailed information about the current session. Also, all
commands processed by ASIStant are recorded in the file "input.log".


The Loglevel utility is used to filter the log output. Its parameter is an
integer value that inhibits logging of messages with lower priority. For
instance, after the command

  loglevel (5)

only the most important messages are logged. Note that the Loglevel utility
does not affect output to the display and to the file "session.log".


7.  Script Management

ASIStant scripts are text files that contain sequences of ASIStant function
calls.

When launching ASIStant, a script name can be specified as a command-line
parameter. The script is then interpreted before exiting on a Quit command or
handing control over to the user for a follow-up interactive session.

A script file can also be parameter of the Run utility, which hands over
control to a script. For example, the command

  run ("dummy.scr")

starts execution of the script "dummy.scr". When ASIStant encounters a Pause
utility, it pauses the execution of the script and switches to interactive
command-line mode. A paused script can be resumed by the Run utility without
parameters.

Scripts can be nested. Therefore, if the script "dummy_1.scr" issues the
command

  run ("dummy_2.scr"),

the execution of "dummy_1.scr" is suspended, and the execution of
"dummy_2.scr" is started. The execution of script "dummy_1.scr" will resume
after the script dummy_2.scr has been completed by encountering its end or an
Exit command.

Scripts can be launched in an interactive mode by means of IRun utility, which
can be used exactly in the same way as Run. When launched in this mode, the
script is executed one statement at a time and then the user is expected to
press one of the following keys:

  C - continue running the script in a normal (non-interactive) mode

  P - pause the script

  Q - abort the script

  any other key - proceed to next statement


8. Online help


ASIStant's online help offers brief reference information on some ASIS and
ASIStant aspects. The online help is available through

  help (<topic-name>)

command. There are currently two groups of topics, described in this section.


8.1. Help on query syntax profile

Specifying the name of an ASIS query or ASIStant service function as a
parameter to Help command displays the syntax of an ASIS query or ASIStant
service function. If the query name is overloaded, all possible syntax profiles
are displayed. For example,

>help (Debug_Image)
Debug_Image syntax:
   Debug_Image (CONTEXT) return STRING
   Debug_Image (CUNIT) return STRING
   Debug_Image (ELEMENT) return STRING
   Debug_Image (LINE) return STRING


8.2. Help on applicable queries


Specifying the extended Element kind (that is, the terminal value in ASIS
Element classification hierarchy - e.g. A_Loop_Statement, but not A_Statement)
as a parameter to Help command displays the all ASIS structural queries,
applicable to the Element of this kind. For example,

>help (A_Loop_Statement)
Appropriate ASIS structural queries for A_Loop_Statement:
   Label_Names
   Statement_Identifier
   Loop_Statements


9.  Implementation Limitations of ASIStant


9.1.  Syntax and Run-Time Limitations

In a command-line mode, a function call must fit on a single line. In a script,
line breaks may appear wherever a blank space is allowed.

The length of the name of a variable is limited to 32.

The depth of script nesting is limited to 5.


9.2.  Default Parameters

Some ASIS queries have default parameters, whereas ASIStant does not support
default parameters; all arguments must be specified explicitly.

For example, Body_Statements cannot be called as

  set (My_Stmts, Body_Statements (My_Body))

using the default "False" for the Include_Pragmas parameter. Instead, this
parameter must be provided explicitly:

  set (My_Stmts, Body_Statements (My_Body, False))


9.3.  Not Implemented ASIS Queries

The generic procedure Traverse_Element is not and will not be implemented.
Indeed we do not see a simple solution for generic instantiation with
user-defined procedures as actuals, within an interpretation-oriented
environment.


9.4.  Ambiguous ASIS Queries

There are two ASIS queries that have the same parameter and result profiles.
These queries cannot be distinguished without full name qualification.
ASIStant deals with this issue by providing unique simple names for them.

The two queries are Asis.Statements.Is_Name_Repeated and
Asis.Declarations.Is_Name_Repeated; they are renamed
Statements_Is_Name_Repeated and Declarations_Is_Name_Repeated, respectively.


9.5. Package Asis.Data_Decomposition

ASIStant now offers a partial support of this optional ASIS package; supported
are types Array_Component, Record_Component and their lists, as are all queries
that work with these types.

All queries from Asis.Data_Decomposition have a prefix DDA prepended to their
names to signify that they come from Data Decomposition Annex. Thus, a valid
ASIStant query is DDA_Array_Components, NOT simply Array_Components.


10.  References

[1] S. Rybin, A. Strohmeier, E. Zueff: ASIS for GNAT: Goals,
    Problems and Implementation Strategy. In Marcel Toussaint (Ed.),
    Second International Eurospace - Ada-Europe Symposium Proceedings,
    LNCS no 1031, Springer, pp. 139-151.

[2] S. Rybin, A. Strohmeier, A. Kuchumov, V. Fofanov: ASIS for GNAT:
    From the Prototype to the Full Implementation. In Alfred Strohmeier
    (Ed.), 1996 Ada-Europe International Conference on Reliable Software
    Technologies Proceedings, LNCS no 1088, Springer, pp. 298-311, 1996.

[3] V. Fofanov, S. Rybin, A. Strohmeier: ASIStint: An Interactive ASIS
    Interpreter. In Tri-Ada'97 Conference Proceedings, ACM Press,
    pp.205-209, 1997