home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol039 / ll1p70.pli < prev    next >
Text File  |  1984-04-29  |  3KB  |  88 lines

  1. LL1P70: PROC;
  2. /****************************************************************
  3. *               LL(1) GRAMMAR ANALYZER - PHASE 7        *
  4. *PURPOSE:                                                       *
  5. *    THIS PROGRAM ANALYZES A LL(1) GRAMMAR GIVEN IN MODIFIED    *
  6. *    BNF FORMAT AND FINDS THE SELECTION SET.            *
  7. *INPUT:                                                         *
  8. *    1) BASIC GRAMMAR TABLES                    *
  9. *    2) NULLABLE NON-TERMINALS AND PRODUCTIONS TABLES        *
  10. *    3) ARRAY1 = THE FOLLOW RELATION                *
  11. *    4) $1.T02 = THE FIRST RELATION                *
  12. *OUTPUT:                                                        *
  13. *    1) ARRAY1 = THE SELECTION SET FOR ALL PRODUCTIONS        *
  14. *    2) $1.T05 = THE SELECTION SET FOR ALL PRODUCTIONS        *
  15. *OUTLINE:                                                       *
  16. *REMARKS:                                                       *
  17. ****************************************************************/
  18.  
  19. /****************************************************************
  20. * * * * * * * * * * * COMMON DATA DEFINITIONS * * * * * * * * * *
  21. ****************************************************************/
  22.  
  23. /*    * * *  COMMON REPLACEMENTS  * * *    */
  24. %REPLACE TRUE BY '1'B;
  25. %REPLACE FALSE BY '0'B;
  26.  
  27. %INCLUDE 'LL1CMN.DCL';    /* GET COMMON AREAS. */
  28.  
  29.  
  30. /****************************************************************
  31. * * * * * * * * * * * COMMON PROCUDURES * * * * * * * * * * * * *
  32. ****************************************************************/
  33.  
  34. %INCLUDE 'LL1PRC.DCL';
  35.  
  36.  
  37. /****************************************************************
  38. * * * * * * * * * * GRAMMAR ANALYSIS PROCEDURES * * * * * * * * *
  39. ****************************************************************/
  40.  
  41.  
  42. CALC_SS: PROC;
  43. /*THIS ROUTINE IS RESPONSIBLE FOR CALCULATING THE ACTUAL  */
  44. /*SELECTION SET FOR EACH PRODUCTION.  THE SELECTION SET IS*/
  45. /*DEFINED AS THE SET FIRST FOR THE PRODUCTION UNION WITH  */
  46. /*THE FOLLOW SET OF THE LEFT-HAND-SIDE IF IT IS A NULLABLE*/
  47. /*PRODUCTION. */
  48.     DCL I FIXED;        /* INDICES */
  49.     DCL J FIXED;
  50.     DCL K FIXED;
  51.  
  52. /* MERGE THE FOLLOW SET FOR ALL NULLIBLE PRODUCTIONS. */
  53.     IF NNLPRD=0 THEN    /*NO NULLABLE PRODUCTIONS*/
  54.        ;
  55.     ELSE
  56.        DO I=1 TO NNLPRD;    /*LOOP FOR ALL NULLABLE PRODS.*/
  57.           K=CHRNUM(LHS(NULPRD(I)));
  58.           DO J=1 TO NUMVOC+1; /*LOOP FOR ALL SYMBOLS AND ENDMARKER.*/
  59.          IF TSTBIT(K,J,ADDR(ARRAY1)) THEN
  60.             CALL SETBIT(NULPRD(I),J,ADDR(ARRAY2));
  61.           END;
  62.        END;
  63.  
  64. /* RETURN TO CALLER. */
  65.     END CALC_SS;
  66.  
  67.  
  68. /****************************************************************
  69. * * * * * * * * * * * MAIN LINE PROCEDURE * * * * * * * * * * * *
  70. ****************************************************************/
  71.  
  72.  
  73. /* ANALYZE THE GRAMMAR. */
  74.     PUT SKIP LIST('BEGINNING PHASE 7 PROCESSING.');
  75.  
  76. /* CALCULATE THE SELECTION SET. */
  77.     PUT SKIP LIST('CALCULATING THE SELECTION SET...');
  78.     CALL RSTARY(ADDR(ARRAY2),'T02');
  79.     CALL CALC_SS;        /*CALCULATE THE RELATION.*/
  80.     CALL PRTARY('*** SELECTION SET ***',FALSE,
  81.              NUMPRD,NUMVOC+1,ADDR(ARRAY2));
  82.     PUT SKIP LIST('SAVE THE SET...');
  83.     CALL SAVARY(ADDR(ARRAY2),'T05');
  84.  
  85. /* RETURN TO CALLER. */
  86.     PUT SKIP LIST('PHASE 7 PROCESSING COMPLETE.');
  87.     END LL1P70;
  88.