TITLE ' /* IRBMFANL - SYNTAX ANALYZER *00001000 ' 00002000 IRBMFANL CSECT , 0001 00003000 @PROLOG STM @14,@12,12(@13) 0001 00004000 BALR @07,0 0001 00005000 @PSTART DS 0H 0001 00006000 USING @PSTART,@07 0001 00007000 ENTRY SIZDATD 00008000 L @06,8(,@01) PICK UP PTR TO 3RD PARAMETER 00009000 L @06,0(,@06) GET PTR TO WORKAREA 00010000 A @06,@SIZDATD BUMP PTR TO NEW WORKAREA 00011000 USING @DATD,@06 00012000 ST @13,@SA00001+4 MANUALLY SET UP PROLOGUE 00013000 ST @06,8(,@13) 00014000 LR @13,@06 00015000 MVC @PC00001(12),0(@01) 00016000 * ANARAPTR=GPR06P; /* SAVE PTR TO WORKAREA */ 00017000 L @15,@PC00001+8 0007 00018000 ST GPR06P,ANARAPTR(,@15) 0007 00019000 * IF ANSTPARM='1'B THEN /* IS THIS A TERMINAL TYPE ITEM? */ 00020000 L @15,@PC00001 0008 00021000 TM ANSTPARM(@15),B'01000000' 0008 00022000 BNO @RF00008 0008 00023000 * DO; /* YES, HAVE A RECOGNIZER CHECK */ 00024000 * /* INPUT SOURCE'S TEXT */ 00025000 * ANAUSCB=ANSCB; /* SAVE ORIGINAL SCB */ 00026000 L @14,@PC00001+4 0010 00027000 MVC ANAUSCB(12),ANSCB(@14) 0010 00028000 * CALL ANRECMOD(ANPPARM,ANAUSCB); 0011 00029000 LA @14,ANPPARM(,@15) 0011 00030000 ST @14,@AL00001 0011 00031000 LA @14,ANAUSCB 0011 00032000 ST @14,@AL00001+4 0011 00033000 L @15,ANSTRUC(,@15) 0011 00034000 LA @01,@AL00001 0011 00035000 BALR @14,@15 0011 00036000 * RESPECIFY 0012 00037000 * (GPR15F)RSTD; 0012 00038000 * IF GPR15F=0 THEN /* IF SUCCESSFUL RETURN */ 00039000 LTR GPR15F,GPR15F 0013 00040000 BNZ @RF00013 0013 00041000 * ANSCB=ANAUSCB; /* UPDATE ORIGINAL SCB */ 00042000 L @14,@PC00001+4 0014 00043000 MVC ANSCB(12,@14),ANAUSCB 0014 00044000 * ANRTCD=GPR15F; /* RETURN TO CALLER WITH A 0015 00045000 * SUCCESS- FUL (0) OR 0015 00046000 * UNSUCCESSFUL (4) VALUE */ 00047000 @RF00013 LR ANRTCD,GPR15F 0015 00048000 * GOTO ANRETURN; 0016 00049000 B ANRETURN 0016 00050000 * RESPECIFY 0017 00051000 * (GPR15F)UNRSTD; 0017 00052000 * END; 0018 00053000 * ANALTFND='0'B; /* INITIALIZE REGULAR ALTERNATIVE 00054000 * FOUND FLAG */ 00055000 @RF00008 NI ANALTFND,B'01111111' 0019 00056000 * ANALTPTR=ANALTADR; /* POINT TO BEGINNING OF REGULAR 00057000 * ALTERNATIVES LIST */ 00058000 L @15,@PC00001 0020 00059000 L @01,ANSTRUC(,@15) 0020 00060000 L ANALTPTR,ANALTADR(,@01) 0020 00061000 *ANLOOP: 0021 00062000 * ; 0021 00063000 ANLOOP DS 0H 0022 00064000 * ANENDA='0'B; 0022 00065000 NI ANENDA,B'01111111' 0022 00066000 * DO WHILE ANENDA='0'B; /* DO FOR EACH ALTERNATIVE ENTRY */ 00067000 B @DE00023 0023 00068000 @DL00023 DS 0H 0024 00069000 * ANAUSCB=ANSCB; /* SAVE ORIGINAL SCB */ 00070000 L @03,@PC00001+4 0024 00071000 MVC ANAUSCB(12),ANSCB(@03) 0024 00072000 * ANENDI='0'B; 0025 00073000 NI ANENDI,B'01111111' 0025 00074000 * DO ANITMPTR=ANITMADR BY LENGTH(ANITMENT)WHILE ANENDI='0'B;/* DO 00075000 * FOR EACH ALTERNATIVE ENTRY */ 00076000 L ANITMPTR,ANITMADR(,ANALTPTR) 0026 00077000 B @DE00026 0026 00078000 @DL00026 DS 0H 0027 00079000 * CALL IRBMFANL(ANITMENT,ANAUSCB,ANARAPTR); 0027 00080000 ST ANITMPTR,@AL00001 0027 00081000 LA @15,ANAUSCB 0027 00082000 ST @15,@AL00001+4 0027 00083000 L @15,@PC00001+8 0027 00084000 ST @15,@AL00001+8 0027 00085000 LA @01,@AL00001 0027 00086000 L @15,@CA00028 0027 00087000 BALR @14,@15 0027 00088000 * RESPECIFY 0028 00089000 * (GPR15F)RSTD; 0028 00090000 * ANRETCOD=GPR15P; /* SAVE RETURN CODE */ 00091000 LR ANRETCOD,GPR15P 0029 00092000 * RESPECIFY 0030 00093000 * (GPR15F)UNRSTD; 0030 00094000 * IF ANRETCOD=ANUNSUCC THEN /* IF UNSUCCESSFUL RETURN GET 0031 00095000 * NEXT ALTERNATIVE */ 00096000 CH ANRETCOD,@CH00072 0031 00097000 BE @RT00031 0031 00098000 * GOTO ANNXTALT; 0032 00099000 * IF ANENDITM='1'B THEN /* SETTING LOOP CONTROL VARIABLE */ 00100000 TM ANENDITM(ANITMPTR),B'10000000' 0033 00101000 BNO @RF00033 0033 00102000 * ANENDI='1'B; /* TO THAT OF THE END OF LIST BIT*/ 00103000 OI ANENDI,B'10000000' 0034 00104000 * END; 0035 00105000 @RF00033 AH ANITMPTR,@CH00127 0035 00106000 @DE00026 TM ANENDI,B'10000000' 0035 00107000 BZ @DL00026 0035 00108000 * ANSCB=ANAUSCB; /* UPDATE ORIGINAL SCB */ 00109000 L @03,@PC00001+4 0036 00110000 MVC ANSCB(12,@03),ANAUSCB 0036 00111000 * IF ANINBIT='1'B THEN /* IF INITIALIZATION ROUTINE 0037 00112000 * EXISTS CALL IT FOR OPTION 0037 00113000 * INITIAL. */ 00114000 TM ANINBIT(ANALTPTR),B'01000000' 0037 00115000 BNO @RF00037 0037 00116000 * CALL MFOPINIT(ANAPARM); 0038 00117000 LA @03,ANAPARM(,ANALTPTR) 0038 00118000 ST @03,@AL00001 0038 00119000 L @15,ANINIT(,ANALTPTR) 0038 00120000 LA @01,@AL00001 0038 00121000 BALR @14,@15 0038 00122000 * IF ANRCBIT='1'B THEN /* IS STRUCTURE RECURSIVEX */ 00123000 @RF00037 L @15,@PC00001 0039 00124000 L @15,ANSTRUC(,@15) 0039 00125000 TM ANRCBIT(@15),B'01000000' 0039 00126000 BNO @RF00039 0039 00127000 * DO; /* 'YES */ 00128000 * ANALTFND='1'B; /* INDICATE AN ALTERNATE WAS 0041 00129000 * FOUND */ 00130000 OI ANALTFND,B'10000000' 0041 00131000 * IF ANINSTRC='1'B THEN /* FOR INITIAL STRUCTURE FREE 0042 00132000 * BCB'S AND BUFFERS */ 00133000 TM ANINSTRC(@15),B'10000000' 0042 00134000 BNO @RF00042 0042 00135000 * CALL MFFREBUF(ANFRECUR,ANAUSCB);/* FREE UP TO CURRENT 0043 00136000 * BUFFER-BCB */ 00137000 LA @15,@CF00072 0043 00138000 ST @15,@AL00001 0043 00139000 LA @15,ANAUSCB 0043 00140000 ST @15,@AL00001+4 0043 00141000 L @14,@CA00067 0043 00142000 L @15,INFREBUF-INFREBUF(,@14) 0043 00143000 LA @01,@AL00001 0043 00144000 BALR @14,@15 0043 00145000 * ANALTPTR=ANRCALT; /* POINT TO RECURSIVE LIST */ 00146000 @RF00042 L @15,@PC00001 0044 00147000 L @01,ANSTRUC(,@15) 0044 00148000 L ANALTPTR,ANRCALT(,@01) 0044 00149000 * GOTO ANLOOP; /* KEEP LOOKING FOR RECURSIVE 0045 00150000 * ALTERNATIVES */ 00151000 B ANLOOP 0045 00152000 * END; 0046 00153000 * IF ANINSTRC='1'B THEN /* FOR INITIAL STRUCTURE FREE 0047 00154000 * BCB'S AND BUFFERS */ 00155000 @RF00039 L @15,@PC00001 0047 00156000 L @01,ANSTRUC(,@15) 0047 00157000 TM ANINSTRC(@01),B'10000000' 0047 00158000 BNO @RF00047 0047 00159000 * CALL MFFREBUF(ANFREALL,ANSCB);/* FREE ALL BUFFER-BCB'S */ 00160000 LA @15,@CF00074 0048 00161000 ST @15,@AL00001 0048 00162000 L @15,@PC00001+4 0048 00163000 ST @15,@AL00001+4 0048 00164000 L @14,@CA00067 0048 00165000 L @15,INFREBUF-INFREBUF(,@14) 0048 00166000 LA @01,@AL00001 0048 00167000 BALR @14,@15 0048 00168000 * ANRTCD=ANSUCCES; /* RETURN CODE=SUCCESS */ 00169000 @RF00047 SR ANRTCD,ANRTCD 0049 00170000 * GO TO ANRETURN; 0050 00171000 B ANRETURN 0050 00172000 *ANNXTALT: 0051 00173000 * ; 0051 00174000 ANNXTALT DS 0H 0052 00175000 * IF ANENDALT='1'B THEN /* SETTING LOOP CONTROL VARIABLE */ 00176000 TM ANENDALT(ANALTPTR),B'10000000' 0052 00177000 BNO @RF00052 0052 00178000 * ANENDA='1'B; /* TO THAT OF THE END OF LIST BIT*/ 00179000 OI ANENDA,B'10000000' 0053 00180000 * ANALTPTR=ANALTPTR+LENGTH(ANALTENT);/* NEXT ALTERNATIVE ENTRY */ 00181000 @RF00052 AH ANALTPTR,@CH00128 0054 00182000 * END; 0055 00183000 @DE00023 TM ANENDA,B'10000000' 0055 00184000 BZ @DL00023 0055 00185000 * IF ANINSTRC='1'B THEN /* FOR INITIAL STRUCTURE FREE 0056 00186000 * BCB'S AND BUFFERS */ 00187000 L @15,@PC00001 0056 00188000 L @01,ANSTRUC(,@15) 0056 00189000 TM ANINSTRC(@01),B'10000000' 0056 00190000 BNO @RF00056 0056 00191000 * CALL MFFREBUF(ANFREALL,ANSCB);/* FREE ALL BUFFER-BCB'S */ 00192000 LA @15,@CF00074 0057 00193000 ST @15,@AL00001 0057 00194000 L @15,@PC00001+4 0057 00195000 ST @15,@AL00001+4 0057 00196000 L @14,@CA00067 0057 00197000 L @15,INFREBUF-INFREBUF(,@14) 0057 00198000 LA @01,@AL00001 0057 00199000 BALR @14,@15 0057 00200000 * IF ANRCBIT='1'B&ANALTFND='1'B THEN/* IF RECURSIVE AND AN 0058 00201000 * ALTERNATIVE WAS FOUND, THEN */ 00202000 @RF00056 L @15,@PC00001 0058 00203000 L @01,ANSTRUC(,@15) 0058 00204000 TM ANRCBIT(@01),B'01000000' 0058 00205000 BNO @RF00058 0058 00206000 TM ANALTFND,B'10000000' 0058 00207000 BNO @RF00058 0058 00208000 * DO; 0059 00209000 * ANRTCD=ANSUCCES; /* RETURN CODE=SUCCESS */ 00210000 SR ANRTCD,ANRTCD 0060 00211000 * GO TO ANRETURN; 0061 00212000 B ANRETURN 0061 00213000 * END; 0062 00214000 * ELSE 0063 00215000 * ANRTCD=ANUNSUCC; /* RETURN CODE=FAILURE */ 00216000 @RF00058 LA ANRTCD,4 0063 00217000 *ANRETURN: 0064 00218000 * GEN; 0064 00219000 ANRETURN DS 0H 0064 00220000 L @15,@PC00001+8 00221000 S @06,@SIZDATD 00222000 ST GPR06P,ANARAPTR(,@15) 00223000 * RETURN CODE(ANRTCD); /* RETURN TO CALLER */ 00224000 LR @15,ANRTCD 0065 00225000 L @13,4(,@13) 0065 00226000 L @14,12(,@13) 0065 00227000 LM @00,@12,20(@13) 0065 00228000 BR @14 0065 00229000 * END IRBMFANL; 0066 00230000 @DATA DS 0H 00231000 @CH00127 DC H'12' 00232000 @CH00128 DC H'16' 00233000 @DATD DSECT 00234000 DS 0F 00235000 @SA00001 DS 18F 00236000 @PC00001 DS 3F 00237000 @AL00001 DS 3A 00238000 IRBMFANL CSECT 00239000 DS 0F 00240000 @CF00074 DC F'0' 00241000 @CF00072 DC F'4' 00242000 @CH00072 EQU @CF00072+2 00243000 @DATD DSECT 00244000 DS 0D 00245000 ANALTFND DS BL1 00246000 ANENDA DS BL1 00247000 ANENDI DS BL1 00248000 DS CL1 00249000 ANAUSCB DS CL12 00250000 ORG ANAUSCB 00251000 ANAUBCB DS AL4 00252000 ANAUTXT DS AL4 00253000 ANAUBYT DS FL4 00254000 ORG ANAUSCB+12 00255000 IRBMFANL CSECT 00256000 DS 0F 00257000 @SIZDATD DC AL1(0) 00258000 DC AL3(@ENDDATD-@DATD) 00259000 @CA00028 DC A(IRBMFANL) 00260000 @CA00067 DC A(INFREBUF) 00261000 DS 0D 00262000 ANPATCH DS CL100 00263000 @DATD DSECT 00264000 SIZDATD EQU @SIZDATD 00265000 @DATD DSECT 00266000 ORG *+1-(*-@DATD)/(*-@DATD) INSURE DSECT DATA 00267000 @ENDDATD EQU * 00268000 IRBMFANL CSECT 00269000 @00 EQU 00 EQUATES FOR REGISTERS 0-15 00270000 @01 EQU 01 00271000 @02 EQU 02 00272000 @03 EQU 03 00273000 @04 EQU 04 00274000 @05 EQU 05 00275000 @06 EQU 06 00276000 @07 EQU 07 00277000 @08 EQU 08 00278000 @09 EQU 09 00279000 @10 EQU 10 00280000 @11 EQU 11 00281000 @12 EQU 12 00282000 @13 EQU 13 00283000 @14 EQU 14 00284000 @15 EQU 15 00285000 ANRTCD EQU @02 00286000 ANRETCOD EQU @04 00287000 ANITMPTR EQU @03 00288000 ANALTPTR EQU @02 00289000 GPR06P EQU @06 00290000 GPR08 EQU @08 00291000 GPR09 EQU @09 00292000 GPR10 EQU @10 00293000 GPR11 EQU @11 00294000 GPR12 EQU @12 00295000 GPR15F EQU @15 00296000 GPR15P EQU @15 00297000 GPR00F EQU @00 00298000 GPR00P EQU @00 00299000 GPR01F EQU @01 00300000 GPR01P EQU @01 00301000 GPR14F EQU @14 00302000 GPR14P EQU @14 00303000 EXTRN INFREBUF 00304000 ANSTRENT EQU 0 00305000 ANSFLAGS EQU ANSTRENT 00306000 ANINSTRC EQU ANSFLAGS 00307000 ANRCBIT EQU ANSFLAGS 00308000 ANALTADR EQU ANSTRENT+4 00309000 ANRCALT EQU ANSTRENT+8 00310000 ANALTENT EQU 0 00311000 ANAFLAGS EQU ANALTENT 00312000 ANENDALT EQU ANAFLAGS 00313000 ANINBIT EQU ANAFLAGS 00314000 ANITMADR EQU ANALTENT+4 00315000 ANINIT EQU ANALTENT+8 00316000 ANAPARM EQU ANALTENT+12 00317000 ANITMENT EQU 0 00318000 ANIFLAGS EQU ANITMENT 00319000 ANENDITM EQU ANIFLAGS 00320000 ANRECMOD EQU 0 00321000 MFFREBUF EQU 0 00322000 MFOPINIT EQU 0 00323000 IKEBC EQU 0 00324000 IKEBF15 EQU 0 00325000 IKEBF31 EQU 0 00326000 IKEBP15 EQU 0 00327000 IKEBP31 EQU 0 00328000 IKEBP8 EQU 0 00329000 ANITMPRM EQU 0 00330000 ANPFLAGS EQU ANITMPRM 00331000 ANSTPARM EQU ANPFLAGS 00332000 ANSTRUC EQU ANITMPRM+4 00333000 ANPPARM EQU ANITMPRM+8 00334000 ANSCB EQU 0 00335000 ANARAPTR EQU 0 00336000 AGO .@UNREFD START UNREFERENCED COMPONENTS 00337000 ANBYTLFT EQU ANSCB+8 00338000 ANTXTCUR EQU ANSCB+4 00339000 ANCURBCB EQU ANSCB 00340000 @NM00004 EQU ANPFLAGS 00341000 ANENDPRM EQU ANPFLAGS 00342000 ANIPARM EQU ANITMENT+8 00343000 ANRECSTR EQU ANITMENT+4 00344000 @NM00003 EQU ANIFLAGS 00345000 ANSTRM EQU ANIFLAGS 00346000 @NM00002 EQU ANAFLAGS 00347000 @NM00001 EQU ANSFLAGS 00348000 .@UNREFD ANOP END UNREFERENCED COMPONENTS 00349000 @RT00031 EQU ANNXTALT 00350000 @ENDDATA EQU * 00351000 END IRBMFANL,(C'PL/S-II',0502,74087) 00352000