LL1ANL: PROC OPTIONS(MAIN);
/****************************************************************
*              LL(1) GRAMMAR ANALYZER - MAIN ROUTINE            *
*PURPOSE:                                                       *
*    THIS PROGRAM IS THE MAIN CONTROL ROUTINE OF THE LL(1)      *
*    GRAMMAR ANALYZER SYSTEM.  ITS RESPONSIBILITY IS TO IN-     *
*    VOKE EACH PHASE OF THE ANALYZER AND CONTAIN THE COMMON     *
*    AREAS PASSED BETWEEN PHASES.                               *
*INPUT:                                                         *
*OUTPUT:                                                        *
*OUTLINE:                                                       *
*REMARKS:                                                       *
****************************************************************/

/****************************************************************
* * * * * * * * * * * *  DATA DEFINITIONS   * * * * * * * * * * *
****************************************************************/

/*      * * *  COMMON REPLACEMENTS  * * *       */
%REPLACE TRUE BY '1'B;
%REPLACE FALSE BY '0'B;

/*      * * *  COMMON AREAS  * * *      */
%INCLUDE 'LL1CMN.DCL';

/*      * * *  COMMON PROCEDURES  * * * */
%INCLUDE 'LL1PRC.DCL';

/*      * * *  EXTERNAL ROUTINES  * * *         */
       DCL LL1P00 ENTRY;
       DCL LL1P10 ENTRY;
       DCL LL1P20 ENTRY;
       DCL LL1P30 ENTRY;
       DCL LL1P40 ENTRY;
       DCL LL1P50 ENTRY;
       DCL LL1P60 ENTRY;
       DCL LL1P70 ENTRY;
       DCL LL1P80 ENTRY;

/*      * * *  MAIN ROUTINE  * * *      */

/*      DO INITIALIZATION. */
       PUT SKIP(2) LIST('INITIALIZING COMMON AREAS...');
       CALL    LL1P00;         /* DO IT. */

/*      READ IN THE GRAMMAR WITH MINOR ANALYSIS. */
       PUT SKIP(2) LIST('READING IN THE GRAMMAR...');
       CALL    LL1P10;         /* READ IN THE GRAMMAR. */

/*      PRINT THE GRAMMAR. */
       PUT SKIP(2) LIST('PRINTING THE GRAMMAR...');
       CALL    LL1P20;         /* ANALYZE IT. */

/*      FIND NULLABLE NON-TERMINALS AND PRODUCTIONS. */
       PUT SKIP(2) LIST('FINDING THE NULLABLE NON-TERMS AND PRODS...');
       CALL    LL1P30;         /* ANALYZE IT. */

/*      CALCULATE THE BEGINING TYPE RELATIONS. */
       PUT SKIP(2) LIST('CALCULATE THE BEGINING TYPE RELATIONS...');
       CALL    LL1P40;         /* ANALYZE IT. */

/*      CALCULATE THE END TYPE RELATIONS. */
       PUT SKIP(2) LIST('CALCULATE THE END TYPE RELATIONS...');
       CALL    LL1P50;         /* ANALYZE IT. */

/*      CALCULATE THE FOLLOW SET RELATION. */
       PUT SKIP(2) LIST('CALCULATE THE FOLLOW SET RELATION...');
       CALL    LL1P60;         /* ANALYZE IT. */

/*      CALCULATE THE SELECTION SET. */
       PUT SKIP(2) LIST('CALCULATE THE SELECTION SET...');
       CALL    LL1P70;         /* ANALYZE IT. */

/*      VALIDATE THAT THE LANGUAGE IS LL(1). */
       PUT SKIP(2) LIST('VALIDATING THAT THE LANGUAGE IS LL(1)...');
       CALL    LL1P80;         /* ANALYZE IT. */

       END LL1ANL;