home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / print / pret.doc < prev    next >
Encoding:
Text File  |  1988-05-03  |  71.8 KB  |  2,431 lines

  1. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. --read.me
  3. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4.  
  5. To build the pretty printer tool:
  6.  
  7.  1. Compile all the abstractions into a program library (see READ.ME in
  8.     abstractions directory for details).
  9.  
  10.  2. Compile everything named in the PRETTY.CO file into the program library
  11.     containing the abstractions or a sublibrary whose parent library contains 
  12.     all the abstractions. PRETTY.CO lists file names in the correct compilation 
  13.     order.
  14.  
  15.  3. Link Pretty_Print_Driver with the program library where everything was 
  16.     compiled.  To do this using the DEC Ada compiler type:
  17.     $ acs link pretty_printer_driver
  18.  
  19. To run the tool on VMS:
  20.  
  21.  1. Define a logical symbol for the executable of PRETTY_PRINT.  For example,
  22.  
  23.     PRETTY_PRINT :== $DRB1:[NOSC.TOOLS.PRETTY]PRETTY.EXE
  24.  
  25.      NOTE: The full path name of the executable is required in the 
  26.      definition of the symbol.   The pathname given here is just an example
  27.      and will be different on your system.
  28.  
  29.  2. Enter the command with appropriate parameters.  For example,
  30.  
  31.     PRETTY_PRINT (SOURCE=>"test.ada", OUTPUT=>"test.out");
  32.  
  33.     Entering the command PRETTY_PRINT with no parameters gives a brief
  34.     description of how to use the tool.
  35.  
  36. Files contained in this directory:
  37.  
  38. PRETTY.CO   -- Compilation order for pretty printer sources
  39. PRETTY.EXE  -- VMS 4.0 pretty printer executable
  40.  
  41. The [.SOURCE] subdirectory contains most of the sources that make up the 
  42. pretty printer tool.  Other sources are contained in the abstractions
  43. directory.
  44.  
  45. Files in [.SOURCE]:
  46.  
  47.     Most of the sources for the parser which the pretty printer tool uses are 
  48.     in the abstractions directory. The four units which are unique to this tool
  49.     are as follows:
  50.  
  51.     PARSE.BDY    -- The body of the parser, with a call to the Put subprogram
  52.                     which outputs Tokens
  53.     APPLYACT.SUB -- A subunit of the parser which calls the action subprograms
  54.     GETNEXT.SUB  -- A subunit of the lexer which returns non-comment tokens
  55.                     to the lexer and buffers comments
  56.     GRMCONST.BDY -- Grammar constants for the parse tables
  57.     PTBLS.BDY    -- The parse tables.
  58.  
  59.     The other source files which make up the pretty printer are as follows:
  60.  
  61.     PPRDECLS.DAT -- Declarations for pretty printer
  62.     PPRUTILS.SPC -- Utilities for pretty printer, called from 
  63.                     Parser.Apply_Actions (specification)
  64.     PPRUTILS.BDY -- Utilities for pretty printer, called from 
  65.                     Parser.Apply_Actions (body)
  66.     CHANGE.SPC   -- Subprograms for the manipulation of source text 
  67.                     (specification)
  68.     CHANGE.BDY   -- Subprograms for the manipulation of source text (body)
  69.     PRETTY.SPC   -- Main procedure of pretty printer (specification) 
  70.     PRETTY.BDY   -- Main procedure of pretty printer (body)
  71.     DRIVER.ADA   -- Decodes command line and calls Pretty_Print
  72.  
  73. The [.TEST] subdirectory contains the tests used in testing the pretty printer.
  74. The ACVC A tests and the pretty printer sources were used in testing as well.
  75.  
  76. Files in [.TEST]:
  77.  
  78.     ALL.IN      -- Tests a variety of constructs
  79.     ANDTHEN.IN  -- Tests spacing of tokens for "and then" and "or else"
  80.     BINOP.IN    -- Tests binary vs. unary operators
  81.     BLANKS.IN   -- Tests that blanks in the source are printed
  82.     CLOSEID.IN  -- Tests that closing identifiers are printed out
  83.     COLON.IN    -- Tests that colons are lined up
  84.     COMMENT.IN  -- Tests handling off comments with formatting on and off
  85.     DEEPIF.IN   -- Tests nesting of very deep if statements
  86.     DELIM.IN    -- Tests basic vs. extended set delimiters
  87.     DEPTH.IN    -- Contains several levels of nested units to test the DEPTH 
  88.                    parameter
  89.     ERROR.IN    -- Tests handling of syntax errors
  90.     GENERIC.IN  -- Tests indentation of generic specifications
  91.     MULTIPLE.IN -- Tests multiple units in one file
  92.     TASK.IN     -- Tests task constructs
  93.  
  94. The [.DOC] subdirectory contains the documentation for the pretty printer.
  95.  
  96. Files in [.DOC]:
  97.  
  98.     USERMAN.MEM -- Pretty Printer user's manual
  99.     USERMAN.RNO -- Runoff input for user's manual
  100.     INSTALL.MEM -- Pretty Printer installation guide
  101.     INSTALL.RNO -- Runoff input for installation guide
  102.     RELEASE.NTS -- Release notes
  103.     PPRGRM.LIS  -- Listing of pretty printer grammar.  The rule numbers
  104.                    in this file may be used to make changes to the case
  105.                    statement in the Apply_Actions subunit.
  106.     PRETTY.CNT  -- Statement counts and line counts of pretty printer 
  107.                    source files
  108. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  109. --userman.mem
  110. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.    ______ _______ ______ ______
  118. 1  PRETTY PRINTER USER'S MANUAL
  119.  
  120.  
  121.  
  122.      ____________
  123. 1.1  Introduction
  124.  
  125.  
  126.  
  127.      The pretty printer formats and prints the contents  of  a  source
  128.  
  129. file  according  to Ada Language Reference Manual (LRM) conventions as
  130.  
  131. the  default,  or  to   installation-specified   conventions.    These
  132.  
  133. conventions are described in detail in the Description section of this
  134.  
  135. manual.
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.      _______ ______
  144. 1.2  Command Format
  145.  
  146.  
  147.  
  148.      The command line call to the pretty  printer  should  follow  Ada
  149.  
  150. language  rules for procedure calls.  The parameters must therefore be
  151.  
  152. a correct combination of positional and named associations.  The typed
  153.  
  154. command  is  echoed  to  the  standard  error file before the input is
  155.  
  156. formatted, showing all parameters as named associations.
  157.  
  158.  
  159.  
  160.      The specification for the command format is  shown  below.   This
  161.  
  162. specification  is  also  written  to  the standard error file when the
  163.  
  164. command with no parameters is entered.
  165.  
  166.  
  167.  
  168. -- PRETTY_PRINT: Formats an Ada source file
  169.  
  170.  
  171.  
  172. type SWITCH is (ON, OFF);
  173.  
  174. type DEPTH_RANGE is NATURAL RANGE 0 .. 1000;
  175.  
  176.  
  177.  
  178. procedure PRETTY_PRINT (SOURCE      : STRING;
  179.  
  180.                         OUTPUT      : STRING := "";
  181.  
  182.                         COMMENTS    : SWITCH := ON;
  183.  
  184.                         PAGINATE    : SWITCH := OFF;
  185.  
  186.                         DEPTH       : DEPTH_RANGE := 0);
  187.  
  188.  
  189.  
  190. -- SOURCE specifies the file to be pretty printed
  191.  
  192. -- OUTPUT specifies the result file (default is standard output)
  193.  
  194. -- COMMENTS indicates whether or not to do comment formatting
  195.  
  196. -- PAGINATE indicates whether or not to paginate the output
  197.  
  198. -- DEPTH indicates the depth of the scope of pretty printing
  199.  
  200.                                                                 Page 2
  201.  
  202.  
  203.  
  204.  
  205.  
  206.      ___________
  207. 1.3  Description
  208.  
  209.  
  210.  
  211.      The pretty printer formats and prints the contents  of  a  source
  212.  
  213. file  according  to Ada Language Reference Manual (LRM) conventions as
  214.  
  215. the  default,  or  to  installation-specified  conventions.   See  the
  216.  
  217. installation guide for details on how to install different conventions
  218.  
  219. (i.e.capitalize identifiers instead of  printing  them  in  uppercase)
  220.  
  221. either  on  a  "per-user"  or "per-installation" level.  Note that the
  222.  
  223. items listed below refer to the default  (LRM-style)  formatting,  and
  224.  
  225. may   not  apply  if  the  pretty  printer  is  installed  with  other
  226.  
  227. conventions.
  228.  
  229.  
  230.  
  231.      Colons are lined up vertically.
  232.  
  233.  
  234.  
  235.      Indentation of all constructs is done as in the LRM.
  236.  
  237.  
  238.  
  239.      Identifiers  and  keywords  are  printed  as  in  the  LRM  (i.e.
  240.  
  241.      keywords   are  bold  printed  and  identifiers  are  printed  in
  242.  
  243.      uppercase) Note that nothing is bold printed  when  PAGINATE=>OFF
  244.  
  245.      (the default) is specified.  See explanation below.
  246.  
  247.  
  248.  
  249.      Parameter modes (in, out, or in out) are always printed, even  if
  250.  
  251.      default values were used in the source.
  252.  
  253.  
  254.  
  255.      Closing identifiers (eg.  end SQRT;) are always printed, even  if
  256.  
  257.      they defaulted in the source.
  258.  
  259.  
  260.  
  261.      Comment formatting is done if COMMENTS=>ON is  specified  on  the
  262.  
  263.      command line:
  264.  
  265.  
  266.  
  267.           Blank  lines  between  a  declaration  and  the  descriptive
  268.  
  269.           comment following it are removed.
  270.  
  271.  
  272.  
  273.           Blank lines  between  comments  and  the  action  statements
  274.  
  275.           directly following them are removed.
  276.  
  277.  
  278.  
  279.           Comments are indented to the same level as the source text.
  280.  
  281.  
  282.  
  283.      Output defaults to  standard  output.   An  output  file  may  be
  284.  
  285.      specified  with  the  OUTPUT  parameter.   Error messages and the
  286.  
  287.      echoed command are written to the standard error file.
  288.  
  289.  
  290.  
  291.      Output is paginated if PAGINATE=>ON is specified on  the  command
  292.  
  293.      line.   If  the  output is paginated, a header and page number is
  294.  
  295.      written on each page and page breaks are inserted.  If the output
  296.  
  297.      is   not   paginated   (either   by   default  or  by  specifying
  298.  
  299.      PAGINATE=>OFF on the command line), it is  valid  as  Ada  source
  300.  
  301.      which  may  be  compiled.  Note that nothing will be bold printed
  302.  
  303.      when PAGINATE=>OFF is specified,  in  order  to  avoid  inserting
  304.  
  305.      control characters into the file.
  306.  
  307.  
  308.  
  309.      Delimiters are printed using the extended  (",  #,  |)  character
  310.  
  311.      set.
  312.  
  313.  
  314.  
  315.      The DEPTH parameter  specifies  what  the  scope  of  the  pretty
  316.  
  317.                                                                 Page 3
  318.  
  319.  
  320.  
  321.  
  322.  
  323.      printed  output  should  be.  For example, specifying DEPTH=>1 on
  324.  
  325.      the  command  line  would  result  in  output  showing  only  the
  326.  
  327.      outermost  view  of  the  source.  The portions of text not being
  328.  
  329.      printed are replaced by a  placeholder  in  angle  brackets.   If
  330.  
  331.      DEPTH is 0 (the default) then everything is pretty printed.
  332.  
  333.                                                                 Page 4
  334.  
  335.  
  336.  
  337.  
  338.  
  339.      ________
  340. 1.4  Examples
  341.  
  342.  
  343.  
  344. To format the contents of a source file called MATHUTILS.ADA with  the
  345.  
  346. default  output,  default  comment  formatting  and no pagination, the
  347.  
  348. following command would be issued:
  349.  
  350.  
  351.  
  352.     PRETTY_PRINT("MATHUTILS.ADA");
  353.  
  354.  
  355.  
  356. To format the contents of MATHUTILS.ADA, put  the  output  in  a  file
  357.  
  358. called  MATHUTILS.OUT,  and paginate the output, the following command
  359.  
  360. would be issued:
  361.  
  362.  
  363.  
  364.     PRETTY_PRINT("MATHUTILS.ADA", "MATHUTILS.OUT", PAGINATE=>ON);
  365.  
  366.  
  367.  
  368. Note that the following command accomplishes the same purpose:
  369.  
  370.  
  371.  
  372.     PRETTY_PRINT(SOURCE=>"MATHUTILS.ADA",OUTPUT=>"MATHUTILS.OUT",PAGINATE=>ON);
  373.  
  374.  
  375.  
  376. To get a brief help message, the following command would be issued:
  377.  
  378.  
  379.  
  380.     PRETTY_PRINT;
  381.  
  382. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  383. --userman.rno
  384. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  385. .HEADER LEVEL 1 ^&Pretty Printer User's Manual\&
  386. .HEADER LEVEL 2 ^&Introduction\&
  387. .PARAGRAPH
  388. The pretty printer formats and prints the contents of a source file
  389. according to Ada Language Reference Manual (LRM) conventions as the default,
  390. or to installation-specified conventions.  These conventions are described in
  391. detail in the Description section of this manual.
  392. .HEADER LEVEL 2 ^&Command Format\&
  393. .PARAGRAPH
  394. The command line call to the pretty printer should follow Ada language rules
  395. for procedure calls.  The parameters must therefore be a correct combination
  396. of positional and named associations.  The typed command is echoed to the
  397. standard error file before the input is formatted, showing
  398. all parameters as named associations.
  399. .PARAGRAPH
  400. The specification for the command format is shown below.  This specification
  401. is also written to the standard error file when the command with no parameters
  402. is entered.  
  403. .BLANK
  404. .LITERAL
  405. -- PRETTY_PRINT: Formats an Ada source file
  406.  
  407. type SWITCH is (ON, OFF);
  408. type DEPTH_RANGE is NATURAL RANGE 0 .. 1000;
  409.  
  410. procedure PRETTY_PRINT (SOURCE      : STRING;
  411.                         OUTPUT      : STRING := "";
  412.                         COMMENTS    : SWITCH := ON;
  413.                         PAGINATE    : SWITCH := OFF;
  414.                         DEPTH       : DEPTH_RANGE := 0);
  415.  
  416. -- SOURCE specifies the file to be pretty printed
  417. -- OUTPUT specifies the result file (default is standard output)
  418. -- COMMENTS indicates whether or not to do comment formatting
  419. -- PAGINATE indicates whether or not to paginate the output
  420. -- DEPTH indicates the depth of the scope of pretty printing
  421. .END LITERAL
  422. .PAGE
  423. .HEADER LEVEL 2 ^&Description\&
  424. .PARAGRAPH
  425. The pretty printer formats and prints the contents of a source file
  426. according to Ada Language Reference Manual (LRM) conventions as the default,
  427. or to installation-specified conventions.  See the installation guide for
  428. details on how to install different conventions (i.e.capitalize identifiers 
  429. instead of printing them in uppercase)
  430. either on a "per-user" or "per-installation" level.
  431. Note that the items listed below 
  432. refer to the default (LRM-style) formatting, and may not apply if the
  433. pretty printer is installed with other conventions.
  434. .LEFT MARGIN 5
  435. .BLANK
  436. Colons are lined up vertically.
  437. .BLANK
  438. Indentation of all constructs is done as in the LRM.
  439. .BLANK
  440. Identifiers and keywords are printed as in the LRM (i.e. keywords are bold
  441. printed and identifiers are printed in uppercase)  Note that nothing is
  442. bold printed when PAGINATE=>OFF (the default) is specified.  See explanation
  443. below.
  444. .BLANK
  445. Parameter modes (in, out, or in out) are always printed, even if default values
  446. were used in the source.
  447. .BLANK
  448. Closing identifiers (eg. end SQRT;) are always printed, even if they defaulted
  449. in the source.
  450. .BLANK
  451. Comment formatting is done if COMMENTS=>ON is specified on the command line:
  452. .LEFT MARGIN 10
  453. .BLANK
  454. Blank lines between a declaration and the descriptive comment following
  455. it are removed.
  456. .BLANK
  457. Blank lines between comments and the action statements directly following
  458. them are removed.
  459. .BLANK
  460. Comments are indented to the same level as the source text.
  461. .LEFT MARGIN 5
  462. .BLANK
  463. Output defaults to standard output.  An output file may be specified
  464. with the OUTPUT parameter.  Error messages and the echoed command are
  465. written to the standard error file.
  466. .BLANK
  467. Output is paginated if PAGINATE=>ON is specified on the command line.
  468. If the output is paginated, a header and page number is written on each
  469. page and page breaks are inserted.  If the output is not paginated
  470. (either by default or by specifying PAGINATE=>OFF on the command line), 
  471. it is valid as Ada source which may be compiled.  
  472. Note that nothing will be bold printed when PAGINATE=>OFF is specified,
  473. in order to avoid inserting control characters into the file.
  474. .BLANK
  475. Delimiters are printed using the extended (", _#, |) character set.
  476. .BLANK
  477. The DEPTH parameter specifies what the scope of the pretty printed output 
  478. should be.  For example, specifying DEPTH=>1 on the command line would
  479. result in output showing only the outermost view of the source.
  480. The portions of text not being printed are replaced by a placeholder in
  481. angle brackets.  If DEPTH is 0 (the default) then everything is pretty printed.
  482. .LEFT MARGIN 0
  483. .PAGE
  484. .HEADER LEVEL 2 ^&Examples\&
  485. To format the contents of a source file called MATHUTILS.ADA with the
  486. default output, default comment formatting and no pagination, the
  487. following command would be issued:
  488. .BLANK
  489. .LITERAL
  490.     PRETTY_PRINT("MATHUTILS.ADA");
  491. .END LITERAL
  492. .BLANK
  493. To format the contents of MATHUTILS.ADA, put the output in a file called
  494. MATHUTILS.OUT, and paginate the output, the following command would be
  495. issued:
  496. .BLANK
  497. .LITERAL
  498.     PRETTY_PRINT("MATHUTILS.ADA", "MATHUTILS.OUT", PAGINATE=>ON);
  499. .END LITERAL
  500. .BLANK
  501. Note that the following command accomplishes the same purpose:
  502. .BLANK
  503. .LITERAL
  504.     PRETTY_PRINT(SOURCE=>"MATHUTILS.ADA",OUTPUT=>"MATHUTILS.OUT",PAGINATE=>ON);
  505. .END LITERAL
  506. .BLANK
  507. To get a brief help message, the following command would be issued:
  508. .BLANK
  509. .LITERAL
  510.     PRETTY_PRINT;
  511. .END LITERAL
  512. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  513. --install.mem
  514. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.    ______ _______ ____________ _____
  522. 1  PRETTY PRINTER INSTALLATION GUIDE
  523.  
  524.  
  525.  
  526.      __________ ____ ___________ _____ ____ ___
  527. 1.1  Installing With Conventions Other Than LRM
  528.  
  529.  
  530.  
  531.      The  package  Pretty_Printer_Declarations  isolates  all  of  the
  532.  
  533. values  which  "parameterize"  the pretty printer.  In order to change
  534.  
  535. the pretty printing  conventions  for  a  specific  installation,  the
  536.  
  537. values  should  be changed in this package.  It is also possible for a
  538.  
  539. user to modify the driver for the pretty printer in order  to  install
  540.  
  541. his own conventions which override the defaults given on installation.
  542.  
  543. This type of modification is described in section 1.2.
  544.  
  545.  
  546.  
  547.      After      installing      the      changes      to       package
  548.  
  549. Pretty_Printer_Declarations, the tool must be recompiled and relinked,
  550.  
  551. since many of the units depend on this package.
  552.  
  553.  
  554.  
  555.      The following objects in package Pretty_Printer_Declarations  may
  556.  
  557. be modified to change the pretty printing conventions.
  558.  
  559.  
  560.  
  561.  
  562.  
  563.      Delimiters          Extended or Basic character set
  564.  
  565.  
  566.  
  567.      Page_Width          Column width of output page
  568.  
  569.  
  570.  
  571.      RH_Margin           Right hand margin, beyond which no
  572.  
  573.                          indentation is performed
  574.  
  575.  
  576.  
  577.      Indentation_Level   Level of indentation
  578.  
  579.  
  580.  
  581.      Depth               Default depth of pretty printing, which can
  582.  
  583.                          be overriden on command line
  584.  
  585.  
  586.  
  587.      Keyword             Case of keyword
  588.  
  589.  
  590.  
  591.      Identifier          Case of identifier
  592.  
  593.  
  594.  
  595.      Comment_Formatting  Enables or disables comment formatting as the
  596.  
  597.                          default,  which  can  be  overriden  on   the
  598.  
  599.                          command line
  600.  
  601.  
  602.  
  603.      Colon_Alignment     Enables or disables colon alignment
  604.  
  605.  
  606.  
  607.      Explicit_Param_Mode Enables or disables "in" to be inserted in
  608.  
  609.                          "in" parameter declarations
  610.  
  611.  
  612.  
  613.      Closing_Identifiers Enables or disables whether closing
  614.  
  615.                          identifiers and  designators  which  did  not
  616.  
  617.                          appear in the source are inserted
  618.  
  619.  
  620.  
  621.      Paginated_Format    Enables or disables pagination as the
  622.  
  623.                          default,  which  can  be  overriden  on   the
  624.  
  625.                          command line
  626.  
  627.  
  628.  
  629.      Spacing_Table       The spacing table contains entries which
  630.  
  631.                          determine the spacing of each type of  token.
  632.  
  633.                                                                 Page 2
  634.  
  635.  
  636.  
  637.  
  638.  
  639.                          These entries should probably not be changed,
  640.  
  641.                          as many of the tokens are  context  dependent
  642.  
  643.                          and  additional  spacing  in  added  in  unit
  644.  
  645.                          Pretty_Printer_Utilities.Spaced_Token   given
  646.  
  647.                          the  context.   Tokens  which  are handled in
  648.  
  649.                          unit    Pretty_Printer_Utilities.Spaced_Token
  650.  
  651.                          are commented as such in the table.
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.           ________ _ ______ ____ _____________ ___________
  660.      1.2  Creating A Driver With User-Specific Conventions
  661.  
  662.  
  663.  
  664.           It is possible that a user may wish to run a pretty  printer
  665.  
  666.      with  his  own  pretty printing conventions which differ from the
  667.  
  668.      installation conventions.  This can be accomplished by  modifying
  669.  
  670.      just    the    driver   for   the   pretty   printer   (in   unit
  671.  
  672.      Pretty_Print_Driver)   to   set   the   variables   in    package
  673.  
  674.      Pretty_Printer_Declarations.   For example, if the user wishes to
  675.  
  676.      have all identifiers capitalized, he may  include  the  following
  677.  
  678.      line as the first line of his copy of Pretty_Print_Driver:
  679.  
  680.  
  681.  
  682.          Pretty_Printer_Declarations.Identifier :=
  683.  
  684.              Pretty_Printer_Declarations.Capitalize1;
  685.  
  686.  
  687.  
  688.      All modifications of this sort should appear as the  first  lines
  689.  
  690.      of  the  driver,  before  the working values are initialized from
  691.  
  692.      package Pretty_Printer_Declarations.  The list of  objects  which
  693.  
  694.      may  be  modified in package Pretty_Printer_Declarations may also
  695.  
  696.      be used as the list of objects which may be  modified  in  driver
  697.  
  698.      Pretty_Print_Driver.  The types for these objects may be obtained
  699.  
  700.      by looking at package Pretty_Printer_Declarations.
  701.  
  702.  
  703.  
  704.           Unlike    the    recompilation    in    the    change     to
  705.  
  706.      Pretty_Printer_Declarations,  only  Pretty_Print_Driver  must  be
  707.  
  708.      recompiled for  a  user-specific  modification.   Note  that  the
  709.  
  710.      program  library  containing  this driver must be a sublibrary of
  711.  
  712.      the pretty printer library, however.
  713.  
  714. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  715. --install.rno
  716. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  717. .HEADER LEVEL 1 ^&Pretty Printer Installation Guide\&
  718. .HEADER LEVEL 2 ^&Installing with Conventions Other than LRM\&
  719. .PARAGRAPH
  720. The package Pretty__Printer__Declarations isolates all of the values which
  721. "parameterize" the pretty printer.  In order to change the pretty printing
  722. conventions for a specific installation, the values should be changed in
  723. this package.  It is also possible for a user to modify the driver for the
  724. pretty printer in order to install his own conventions which override the
  725. defaults given on installation.  This type of modification is described 
  726. in section 1.2.
  727. .PARAGRAPH
  728. After installing the changes to package Pretty__Printer__Declarations,
  729. the tool must be recompiled and relinked, since many of the units depend on
  730. this package.
  731. .PARAGRAPH
  732. The following objects in package Pretty__Printer__Declarations may be
  733. modified to change the pretty printing conventions.
  734. .BLANK
  735. .LEFT MARGIN 5
  736. .TAB STOP 25
  737. .BLANK
  738. Delimiters    Extended or Basic character set
  739. .BLANK
  740. Page__Width    Column width of output page
  741. .BLANK
  742. RH__Margin    Right hand margin, beyond which no 
  743. .LEFT MARGIN 25
  744. indentation is performed
  745. .LEFT MARGIN 5
  746. .BLANK
  747. Indentation__Level    Level of indentation
  748. .BLANK
  749. Depth    Default depth of pretty printing, which can 
  750. .LEFT MARGIN 25
  751. be overriden on command line
  752. .LEFT MARGIN 5
  753. .BLANK
  754. Keyword    Case of keyword
  755. .BLANK
  756. Identifier    Case of identifier
  757. .BLANK
  758. Comment__Formatting    Enables or disables comment formatting as the 
  759. .LEFT MARGIN 25
  760. default, which can be overriden on the command line
  761. .LEFT MARGIN 5
  762. .BLANK
  763. Colon__Alignment    Enables or disables colon alignment
  764. .BLANK
  765. Explicit__Param__Mode    Enables or disables "in" to be inserted in
  766. .LEFT MARGIN 25
  767. "in" parameter declarations
  768. .LEFT MARGIN 5
  769. .BLANK
  770. Closing__Identifiers    Enables or disables whether closing 
  771. .LEFT MARGIN 25
  772. identifiers and designators which did not appear in the source are inserted
  773. .LEFT MARGIN 5
  774. .BLANK
  775. Paginated__Format    Enables or disables pagination as the 
  776. .LEFT MARGIN 25
  777. default, which can be overriden on the command line
  778. .LEFT MARGIN 5
  779. .BLANK
  780. Spacing__Table    The spacing table contains entries which 
  781. .LEFT MARGIN 25
  782. determine the spacing
  783. of each type of token.  These entries should probably not be changed, as many
  784. of the tokens are context dependent and additional spacing in added in
  785. unit Pretty__Printer__Utilities.Spaced__Token given the context.  Tokens which
  786. are handled in unit Pretty__Printer__Utilities.Spaced__Token are commented as
  787. such in the table.
  788. .LEFT MARGIN 5
  789. .HEADER LEVEL 2 ^&Creating a Driver with User-Specific Conventions\&
  790. .PARAGRAPH
  791. It is possible that a user may wish to run a pretty printer with his own pretty
  792. printing conventions which differ from the installation conventions.  This can
  793. be accomplished by modifying just the driver for the pretty printer (in unit
  794. Pretty__Print__Driver)  to set the variables in package 
  795. Pretty__Printer__Declarations.  For example, if the user wishes to have all
  796. identifiers capitalized, he may include the following line as the first
  797. line of his copy of Pretty__Print__Driver:
  798. .BLANK
  799. .LITERAL
  800.     Pretty_Printer_Declarations.Identifier :=
  801.         Pretty_Printer_Declarations.Capitalize1;
  802. .END LITERAL
  803. .BLANK
  804. All modifications of this sort should appear as the first lines of the driver,
  805. before the working values are initialized from package 
  806. Pretty__Printer__Declarations.
  807. The list of objects which may be modified in package 
  808. Pretty__Printer__Declarations may also be used as the list of objects which may
  809. be modified in driver Pretty__Print__Driver.  The types for these objects may
  810. be obtained by looking at package Pretty__Printer__Declarations.
  811. .PARAGRAPH
  812. Unlike the recompilation in the change to Pretty__Printer__Declarations, only 
  813. Pretty__Print__Driver must be recompiled for a user-specific modification.  
  814. Note that the program library containing this driver must be a sublibrary 
  815. of the pretty printer library, however.
  816. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  817. --release.nts
  818. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  819. This is the first release of the Pretty Printer.
  820. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  821. --pprgrm.lis
  822. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  823. Options in Effect
  824.      
  825.  DEFAULT
  826.  ACTIONS
  827.  DEFMARK = %
  828.  ORMARK = |
  829.  BLOCKB = /.
  830.  BLOCKE = ./
  831.  COMMB = --
  832.  COMME =
  833.  LOADF =   70
  834. Grammar Constants
  835.      
  836.  Number of Terminals   94
  837.  Number of Non Terminals  266
  838.  Number of Rules  521
  839.  Number of Items 1726
  840.  Number of states  996
  841.  Number of shift entries 1540
  842.  Number of goto entries 2249
  843.  Number of reduce entries  204
  844.  Number of entries saved by default reductions 6336
  845.  Number of shift/reduce conflicts    0
  846.  Number of reduce/reduce conflicts    0
  847. The following symbols are not used in any right hand side
  848.      
  849.  comment_literal
  850.  
  851.  Terminalss
  852.      
  853.  ABORT
  854.  ABS
  855.  ACCEPT
  856.  ACCESS
  857.  ALL
  858.  AND
  859.  ARRAY
  860.  AT
  861.  BEGIN
  862.  BODY
  863.  CASE
  864.  CONSTANT
  865.  DECLARE
  866.  DELAY
  867.  DELTA
  868.  DIGITS
  869.  DO
  870.  ELSE
  871.  ELSIF
  872.  END
  873.  ENTRY
  874.  EXCEPTION
  875.  EXIT
  876.  FOR
  877.  FUNCTION
  878.  GENERIC
  879.  GOTO
  880.  IF
  881.  IN
  882.  IS
  883.  LIMITED
  884.  LOOP
  885.  MOD
  886.  NEW
  887.  NOT
  888.  NULL
  889.  OF
  890.  OR
  891.  OTHERS
  892.  OUT
  893.  PACKAGE
  894.  PRAGMA
  895.  PRIVATE
  896.  PROCEDURE
  897.  RAISE
  898.  RANGE
  899.  RECORD
  900.  REM
  901.  RENAMES
  902.  RETURN
  903.  REVERSE
  904.  SELECT
  905.  SEPARATE
  906.  SUBTYPE
  907.  TASK
  908.  TERMINATE
  909.  THEN
  910.  TYPE
  911.  USE
  912.  WHEN
  913.  WHILE
  914.  WITH
  915.  XOR
  916.  identifier
  917.  numeric_literal
  918.  string_literal
  919.  character_literal
  920.  &
  921.  '
  922.  (
  923.  )
  924.  *
  925.  +
  926.  ,
  927.  -
  928.  .
  929.  /
  930.  :
  931.  ;
  932.  <
  933.  =
  934.  >
  935.  '|'
  936.  =>
  937.  ..
  938.  **
  939.  :=
  940.  /=
  941.  >=
  942.  <=
  943.  <<
  944.  >>
  945.  <>
  946.  comment_literal
  947.  
  948.  Rules
  949.      
  950.     1 pragma ::= PRAGMA identifier ( general_component_associations ) ;
  951.      
  952.     2 pragma ::= PRAGMA identifier ;
  953.      
  954.     3 basic_declaration ::= type_declaration
  955.      
  956.     4 basic_declaration ::= subtype_declaration
  957.      
  958.     5 basic_declaration ::= subprogram_declaration
  959.      
  960.     6 basic_declaration ::= package_declaration
  961.      
  962.     7 basic_declaration ::= task_specification
  963.      
  964.     8 basic_declaration ::= generic_specification
  965.      
  966.     9 basic_declaration ::= generic_instantiation
  967.      
  968.    10 basic_declaration ::= renaming_declaration
  969.      
  970.    11 basic_colon_declaration ::= object_declaration
  971.      
  972.    12 basic_colon_declaration ::= number_declaration
  973.      
  974.    13 basic_colon_declaration ::= exception_declaration
  975.      
  976.    14 basic_colon_declaration ::= renaming_colon_declaration
  977.      
  978.    15 object_declaration ::= identifier_list : subtype_indication [:=expression]
  979.      
  980.       ;
  981.      
  982.    16 object_declaration ::= identifier_list : CONSTANT subtype_indication
  983.       [:=expression] ;
  984.      
  985.    17 object_declaration ::= identifier_list : constrained_array_definition
  986.       [:=expression] ;
  987.      
  988.    18 object_declaration ::= identifier_list : CONSTANT
  989.       constrained_array_definition [:=expression] ;
  990.      
  991.    19 number_declaration ::= identifier_list : CONSTANT := expression ;
  992.      
  993.    20 identifier_list ::= identifier {,identifier}
  994.      
  995.    21 type_declaration ::= full_type_declaration
  996.      
  997.    22 type_declaration ::= incomplete_type_declaration
  998.      
  999.    23 type_declaration ::= private_type_declaration
  1000.      
  1001.    24 full_type_declaration ::= TYPE identifier IS type_definition
  1002.      
  1003.    25 full_type_declaration ::= TYPE identifier left_paren
  1004.       discriminant_specification {;discriminant_specification} right_paren IS
  1005.       type_definition
  1006.      
  1007.    26 type_definition ::= enumeration_type_definition ;
  1008.      
  1009.    27 type_definition ::= integer_type_definition ;
  1010.      
  1011.    28 type_definition ::= real_type_definition ;
  1012.      
  1013.    29 type_definition ::= array_type_definition ;
  1014.      
  1015.    30 type_definition ::= record_type_definition ;
  1016.      
  1017.    31 type_definition ::= access_type_definition ;
  1018.      
  1019.    32 type_definition ::= derived_type_definition ;
  1020.      
  1021.    33 subtype_declaration ::= SUBTYPE identifier IS subtype_indication ;
  1022.      
  1023.    34 subtype_indication ::= type_mark
  1024.      
  1025.    35 subtype_indication ::= type_mark constraint
  1026.      
  1027.    36 type_mark ::= type_name|subtype_name
  1028.      
  1029.    37 constraint ::= range_constraint
  1030.      
  1031.    38 constraint ::= floating_point_constraint
  1032.      
  1033.    39 constraint ::= fixed_point_constraint
  1034.      
  1035.    40 constraint ::= ( general_component_associations )
  1036.      
  1037.    41 derived_type_definition ::= NEW subtype_indication
  1038.      
  1039.    42 range_constraint ::= RANGE simple_expression
  1040.      
  1041.    43 range_constraint ::= RANGE simple_expression .. simple_expression
  1042.      
  1043.    44 enumeration_type_definition ::= ( enumeration_literal_specification
  1044.       {,enumeration_literal_specification} )
  1045.      
  1046.    45 enumeration_literal_specification ::= enumeration_literal
  1047.      
  1048.    46 enumeration_literal ::= identifier
  1049.      
  1050.    47 enumeration_literal ::= character_literal
  1051.      
  1052.    48 integer_type_definition ::= range_constraint
  1053.      
  1054.    49 real_type_definition ::= floating_point_constraint
  1055.      
  1056.    50 real_type_definition ::= fixed_point_constraint
  1057.      
  1058.    51 floating_point_constraint ::= floating_accuracy_definition
  1059.       [range_constraint]
  1060.      
  1061.    52 floating_accuracy_definition ::= DIGITS simple_expression
  1062.      
  1063.    53 fixed_point_constraint ::= fixed_accuracy_definition [range_constraint]
  1064.      
  1065.    54 fixed_accuracy_definition ::= DELTA simple_expression
  1066.      
  1067.    55 array_type_definition ::= unconstrained_array_definition
  1068.      
  1069.    56 array_type_definition ::= constrained_array_definition
  1070.      
  1071.    57 unconstrained_array_definition ::= ARRAY ( index_subtype_definition
  1072.       {,index_subtype_definition} ) OF subtype_indication
  1073.      
  1074.    58 constrained_array_definition ::= ARRAY index_constraint OF
  1075.       subtype_indication
  1076.      
  1077.    59 index_subtype_definition ::= name RANGE <>
  1078.      
  1079.    60 index_constraint ::= ( discrete_range {,discrete_range} )
  1080.      
  1081.    61 discrete_range ::= name range_constraint
  1082.      
  1083.    62 discrete_range ::= range
  1084.      
  1085.    63 range ::= simple_expression
  1086.      
  1087.    64 range ::= simple_expression .. simple_expression
  1088.      
  1089.    65 record_type_definition ::= start_of_record_type record_terminal
  1090.       component_list END RECORD
  1091.      
  1092.    66 component_list ::= {pragma_decl} {component_declaration}
  1093.       component_declaration closing_{pragma_decl}
  1094.      
  1095.    67 component_list ::= {pragma_decl} {component_declaration}' variant_part
  1096.       {pragma_decl}
  1097.      
  1098.    68 component_list ::= null_statement {pragma_decl}
  1099.      
  1100.    69 component_declaration ::= identifier_list : subtype_indication
  1101.       [:=expression] ;
  1102.      
  1103.    70 discriminant_specification ::= identifier_list : type_mark [:=expression]
  1104.      
  1105.    71 variant_part ::= CASE__identifier__IS {pragma_variant}__variant__{variant}
  1106.      
  1107.       END CASE ;
  1108.      
  1109.    72 variant ::= WHEN__variant_choice__{|variant_choice}__=> component_list
  1110.      
  1111.    73 variant ::= WHEN__variant_OTHERS__=> component_list
  1112.      
  1113.    74 choice ::= simple_expression
  1114.      
  1115.    75 choice ::= simple_expression .. simple_expression
  1116.      
  1117.    76 choice ::= name range_constraint
  1118.      
  1119.    77 access_type_definition ::= ACCESS subtype_indication
  1120.      
  1121.    78 incomplete_type_declaration ::= TYPE identifier ;
  1122.      
  1123.    79 incomplete_type_declaration ::= TYPE identifier left_paren
  1124.       discriminant_specification {;discriminant_specification} right_paren ;
  1125.      
  1126.    80 declarative_part ::= {basic_declarative_item}
  1127.      
  1128.    81 declarative_part ::= {basic_declarative_item} body {later_declarative_item
  1129. }
  1130.      
  1131.    82 basic_declarative_item ::= basic_declaration
  1132.      
  1133.    83 basic_declarative_item ::= representation_clause
  1134.      
  1135.    84 basic_declarative_item ::= use_clause
  1136.      
  1137.    85 later_declarative_item ::= body
  1138.      
  1139.    86 later_declarative_item ::= subprogram_declaration
  1140.      
  1141.    87 later_declarative_item ::= package_declaration
  1142.      
  1143.    88 later_declarative_item ::= task_specification
  1144.      
  1145.    89 later_declarative_item ::= generic_specification
  1146.      
  1147.    90 later_declarative_item ::= use_clause
  1148.      
  1149.    91 later_declarative_item ::= generic_instantiation
  1150.      
  1151.    92 body ::= proper_body
  1152.      
  1153.    93 body ::= body_stub
  1154.      
  1155.    94 proper_body ::= subprogram_body
  1156.      
  1157.    95 proper_body ::= package_body
  1158.      
  1159.    96 proper_body ::= task_body
  1160.      
  1161.    97 name ::= identifier
  1162.      
  1163.    98 name ::= character_literal
  1164.      
  1165.    99 name ::= string_literal
  1166.      
  1167.   100 name ::= indexed_component
  1168.      
  1169.   101 name ::= selected_component
  1170.      
  1171.   102 name ::= attribute
  1172.      
  1173.   103 indexed_component ::= name ( general_component_associations )
  1174.      
  1175.   104 selected_component ::= name . selector
  1176.      
  1177.   105 selected_component ::= name . ALL
  1178.      
  1179.   106 selector ::= identifier
  1180.      
  1181.   107 selector ::= character_literal
  1182.      
  1183.   108 selector ::= string_literal
  1184.      
  1185.   109 attribute ::= name ' attribute_designator
  1186.      
  1187.   110 attribute_designator ::= identifier
  1188.      
  1189.   111 attribute_designator ::= DIGITS
  1190.      
  1191.   112 attribute_designator ::= DELTA
  1192.      
  1193.   113 attribute_designator ::= RANGE
  1194.      
  1195.   114 aggregate ::= ( component_associations )
  1196.      
  1197.   115 component_associations ::= expression,expression{,expression}
  1198.       [,others=>expression]
  1199.      
  1200.   116 component_associations ::= expression,expression{,expression} ,
  1201.       choice{|choice}=>expression {,choice{|choice}=>expression}
  1202.       [,others=>expression]
  1203.      
  1204.   117 component_associations ::= expression , choice{|choice}=>expression
  1205.       {,choice{|choice}=>expression} [,others=>expression]
  1206.      
  1207.   118 component_associations ::= choice{|choice}=>expression
  1208.       {,choice{|choice}=>expression} [,others=>expression]
  1209.      
  1210.   119 component_associations ::= expression , others=>expression
  1211.      
  1212.   120 component_associations ::= others=>expression
  1213.      
  1214.   121 general_component_associations ::= ga_expression{,ga_expression}
  1215.      
  1216.   122 general_component_associations ::= ga_expression{,ga_expression} ,
  1217.       identifier{|identifier}=>expression {,identifier{|identifier}=>expression}
  1218.      
  1219.      
  1220.   123 general_component_associations ::= identifier{|identifier}=>expression
  1221.       {,identifier{|identifier}=>expression}
  1222.      
  1223.   124 expression ::= relation
  1224.      
  1225.   125 expression ::= relation{AND__relation}
  1226.      
  1227.   126 expression ::= relation{OR__relation}
  1228.      
  1229.   127 expression ::= relation{XOR__relation}
  1230.      
  1231.   128 expression ::= relation{AND__THEN__relation}
  1232.      
  1233.   129 expression ::= relation{OR__ELSE__relation}
  1234.      
  1235.   130 relation ::= simple_expression [relational_operator__simple_expression]
  1236.      
  1237.   131 relation ::= simple_expression [NOT]IN range
  1238.      
  1239.   132 simple_expression ::=
  1240.       [unary_adding_operator]term{binary_adding_operator__term}
  1241.      
  1242.   133 term ::= factor{multiplying_operator__factor}
  1243.      
  1244.   134 factor ::= primary [exponentiating_operator__primary]
  1245.      
  1246.   135 factor ::= high_precedence_unary_operator primary
  1247.      
  1248.   136 parenthesized_expression ::= ( expression )
  1249.      
  1250.   137 primary ::= numeric_literal
  1251.      
  1252.   138 primary ::= NULL
  1253.      
  1254.   139 primary ::= name
  1255.      
  1256.   140 primary ::= allocator
  1257.      
  1258.   141 primary ::= qualified_expression
  1259.      
  1260.   142 primary ::= aggregate
  1261.      
  1262.   143 primary ::= parenthesized_expression
  1263.      
  1264.   144 relational_operator ::= =
  1265.      
  1266.   145 relational_operator ::= /=
  1267.      
  1268.   146 relational_operator ::= <
  1269.      
  1270.   147 relational_operator ::= <=
  1271.      
  1272.   148 relational_operator ::= >
  1273.      
  1274.   149 relational_operator ::= >=
  1275.      
  1276.   150 binary_adding_operator ::= +
  1277.      
  1278.   151 binary_adding_operator ::= -
  1279.      
  1280.   152 binary_adding_operator ::= &
  1281.      
  1282.   153 unary_adding_operator ::= +
  1283.      
  1284.   154 unary_adding_operator ::= -
  1285.      
  1286.   155 high_precedence_unary_operator ::= ABS
  1287.      
  1288.   156 high_precedence_unary_operator ::= NOT
  1289.      
  1290.   157 multiplying_operator ::= *
  1291.      
  1292.   158 multiplying_operator ::= /
  1293.      
  1294.   159 multiplying_operator ::= MOD
  1295.      
  1296.   160 multiplying_operator ::= REM
  1297.      
  1298.   161 exponentiating_operator ::= **
  1299.      
  1300.   162 qualified_expression ::= name ' aggregate
  1301.      
  1302.   163 qualified_expression ::= name ' parenthesized_expression
  1303.      
  1304.   164 allocator ::= NEW type_mark
  1305.      
  1306.   165 allocator ::= NEW type_mark ( general_component_associations )
  1307.      
  1308.   166 allocator ::= NEW expanded_name ' parenthesized_expression
  1309.      
  1310.   167 allocator ::= NEW expanded_name ' aggregate
  1311.      
  1312.   168 sequence_of_statements ::= {pragma_stm} statement {statement}
  1313.      
  1314.   169 statement ::= simple_statement
  1315.      
  1316.   170 statement ::= compound_statement
  1317.      
  1318.   171 statement ::= {label}+ simple_statement
  1319.      
  1320.   172 statement ::= {label}+ compound_statement
  1321.      
  1322.   173 simple_statement ::= null_statement
  1323.      
  1324.   174 simple_statement ::= assignment_statement
  1325.      
  1326.   175 simple_statement ::= exit_statement
  1327.      
  1328.   176 simple_statement ::= return_statement
  1329.      
  1330.   177 simple_statement ::= goto_statement
  1331.      
  1332.   178 simple_statement ::= delay_statement
  1333.      
  1334.   179 simple_statement ::= abort_statement
  1335.      
  1336.   180 simple_statement ::= raise_statement
  1337.      
  1338.   181 simple_statement ::= code_statement
  1339.      
  1340.   182 simple_statement ::= call_statement
  1341.      
  1342.   183 compound_statement ::= if_statement
  1343.      
  1344.   184 compound_statement ::= case_statement
  1345.      
  1346.   185 compound_statement ::= loop_statement
  1347.      
  1348.   186 compound_statement ::= block_statement
  1349.      
  1350.   187 compound_statement ::= accept_statement
  1351.      
  1352.   188 compound_statement ::= select_statement
  1353.      
  1354.   189 label ::= << identifier >>
  1355.      
  1356.   190 null_statement ::= NULL ;
  1357.      
  1358.   191 assignment_statement ::= name := expression ;
  1359.      
  1360.   192 if_statement ::= IF condition__THEN__sequence_of_statements
  1361.       {ELSIF__condition__THEN__sequence_of_statements}
  1362.       [ELSE__sequence_of_statements] END IF ;
  1363.      
  1364.   193 condition ::= expression
  1365.      
  1366.   194 case_statement ::= CASE__expression__IS
  1367.       {pragma_alt}__case_statement_alternative__{case_statement_alternative} END
  1368.      
  1369.       CASE ;
  1370.      
  1371.   195 case_statement_alternative ::= WHEN__choice__{|choice}__=>
  1372.       sequence_of_statements
  1373.      
  1374.   196 case_statement_alternative ::= WHEN__OTHERS__=> sequence_of_statements
  1375.      
  1376.   197 loop_statement ::= [loop_identifier:] loop_terminal sequence_of_statements
  1377.      
  1378.       END LOOP [identifier] ;
  1379.      
  1380.   198 loop_statement ::= [loop_identifier:] iteration_rule loop_terminal
  1381.       sequence_of_statements END LOOP [identifier] ;
  1382.      
  1383.   199 iteration_rule ::= WHILE condition
  1384.      
  1385.   200 iteration_rule ::= FOR identifier IN discrete_range
  1386.      
  1387.   201 iteration_rule ::= FOR identifier IN REVERSE discrete_range
  1388.      
  1389.   202 declarative_part__begin_end_block ::= declarative_part begin_end_block
  1390.      
  1391.   203 begin_end_block ::= begin_terminal sequence_of_statements END
  1392.      
  1393.   204 begin_end_block ::= begin_terminal sequence_of_statements
  1394.       exception_terminal {pragma_alt}__exception_handler_list END
  1395.      
  1396.   205 block_statement ::= [block_identifier:] declare_terminal
  1397.       declarative_part__begin_end_block [identifier] ;
  1398.      
  1399.   206 block_statement ::= [block_identifier:] begin_end_block [identifier] ;
  1400.      
  1401.   207 exit_statement ::= EXIT ;
  1402.      
  1403.   208 exit_statement ::= EXIT WHEN condition ;
  1404.      
  1405.   209 exit_statement ::= EXIT expanded_name ;
  1406.      
  1407.   210 exit_statement ::= EXIT expanded_name WHEN condition ;
  1408.      
  1409.   211 return_statement ::= RETURN ;
  1410.      
  1411.   212 return_statement ::= RETURN expression ;
  1412.      
  1413.   213 goto_statement ::= GOTO expanded_name ;
  1414.      
  1415.   214 subprogram_declaration ::= subprogram_specification ;
  1416.      
  1417.   215 subprogram_specification ::= PROCEDURE start_identifier
  1418.      
  1419.   216 subprogram_specification ::= PROCEDURE start_identifier left_paren
  1420.       parameter_specification {;parameter_specification} right_paren
  1421.      
  1422.   217 subprogram_specification ::= FUNCTION designator RETURN type_mark
  1423.      
  1424.   218 subprogram_specification ::= FUNCTION designator left_paren
  1425.       parameter_specification {;parameter_specification} right_paren RETURN
  1426.       type_mark
  1427.      
  1428.   219 designator ::= identifier
  1429.      
  1430.   220 designator ::= string_literal
  1431.      
  1432.   221 parameter_specification ::= identifier_list mode type_mark [:=expression]
  1433.      
  1434.   222 mode ::= generic_parameter_mode
  1435.      
  1436.   223 mode ::= : OUT
  1437.      
  1438.   224 generic_parameter_mode ::= :
  1439.      
  1440.   225 generic_parameter_mode ::= : IN
  1441.      
  1442.   226 generic_parameter_mode ::= : IN OUT
  1443.      
  1444.   227 subprogram_body ::= subprogram_specification__IS
  1445.       declarative_part__begin_end_block [end_designator] ;
  1446.      
  1447.   228 call_statement ::= name ;
  1448.      
  1449.   229 package_declaration ::= package_specification ;
  1450.      
  1451.   230 package_specification ::= PACKAGE__start_identifier__IS
  1452.       {basic_declarative_item}' END [identifier]
  1453.      
  1454.   231 package_specification ::= PACKAGE__start_identifier__IS
  1455.       {basic_declarative_item}' private_terminal {basic_declarative_item}' END
  1456.       [identifier]
  1457.      
  1458.   232 package_body ::= PACKAGE__BODY__start_identifier__IS declarative_part END
  1459.       [identifier] ;
  1460.      
  1461.   233 package_body ::= PACKAGE__BODY__start_identifier__IS
  1462.       declarative_part__begin_end_block [identifier] ;
  1463.      
  1464.   234 private_type_declaration ::= TYPE identifier IS LIMITED PRIVATE ;
  1465.      
  1466.   235 private_type_declaration ::= TYPE identifier left_paren
  1467.       discriminant_specification {;discriminant_specification} right_paren IS
  1468.       LIMITED PRIVATE ;
  1469.      
  1470.   236 private_type_declaration ::= TYPE identifier IS PRIVATE ;
  1471.      
  1472.   237 private_type_declaration ::= TYPE identifier left_paren
  1473.       discriminant_specification {;discriminant_specification} right_paren IS
  1474.       PRIVATE ;
  1475.      
  1476.   238 use_clause ::= USE expanded_name {,expanded_name} ;
  1477.      
  1478.   239 renaming_colon_declaration ::= identifier_list : type_mark RENAMES name ;
  1479.      
  1480.   240 renaming_colon_declaration ::= identifier_list : EXCEPTION RENAMES
  1481.       expanded_name ;
  1482.      
  1483.   241 renaming_declaration ::= PACKAGE start_identifier RENAMES expanded_name ;
  1484.      
  1485.   242 renaming_declaration ::= subprogram_specification RENAMES name ;
  1486.      
  1487.   243 task_specification ::= TASK start_identifier ;
  1488.      
  1489.   244 task_specification ::= TASK TYPE start_identifier ;
  1490.      
  1491.   245 task_specification ::= TASK__start_identifier__IS
  1492.       {entry_declaration}__{representation_clause} END [identifier] ;
  1493.      
  1494.   246 task_specification ::= TASK__TYPE__start_identifier__IS
  1495.       {entry_declaration}__{representation_clause} END [identifier] ;
  1496.      
  1497.   247 task_body ::= TASK__BODY__start_identifier__IS
  1498.       declarative_part__begin_end_block [identifier] ;
  1499.      
  1500.   248 entry_declaration ::= ENTRY identifier [(discrete_range)][formal_part] ;
  1501.      
  1502.   249 accept_statement ::= ACCEPT start_identifier [(expression)][formal_part] ;
  1503.      
  1504.      
  1505.   250 accept_statement ::=
  1506.       ACCEPT__start_identifier__[(expression)][formal_part]__DO
  1507.       sequence_of_statements END [identifier] ;
  1508.      
  1509.   251 delay_statement ::= DELAY simple_expression ;
  1510.      
  1511.   252 select_statement ::= selective_wait
  1512.      
  1513.   253 select_statement ::= conditional_entry_call
  1514.      
  1515.   254 select_statement ::= timed_entry_call
  1516.      
  1517.   255 selective_wait ::= select_terminal select_alternative
  1518.       {OR__select_alternative} [ELSE__sequence_of_statements] END SELECT ;
  1519.      
  1520.   256 select_alternative ::= {pragma_stm}
  1521.       WHEN__condition__=>__selective_wait_alternative
  1522.      
  1523.   257 select_alternative ::= {pragma_stm} selective_wait_alternative
  1524.      
  1525.   258 selective_wait_alternative ::= accept_alternative
  1526.      
  1527.   259 selective_wait_alternative ::= delay_alternative
  1528.      
  1529.   260 selective_wait_alternative ::= terminate_alternative
  1530.      
  1531.   261 accept_alternative ::= accept_statement [sequence_of_statements]
  1532.      
  1533.   262 delay_alternative ::= delay_statement [sequence_of_statements]
  1534.      
  1535.   263 terminate_alternative ::= TERMINATE__; {pragma_stm}
  1536.      
  1537.   264 TERMINATE__; ::= TERMINATE ;
  1538.      
  1539.   265 conditional_entry_call ::= select_terminal {pragma_stm}
  1540.       call_statement__[sequence_of_statements] else_terminal
  1541.       sequence_of_statements END SELECT ;
  1542.      
  1543.   266 timed_entry_call ::= select_terminal {pragma_stm}
  1544.       call_statement__[sequence_of_statements] or_terminal {pragma_stm}
  1545.       delay_alternative_in_timed_entry END SELECT ;
  1546.      
  1547.   267 abort_statement ::= ABORT name {,name} ;
  1548.      
  1549.   268 compilation ::= {compilation_unit}
  1550.      
  1551.   269 pragma_header ::= PRAGMA identifier
  1552.      
  1553.   270 compilation_unit ::= pragma_header ( general_component_associations ) ;
  1554.      
  1555.   271 compilation_unit ::= pragma_header ;
  1556.      
  1557.   272 compilation_unit ::= context_clause library_or_secondary_unit
  1558.      
  1559.   273 library_or_secondary_unit ::= subprogram_declaration
  1560.      
  1561.   274 library_or_secondary_unit ::= package_declaration
  1562.      
  1563.   275 library_or_secondary_unit ::= generic_specification
  1564.      
  1565.   276 library_or_secondary_unit ::= generic_instantiation
  1566.      
  1567.   277 library_or_secondary_unit ::= subprogram_body
  1568.      
  1569.   278 library_or_secondary_unit ::= package_body
  1570.      
  1571.   279 library_or_secondary_unit ::= subunit
  1572.      
  1573.   280 context_clause ::= {with_clause{use_clause}}
  1574.      
  1575.   281 with_clause ::= WITH identifier {,used_identifier} ;
  1576.      
  1577.   282 body_stub ::= subprogram_specification IS SEPARATE ;
  1578.      
  1579.   283 body_stub ::= PACKAGE BODY start_identifier IS SEPARATE ;
  1580.      
  1581.   284 body_stub ::= TASK BODY start_identifier IS SEPARATE ;
  1582.      
  1583.   285 subunit ::= SEPARATE__(__expanded_name__) proper_body
  1584.      
  1585.   286 exception_declaration ::= identifier_list : EXCEPTION ;
  1586.      
  1587.   287 exception_handler ::= WHEN__exception_choice__{|exception_choice}__=>
  1588.       sequence_of_statements
  1589.      
  1590.   288 exception_choice ::= expanded_name
  1591.      
  1592.   289 exception_choice ::= OTHERS
  1593.      
  1594.   290 raise_statement ::= RAISE ;
  1595.      
  1596.   291 raise_statement ::= RAISE expanded_name ;
  1597.      
  1598.   292 generic_specification ::= generic_formal_part subprogram_specification ;
  1599.      
  1600.   293 generic_specification ::= generic_formal_part package_specification ;
  1601.      
  1602.   294 generic_formal_part ::= generic_terminal {generic_parameter_declaration}
  1603.      
  1604.   295 generic_parameter_declaration ::= identifier_list generic_parameter_mode
  1605.       type_mark [:=expression] ;
  1606.      
  1607.   296 generic_parameter_declaration ::= TYPE identifier IS
  1608.       generic_type_definition ;
  1609.      
  1610.   297 generic_parameter_declaration ::= TYPE identifier left_paren
  1611.       discriminant_specification {;discriminant_specification} right_paren IS
  1612.       generic_type_definition ;
  1613.      
  1614.   298 generic_parameter_declaration ::= WITH subprogram_specification
  1615.       [IS__name__or__<>] ;
  1616.      
  1617.   299 generic_type_definition ::= ( <> )
  1618.      
  1619.   300 generic_type_definition ::= RANGE <>
  1620.      
  1621.   301 generic_type_definition ::= DIGITS <>
  1622.      
  1623.   302 generic_type_definition ::= DELTA <>
  1624.      
  1625.   303 generic_type_definition ::= LIMITED PRIVATE
  1626.      
  1627.   304 generic_type_definition ::= PRIVATE
  1628.      
  1629.   305 generic_type_definition ::= array_type_definition
  1630.      
  1631.   306 generic_type_definition ::= access_type_definition
  1632.      
  1633.   307 generic_instantiation ::= PACKAGE__start_identifier__IS NEW expanded_name
  1634. ;
  1635.      
  1636.   308 generic_instantiation ::= PACKAGE__start_identifier__IS NEW expanded_name
  1637. (
  1638.       generic_association {,generic_association} ) ;
  1639.      
  1640.   309 generic_instantiation ::= FUNCTION__designator__IS NEW expanded_name ;
  1641.      
  1642.   310 generic_instantiation ::= FUNCTION__designator__IS NEW expanded_name (
  1643.       generic_association {,generic_association} ) ;
  1644.      
  1645.   311 generic_instantiation ::= subprogram_specification__IS NEW expanded_name ;
  1646.      
  1647.      
  1648.   312 generic_instantiation ::= subprogram_specification__IS NEW expanded_name (
  1649.      
  1650.       generic_association {,generic_association} ) ;
  1651.      
  1652.   313 generic_association ::=
  1653.       [generic_formal_parameter=>]generic_actual_parameter
  1654.      
  1655.   314 generic_formal_parameter ::= identifier
  1656.      
  1657.   315 generic_formal_parameter ::= string_literal
  1658.      
  1659.   316 generic_actual_parameter ::= expression
  1660.      
  1661.   317 representation_clause ::= length_clause
  1662.      
  1663.   318 representation_clause ::= enumeration_representation_clause
  1664.      
  1665.   319 representation_clause ::= address_clause
  1666.      
  1667.   320 representation_clause ::= record_representation_clause
  1668.      
  1669.   321 length_clause ::= FOR attribute USE simple_expression ;
  1670.      
  1671.   322 enumeration_representation_clause ::= FOR identifier USE aggregate ;
  1672.      
  1673.   323 record_representation_clause ::= FOR identifier USE start_of_record_type
  1674.       record_terminal {component_clause}' END RECORD ;
  1675.      
  1676.   324 record_representation_clause ::= FOR identifier USE start_of_record_type
  1677.       RECORD alignment_clause {component_clause}' END RECORD ;
  1678.      
  1679.   325 component_clause ::= name AT simple_expression range_constraint ;
  1680.      
  1681.   326 alignment_clause ::= AT MOD simple_expression ;
  1682.      
  1683.   327 address_clause ::= FOR identifier USE AT simple_expression ;
  1684.      
  1685.   328 code_statement ::= name ' aggregate ;
  1686.      
  1687.   329 {pragma_decl} ::= EMPTY
  1688.      
  1689.   330 {pragma_decl} ::= {pragma_decl} pragma
  1690.      
  1691.   331 {pragma_variant} ::= EMPTY
  1692.      
  1693.   332 {pragma_variant} ::= {pragma_variant} pragma
  1694.      
  1695.   333 {pragma_stm} ::= EMPTY
  1696.      
  1697.   334 {pragma_stm} ::= {pragma_stm} pragma
  1698.      
  1699.   335 {pragma_alt} ::= EMPTY
  1700.      
  1701.   336 {pragma_alt} ::= {pragma_alt} pragma
  1702.      
  1703.   337 [:=expression] ::= EMPTY
  1704.      
  1705.   338 [:=expression] ::= := expression
  1706.      
  1707.   339 {,identifier} ::= EMPTY
  1708.      
  1709.   340 {,identifier} ::= {,identifier} , identifier
  1710.      
  1711.   341 type_name|subtype_name ::= expanded_name
  1712.      
  1713.   342 expanded_name ::= identifier
  1714.      
  1715.   343 expanded_name ::= expanded_name . identifier
  1716.      
  1717.   344 {,enumeration_literal_specification} ::= EMPTY
  1718.      
  1719.   345 {,enumeration_literal_specification} ::=
  1720.       {,enumeration_literal_specification} , enumeration_literal_specification
  1721.      
  1722.   346 [range_constraint] ::= EMPTY
  1723.      
  1724.   347 [range_constraint] ::= range_constraint
  1725.      
  1726.   348 {,index_subtype_definition} ::= EMPTY
  1727.      
  1728.   349 {,index_subtype_definition} ::= {,index_subtype_definition} ,
  1729.       index_subtype_definition
  1730.      
  1731.   350 {,discrete_range} ::= EMPTY
  1732.      
  1733.   351 {,discrete_range} ::= {,discrete_range} , discrete_range
  1734.      
  1735.   352 {component_declaration} ::= EMPTY
  1736.      
  1737.   353 {component_declaration} ::= {component_declaration} component_declaration
  1738.       {pragma_decl}
  1739.      
  1740.   354 {;discriminant_specification} ::= EMPTY
  1741.      
  1742.   355 {;discriminant_specification} ::= {;discriminant_specification}
  1743.       discriminant_; discriminant_specification
  1744.      
  1745.   356 {variant} ::= EMPTY
  1746.      
  1747.   357 {variant} ::= {variant} variant
  1748.      
  1749.   358 {|choice} ::= EMPTY
  1750.      
  1751.   359 {|choice} ::= {|choice} '|' choice
  1752.      
  1753.   360 {basic_declarative_item} ::= {pragma_decl}
  1754.      
  1755.   361 {basic_declarative_item} ::= {basic_declarative_item}
  1756.       basic_declarative_item {pragma_decl}
  1757.      
  1758.   362 {basic_declarative_item} ::=
  1759.       {basic_declarative_item}__basic_declarative_item|EMPTY
  1760.       {basic_colon_declaration}
  1761.      
  1762.   363 {later_declarative_item} ::= {pragma_decl}
  1763.      
  1764.   364 {later_declarative_item} ::= {later_declarative_item}
  1765.       later_declarative_item {pragma_decl}
  1766.      
  1767.   365 expression,expression{,expression} ::= expression , expression
  1768.      
  1769.   366 expression,expression{,expression} ::= expression,expression{,expression}
  1770. ,
  1771.       expression
  1772.      
  1773.   367 choice{|choice}=>expression ::= choice {|choice} => expression
  1774.      
  1775.   368 {,choice{|choice}=>expression} ::= EMPTY
  1776.      
  1777.   369 {,choice{|choice}=>expression} ::= {,choice{|choice}=>expression} ,
  1778.       choice{|choice}=>expression
  1779.      
  1780.   370 [,others=>expression] ::= EMPTY
  1781.      
  1782.   371 [,others=>expression] ::= , others=>expression
  1783.      
  1784.   372 others=>expression ::= OTHERS => expression
  1785.      
  1786.   373 ga_expression ::= expression
  1787.      
  1788.   374 ga_expression ::= simple_expression .. simple_expression
  1789.      
  1790.   375 ga_expression ::= name range_constraint
  1791.      
  1792.   376 ga_expression{,ga_expression} ::= ga_expression
  1793.      
  1794.   377 ga_expression{,ga_expression} ::= ga_expression{,ga_expression} ,
  1795.       ga_expression
  1796.      
  1797.   378 identifier{|identifier}=>expression ::= identifier {|identifier} =>
  1798.       expression
  1799.      
  1800.   379 {,identifier{|identifier}=>expression} ::= EMPTY
  1801.      
  1802.   380 {,identifier{|identifier}=>expression} ::=
  1803.       {,identifier{|identifier}=>expression} ,
  1804.       identifier{|identifier}=>expression
  1805.      
  1806.   381 {|identifier} ::= EMPTY
  1807.      
  1808.   382 {|identifier} ::= {|identifier} '|' identifier
  1809.      
  1810.   383 relation{AND__relation} ::= relation AND relation
  1811.      
  1812.   384 relation{AND__relation} ::= relation{AND__relation} AND relation
  1813.      
  1814.   385 relation{OR__relation} ::= relation OR relation
  1815.      
  1816.   386 relation{OR__relation} ::= relation{OR__relation} OR relation
  1817.      
  1818.   387 relation{XOR__relation} ::= relation XOR relation
  1819.      
  1820.   388 relation{XOR__relation} ::= relation{XOR__relation} XOR relation
  1821.      
  1822.   389 relation{AND__THEN__relation} ::= relation AND THEN relation
  1823.      
  1824.   390 relation{AND__THEN__relation} ::= relation{AND__THEN__relation} AND THEN
  1825.       relation
  1826.      
  1827.   391 relation{OR__ELSE__relation} ::= relation OR ELSE relation
  1828.      
  1829.   392 relation{OR__ELSE__relation} ::= relation{OR__ELSE__relation} OR ELSE
  1830.       relation
  1831.      
  1832.   393 [relational_operator__simple_expression] ::= EMPTY
  1833.      
  1834.   394 [relational_operator__simple_expression] ::= relational_operator
  1835.       simple_expression
  1836.      
  1837.   395 [NOT]IN ::= IN
  1838.      
  1839.   396 [NOT]IN ::= NOT IN
  1840.      
  1841.   397 [unary_adding_operator]term{binary_adding_operator__term} ::= term
  1842.      
  1843.   398 [unary_adding_operator]term{binary_adding_operator__term} ::=
  1844.       unary_adding_operator term
  1845.      
  1846.   399 [unary_adding_operator]term{binary_adding_operator__term} ::=
  1847.       [unary_adding_operator]term{binary_adding_operator__term}
  1848.       binary_adding_operator term
  1849.      
  1850.   400 factor{multiplying_operator__factor} ::= factor
  1851.      
  1852.   401 factor{multiplying_operator__factor} ::=
  1853.       factor{multiplying_operator__factor} multiplying_operator factor
  1854.      
  1855.   402 [exponentiating_operator__primary] ::= EMPTY
  1856.      
  1857.   403 [exponentiating_operator__primary] ::= exponentiating_operator primary
  1858.      
  1859.   404 {statement} ::= {pragma_stm}
  1860.      
  1861.   405 {statement} ::= {statement} statement {pragma_stm}
  1862.      
  1863.   406 {label}+ ::= label
  1864.      
  1865.   407 {label}+ ::= {label}+ label
  1866.      
  1867.   408 condition__THEN__sequence_of_statements ::= condition__THEN
  1868.       sequence_of_statements
  1869.      
  1870.   409 {ELSIF__condition__THEN__sequence_of_statements} ::= EMPTY
  1871.      
  1872.   410 {ELSIF__condition__THEN__sequence_of_statements} ::=
  1873.       {ELSIF__condition__THEN__sequence_of_statements} ELSIF__condition__THEN
  1874.       sequence_of_statements
  1875.      
  1876.   411 [ELSE__sequence_of_statements] ::= EMPTY
  1877.      
  1878.   412 [ELSE__sequence_of_statements] ::= else_terminal sequence_of_statements
  1879.      
  1880.   413 {case_statement_alternative} ::= EMPTY
  1881.      
  1882.   414 {case_statement_alternative} ::= {case_statement_alternative}
  1883.       case_statement_alternative
  1884.      
  1885.   415 [loop_identifier:] ::= EMPTY
  1886.      
  1887.   416 [loop_identifier:] ::= identifier :
  1888.      
  1889.   417 [identifier] ::= EMPTY
  1890.      
  1891.   418 [identifier] ::= identifier
  1892.      
  1893.   419 [block_identifier:] ::= EMPTY
  1894.      
  1895.   420 [block_identifier:] ::= identifier :
  1896.      
  1897.   421 {pragma_alt}__exception_handler_list ::= {pragma_alt}
  1898.       exception_handler_list
  1899.      
  1900.   422 exception_handler_list ::= exception_handler
  1901.      
  1902.   423 exception_handler_list ::= exception_handler_list exception_handler
  1903.      
  1904.   424 {;parameter_specification} ::= EMPTY
  1905.      
  1906.   425 {;parameter_specification} ::= {;parameter_specification} parameter_;
  1907.       parameter_specification
  1908.      
  1909.   426 [end_designator] ::= EMPTY
  1910.      
  1911.   427 [end_designator] ::= identifier
  1912.      
  1913.   428 [end_designator] ::= string_literal
  1914.      
  1915.   429 {,expanded_name} ::= EMPTY
  1916.      
  1917.   430 {,expanded_name} ::= {,expanded_name} , expanded_name
  1918.      
  1919.   431 {entry_declaration} ::= {pragma_decl}
  1920.      
  1921.   432 {entry_declaration} ::= {entry_declaration} entry_declaration {pragma_decl
  1922. }
  1923.      
  1924.   433 {representation_clause} ::= EMPTY
  1925.      
  1926.   434 {representation_clause} ::= {representation_clause} representation_clause
  1927.       {pragma_decl}
  1928.      
  1929.   435 [(discrete_range)][formal_part] ::= EMPTY
  1930.      
  1931.   436 [(discrete_range)][formal_part] ::= left_paren parameter_specification
  1932.       {;parameter_specification} right_paren
  1933.      
  1934.   437 [(discrete_range)][formal_part] ::= left_paren discrete_range right_paren
  1935.      
  1936.   438 [(discrete_range)][formal_part] ::= left_paren discrete_range right_paren
  1937.       left_paren parameter_specification {;parameter_specification} right_paren
  1938.      
  1939.   439 [(expression)][formal_part] ::= EMPTY
  1940.      
  1941.   440 [(expression)][formal_part] ::= left_paren parameter_specification
  1942.       {;parameter_specification} right_paren
  1943.      
  1944.   441 [(expression)][formal_part] ::= left_paren expression right_paren
  1945.      
  1946.   442 [(expression)][formal_part] ::= left_paren expression right_paren
  1947.       left_paren parameter_specification {;parameter_specification} right_paren
  1948.      
  1949.   443 {OR__select_alternative} ::= EMPTY
  1950.      
  1951.   444 {OR__select_alternative} ::= {OR__select_alternative} or_terminal
  1952.       select_alternative
  1953.      
  1954.   445 [sequence_of_statements] ::= {pragma_stm}
  1955.      
  1956.   446 [sequence_of_statements] ::= optional_sequence_of_statements
  1957.      
  1958.   447 {,name} ::= EMPTY
  1959.      
  1960.   448 {,name} ::= {,name} , name
  1961.      
  1962.   449 {compilation_unit} ::= compilation_unit
  1963.      
  1964.   450 {compilation_unit} ::= {compilation_unit} compilation_unit
  1965.      
  1966.   451 {with_clause{use_clause}} ::= EMPTY
  1967.      
  1968.   452 {with_clause{use_clause}} ::= {with_clause{use_clause}} with_clause
  1969.       use_clause_list
  1970.      
  1971.   453 use_clause_list ::= {pragma_decl}
  1972.      
  1973.   454 use_clause_list ::= use_clause_list use_clause {pragma_decl}
  1974.      
  1975.   455 {,used_identifier} ::= EMPTY
  1976.      
  1977.   456 {,used_identifier} ::= {,used_identifier} , identifier
  1978.      
  1979.   457 {|exception_choice} ::= EMPTY
  1980.      
  1981.   458 {|exception_choice} ::= {|exception_choice} '|' exception_choice
  1982.      
  1983.   459 {generic_parameter_declaration} ::= EMPTY
  1984.      
  1985.   460 {generic_parameter_declaration} ::= {generic_parameter_declaration}
  1986.       generic_parameter_declaration
  1987.      
  1988.   461 [IS__name__or__<>] ::= EMPTY
  1989.      
  1990.   462 [IS__name__or__<>] ::= IS name
  1991.      
  1992.   463 [IS__name__or__<>] ::= IS <>
  1993.      
  1994.   464 {,generic_association} ::= EMPTY
  1995.      
  1996.   465 {,generic_association} ::= {,generic_association} , generic_association
  1997.      
  1998.   466 [generic_formal_parameter=>]generic_actual_parameter ::=
  1999.       generic_actual_parameter
  2000.      
  2001.   467 [generic_formal_parameter=>]generic_actual_parameter ::=
  2002.       generic_formal_parameter => generic_actual_parameter
  2003.      
  2004.   468 {component_clause} ::= {pragma_decl}
  2005.      
  2006.   469 {component_clause} ::= {component_clause} component_clause {pragma_decl}
  2007.      
  2008.   470 record_terminal ::= RECORD
  2009.      
  2010.   471 closing_{pragma_decl} ::= {pragma_decl}
  2011.      
  2012.   472 {component_declaration}' ::= {component_declaration}
  2013.      
  2014.   473 start_of_record_type ::= EMPTY
  2015.      
  2016.   474 CASE__identifier__IS ::= CASE identifier IS
  2017.      
  2018.   475 WHEN__variant_choice__{|variant_choice}__=> ::= WHEN__choice__{|choice}__=
  2019. >
  2020.      
  2021.   476 WHEN__variant_OTHERS__=> ::= WHEN__OTHERS__=>
  2022.      
  2023.   477 WHEN__choice__{|choice}__=> ::= WHEN choice {|choice} =>
  2024.      
  2025.   478 WHEN__OTHERS__=> ::= WHEN OTHERS =>
  2026.      
  2027.   479 generic_terminal ::= GENERIC
  2028.      
  2029.   480 CASE__expression__IS ::= CASE expression IS
  2030.      
  2031.   481 {pragma_alt}__case_statement_alternative__{case_statement_alternative} ::=
  2032.      
  2033.       {pragma_alt} case_statement_alternative {case_statement_alternative}
  2034.      
  2035.   482 loop_terminal ::= LOOP
  2036.      
  2037.   483 begin_terminal ::= BEGIN
  2038.      
  2039.   484 {pragma_variant}__variant__{variant} ::= {pragma_variant} variant {variant
  2040. }
  2041.      
  2042.   485 exception_terminal ::= EXCEPTION
  2043.      
  2044.   486 declare_terminal ::= DECLARE
  2045.      
  2046.   487 PACKAGE__start_identifier__IS ::= PACKAGE start_identifier IS
  2047.      
  2048.   488 start_identifier ::= identifier
  2049.      
  2050.   489 {basic_declarative_item}' ::= {basic_declarative_item}
  2051.      
  2052.   490 {entry_declaration}__{representation_clause} ::= {entry_declaration}
  2053.       {representation_clause}
  2054.      
  2055.   491 private_terminal ::= PRIVATE
  2056.      
  2057.   492 PACKAGE__BODY__start_identifier__IS ::= PACKAGE BODY start_identifier IS
  2058.      
  2059.   493 TASK__start_identifier__IS ::= TASK start_identifier IS
  2060.      
  2061.   494 TASK__TYPE__start_identifier__IS ::= TASK TYPE start_identifier IS
  2062.      
  2063.   495 TASK__BODY__start_identifier__IS ::= TASK BODY start_identifier IS
  2064.      
  2065.   496 ACCEPT__start_identifier__[(expression)][formal_part]__DO ::= ACCEPT
  2066.       start_identifier [(expression)][formal_part] DO
  2067.      
  2068.   497 select_terminal ::= SELECT
  2069.      
  2070.   498 call_statement__[sequence_of_statements] ::= call_statement
  2071.       [sequence_of_statements]
  2072.      
  2073.   499 optional_sequence_of_statements ::= {pragma_stm} statement {statement}
  2074.      
  2075.   500 delay_alternative_in_timed_entry ::= delay_alternative
  2076.      
  2077.   501 WHEN__condition__=>__selective_wait_alternative ::= WHEN__condition__=>
  2078.       selective_wait_alternative
  2079.      
  2080.   502 WHEN__condition__=> ::= WHEN condition =>
  2081.      
  2082.   503 WHEN__exception_choice__{|exception_choice}__=> ::= WHEN exception_choice
  2083.       {|exception_choice} =>
  2084.      
  2085.   504 FUNCTION__designator__IS ::= FUNCTION designator IS
  2086.      
  2087.   505 subprogram_specification__IS ::= subprogram_specification IS
  2088.      
  2089.   506 {component_clause}' ::= {component_clause}
  2090.      
  2091.   507 SEPARATE__(__expanded_name__) ::= SEPARATE ( expanded_name )
  2092.      
  2093.   508 {basic_colon_declaration} ::= start_{basic_colon_declaration}
  2094.       {basic_colon_declaration}' basic_colon_declaration {pragma_decl}
  2095.      
  2096.   509 start_{basic_colon_declaration} ::= EMPTY
  2097.      
  2098.   510 {basic_colon_declaration}' ::= {basic_colon_declaration}'
  2099.       basic_colon_declaration {pragma_decl}
  2100.      
  2101.   511 {basic_colon_declaration}' ::= EMPTY
  2102.      
  2103.   512 {basic_declarative_item}__basic_declarative_item|EMPTY ::=
  2104.       {basic_declarative_item} basic_declarative_item {pragma_decl}
  2105.      
  2106.   513 {basic_declarative_item}__basic_declarative_item|EMPTY ::= {pragma_decl}
  2107.      
  2108.   514 condition__THEN ::= condition THEN
  2109.      
  2110.   515 ELSIF__condition__THEN ::= ELSIF condition THEN
  2111.      
  2112.   516 else_terminal ::= ELSE
  2113.      
  2114.   517 or_terminal ::= OR
  2115.      
  2116.   518 discriminant_; ::= ;
  2117.      
  2118.   519 parameter_; ::= ;
  2119.      
  2120.   520 left_paren ::= (
  2121.      
  2122.   521 right_paren ::= )
  2123.      
  2124. Non terminalss
  2125.      
  2126.  $ACC
  2127.  compilation
  2128.  general_component_associations
  2129.  pragma
  2130.  type_declaration
  2131.  basic_declaration
  2132.  subtype_declaration
  2133.  subprogram_declaration
  2134.  package_declaration
  2135.  task_specification
  2136.  generic_specification
  2137.  generic_instantiation
  2138.  renaming_declaration
  2139.  object_declaration
  2140.  basic_colon_declaration
  2141.  number_declaration
  2142.  exception_declaration
  2143.  renaming_colon_declaration
  2144.  identifier_list
  2145.  subtype_indication
  2146.  [:=expression]
  2147.  constrained_array_definition
  2148.  expression
  2149.  {,identifier}
  2150.  full_type_declaration
  2151.  incomplete_type_declaration
  2152.  private_type_declaration
  2153.  type_definition
  2154.  left_paren
  2155.  discriminant_specification
  2156.  {;discriminant_specification}
  2157.  right_paren
  2158.  enumeration_type_definition
  2159.  integer_type_definition
  2160.  real_type_definition
  2161.  array_type_definition
  2162.  record_type_definition
  2163.  access_type_definition
  2164.  derived_type_definition
  2165.  type_mark
  2166.  constraint
  2167.  type_name|subtype_name
  2168.  range_constraint
  2169.  floating_point_constraint
  2170.  fixed_point_constraint
  2171.  simple_expression
  2172.  enumeration_literal_specification
  2173.  {,enumeration_literal_specification}
  2174.  enumeration_literal
  2175.  floating_accuracy_definition
  2176.  [range_constraint]
  2177.  fixed_accuracy_definition
  2178.  unconstrained_array_definition
  2179.  index_subtype_definition
  2180.  {,index_subtype_definition}
  2181.  index_constraint
  2182.  name
  2183.  discrete_range
  2184.  {,discrete_range}
  2185.  range
  2186.  start_of_record_type
  2187.  record_terminal
  2188.  component_list
  2189.  {pragma_decl}
  2190.  {component_declaration}
  2191.  component_declaration
  2192.  closing_{pragma_decl}
  2193.  {component_declaration}'
  2194.  variant_part
  2195.  null_statement
  2196.  CASE__identifier__IS
  2197.  {pragma_variant}__variant__{variant}
  2198.  WHEN__variant_choice__{|variant_choice}__=>
  2199.  variant
  2200.  WHEN__variant_OTHERS__=>
  2201.  choice
  2202.  {basic_declarative_item}
  2203.  declarative_part
  2204.  body
  2205.  {later_declarative_item}
  2206.  basic_declarative_item
  2207.  representation_clause
  2208.  use_clause
  2209.  later_declarative_item
  2210.  proper_body
  2211.  body_stub
  2212.  subprogram_body
  2213.  package_body
  2214.  task_body
  2215.  indexed_component
  2216.  selected_component
  2217.  attribute
  2218.  selector
  2219.  attribute_designator
  2220.  component_associations
  2221.  aggregate
  2222.  expression,expression{,expression}
  2223.  [,others=>expression]
  2224.  choice{|choice}=>expression
  2225.  {,choice{|choice}=>expression}
  2226.  others=>expression
  2227.  ga_expression{,ga_expression}
  2228.  identifier{|identifier}=>expression
  2229.  {,identifier{|identifier}=>expression}
  2230.  relation
  2231.  relation{AND__relation}
  2232.  relation{OR__relation}
  2233.  relation{XOR__relation}
  2234.  relation{AND__THEN__relation}
  2235.  relation{OR__ELSE__relation}
  2236.  [relational_operator__simple_expression]
  2237.  [NOT]IN
  2238.  [unary_adding_operator]term{binary_adding_operator__term}
  2239.  factor{multiplying_operator__factor}
  2240.  term
  2241.  primary
  2242.  [exponentiating_operator__primary]
  2243.  factor
  2244.  high_precedence_unary_operator
  2245.  parenthesized_expression
  2246.  allocator
  2247.  qualified_expression
  2248.  relational_operator
  2249.  binary_adding_operator
  2250.  unary_adding_operator
  2251.  multiplying_operator
  2252.  exponentiating_operator
  2253.  expanded_name
  2254.  {pragma_stm}
  2255.  statement
  2256.  {statement}
  2257.  sequence_of_statements
  2258.  simple_statement
  2259.  compound_statement
  2260.  {label}+
  2261.  assignment_statement
  2262.  exit_statement
  2263.  return_statement
  2264.  goto_statement
  2265.  delay_statement
  2266.  abort_statement
  2267.  raise_statement
  2268.  code_statement
  2269.  call_statement
  2270.  if_statement
  2271.  case_statement
  2272.  loop_statement
  2273.  block_statement
  2274.  accept_statement
  2275.  select_statement
  2276.  label
  2277.  condition__THEN__sequence_of_statements
  2278.  {ELSIF__condition__THEN__sequence_of_statements}
  2279.  [ELSE__sequence_of_statements]
  2280.  condition
  2281.  CASE__expression__IS
  2282.  {pragma_alt}__case_statement_alternative__{case_statement_alternative}
  2283.  WHEN__choice__{|choice}__=>
  2284.  case_statement_alternative
  2285.  WHEN__OTHERS__=>
  2286.  [loop_identifier:]
  2287.  loop_terminal
  2288.  [identifier]
  2289.  iteration_rule
  2290.  begin_end_block
  2291.  declarative_part__begin_end_block
  2292.  begin_terminal
  2293.  exception_terminal
  2294.  {pragma_alt}__exception_handler_list
  2295.  [block_identifier:]
  2296.  declare_terminal
  2297.  subprogram_specification
  2298.  start_identifier
  2299.  parameter_specification
  2300.  {;parameter_specification}
  2301.  designator
  2302.  mode
  2303.  generic_parameter_mode
  2304.  subprogram_specification__IS
  2305.  [end_designator]
  2306.  package_specification
  2307.  PACKAGE__start_identifier__IS
  2308.  {basic_declarative_item}'
  2309.  private_terminal
  2310.  PACKAGE__BODY__start_identifier__IS
  2311.  {,expanded_name}
  2312.  TASK__start_identifier__IS
  2313.  {entry_declaration}__{representation_clause}
  2314.  TASK__TYPE__start_identifier__IS
  2315.  TASK__BODY__start_identifier__IS
  2316.  [(discrete_range)][formal_part]
  2317.  entry_declaration
  2318.  [(expression)][formal_part]
  2319.  ACCEPT__start_identifier__[(expression)][formal_part]__DO
  2320.  selective_wait
  2321.  conditional_entry_call
  2322.  timed_entry_call
  2323.  select_terminal
  2324.  select_alternative
  2325.  {OR__select_alternative}
  2326.  WHEN__condition__=>__selective_wait_alternative
  2327.  selective_wait_alternative
  2328.  accept_alternative
  2329.  delay_alternative
  2330.  terminate_alternative
  2331.  [sequence_of_statements]
  2332.  TERMINATE__;
  2333.  call_statement__[sequence_of_statements]
  2334.  else_terminal
  2335.  or_terminal
  2336.  delay_alternative_in_timed_entry
  2337.  {,name}
  2338.  {compilation_unit}
  2339.  pragma_header
  2340.  compilation_unit
  2341.  context_clause
  2342.  library_or_secondary_unit
  2343.  subunit
  2344.  {with_clause{use_clause}}
  2345.  {,used_identifier}
  2346.  with_clause
  2347.  SEPARATE__(__expanded_name__)
  2348.  WHEN__exception_choice__{|exception_choice}__=>
  2349.  exception_handler
  2350.  exception_choice
  2351.  generic_formal_part
  2352.  generic_terminal
  2353.  {generic_parameter_declaration}
  2354.  generic_parameter_declaration
  2355.  generic_type_definition
  2356.  [IS__name__or__<>]
  2357.  generic_association
  2358.  {,generic_association}
  2359.  FUNCTION__designator__IS
  2360.  [generic_formal_parameter=>]generic_actual_parameter
  2361.  generic_formal_parameter
  2362.  generic_actual_parameter
  2363.  length_clause
  2364.  enumeration_representation_clause
  2365.  address_clause
  2366.  record_representation_clause
  2367.  {component_clause}'
  2368.  alignment_clause
  2369.  component_clause
  2370.  {pragma_variant}
  2371.  {pragma_alt}
  2372.  discriminant_;
  2373.  {variant}
  2374.  {|choice}
  2375.  {basic_declarative_item}__basic_declarative_item|EMPTY
  2376.  {basic_colon_declaration}
  2377.  ga_expression
  2378.  {|identifier}
  2379.  condition__THEN
  2380.  ELSIF__condition__THEN
  2381.  {case_statement_alternative}
  2382.  exception_handler_list
  2383.  parameter_;
  2384.  {entry_declaration}
  2385.  {representation_clause}
  2386.  optional_sequence_of_statements
  2387.  use_clause_list
  2388.  {|exception_choice}
  2389.  {component_clause}
  2390.  WHEN__condition__=>
  2391.  start_{basic_colon_declaration}
  2392.  {basic_colon_declaration}'
  2393. Information about Action Tables
  2394.      
  2395.  Number of Entries      0
  2396.  Origin Table Size      0
  2397.  Action Table Size      0
  2398.  Number Unused      0
  2399.  Distribution of entries      0      0      0      0      0      0      0      0
  2400. Timing Statistics
  2401.      
  2402.                   Cpu Time   Elapsed  LG Reads LG Writes
  2403.  Parse:                286     16753         0       161
  2404.  Preliminary:          179       563         0       343
  2405.  First Map:             30      2760         0        27
  2406.  Item Creation:         32      1744         0        49
  2407.  Follow Map:            10      1486         0         0
  2408.  Closure:               10      1525         0         0
  2409.  States:              1966     15036       183      2575
  2410.  Reductions:         11196     20770      4660      2862
  2411.  Summary:              502      2359       301       120
  2412.  Compress:               0         0         0         0
  2413.  Table Dump:             0         0         0         0
  2414. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2415. --pretty.cnt
  2416. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2417. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PPRDECLS.DAT                       142   312
  2418. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PPRUTILS.SPC                        14   237
  2419. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PARSE.BDY                           70   186
  2420. [NOSC.RELEASES.V0101.PRETTY.SOURCE]APPLYACT.SUB                       141   829
  2421. [NOSC.RELEASES.V0101.PRETTY.SOURCE]CHANGE.SPC                          15    93
  2422. [NOSC.RELEASES.V0101.PRETTY.SOURCE]CHANGE.BDY                         175   191
  2423. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PRETTY.SPC                          11    58
  2424. [NOSC.RELEASES.V0101.PRETTY.SOURCE]DRIVER.ADA                         200   207
  2425. [NOSC.RELEASES.V0101.PRETTY.SOURCE]GETNEXT.SUB                         19    19
  2426. [NOSC.RELEASES.V0101.PRETTY.SOURCE]GRMCONST.BDY                        32    30
  2427. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PPRUTILS.BDY                       869   941
  2428. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PRETTY.BDY                          74    86
  2429. [NOSC.RELEASES.V0101.PRETTY.SOURCE]PTBLS.BDY                        34602  3817
  2430.  
  2431.