649 lines
38 KiB
Plaintext
649 lines
38 KiB
Plaintext
00100 .PR NOLIST .PR
|
|
00110 .PR POINT .PR
|
|
00120 # COPYRIGHT 1982 C.H.LINDSEY, UNIVERSITY OF MANCHESTER #
|
|
00140 .COMMENT
|
|
00160 ##
|
|
00180 FLOYD PRODUCTIONS FOR ALGOL68S.
|
|
00200 ##
|
|
00220 ##
|
|
00240 PRODUCTION SYNTAX.
|
|
00260 ##
|
|
00280 LABEL: STACK!INPUT => X-ROUTN ,N->NOTION ! (M) SCAN SUCCESS,FAIL;
|
|
00300 ##
|
|
00320 LABEL: - PRODUCTION LABEL (DEFAULT: NONE)
|
|
00340 STACK - STACK CONFIQUATION TO LOOK FOR (ANY)
|
|
00360 INPUT - INPUT LEXEME TO LOOK FOR (ANY)
|
|
00380 X- - TYPE OF ROUTN
|
|
00400 ROUTN - SEMANTIC ROUTINE TO CALL (NONE)
|
|
00420 N-> - NUMBER OF LEXEMES TO POP FROM THE STACK (0)
|
|
00440 NOTION - LEXEME TO PUSH ON THE STACK (NONE)
|
|
00460 (M) - NUMBER OF INPUT LEXEMES TO SKIP (0)
|
|
00480 SCAN - NUMBER OF INPUT LEXEMES TO PUSH ON STACK (NONE)
|
|
00500 SUCCESS - SUCCESS LABEL
|
|
00520 ,FAIL - FAILURE LABEL (FOLLOWING PRODUCTION)
|
|
00540 ##
|
|
00560 PRODUCTION SEMANTICS.
|
|
00580 ##
|
|
00600 IF STACK AND INPUT MATCH THE CURRENT STACK AND INPUT STATES THEN
|
|
00620 THE ACTIONS SPECIFIED TO THE RIGHT OF THE "=>" ARE OBEYED;
|
|
00640 OTHERWISE CONTROL PASSES TO THE PRODUCTION SPECIFIED BY FAIL.
|
|
00660 ##
|
|
00680 THE RIGHT SIDE IS INTERPRETED AS FOLLOWS.
|
|
00700 IF THE X OF X-ROUTN IS AN 'S' THEN ROUTN SPECIFIES THE SEMANTIC ROUTINE
|
|
00720 TO BE CALLED (ONLY IF NO SYNTACTIC ERRORS HAVE OCCURRED).
|
|
00740 IF X IS AN 'A' THEN AN ACTION ROUTINE IS INDICATED.
|
|
00760 AN 'E' INDICATES AN ERROR MESSAGE TO BE OUTPUT.
|
|
00780 ACTION ROUTINES ARE INVOKED REGARDLESS OF
|
|
00800 PREVIOUS ERRORS AND HELP MAKE PARSING DECISIONS BY RETURNING A
|
|
00820 BOOLEAN VALUE. IF THE VALUE IS FALSE, THE PRODUCTION FAILS AND
|
|
00840 THE FAIL EXIT IS TAKEN IMMEDIATELY.
|
|
00860 ##
|
|
00880 NEXT, N LEXEMES ARE POPPED FROM THE STACK. IF NOTION IS NOT
|
|
00900 BLANK THEN A LEXEME FOR THE NOTION IS PUSHED ON THE STACK. (NOTE
|
|
00920 THAT IF NOTION IS NON-BLANK, N-> MUST BE NON-BLANK ALSO.) M INPUT
|
|
00940 LEXEMES ARE THEN SKIPPED. THE FIRST ONE SKIPPED IS THE CURRENT
|
|
00960 INPUT LEXEME. THE NUMBER OF PLUSSES IN SCAN INDICATES THE
|
|
00980 NUMBER OF INPUT LEXEMES TO BE PUSHED ON THE STACK. WHEN AN INPUT
|
|
01000 LEXEME IS DISCARDED OR PUSHED, A NEW LEXEME IS READ IN TO REPLACE
|
|
01020 IT. FINALLY, CONTROL IS TRANSFERED TO THE PRODUCTION INDICATED
|
|
01040 BY SUCCESS.
|
|
01060 ##
|
|
01080 CONVENTIONS USED IN CONSTRUCTION OF PRODUCTION LABELS.
|
|
01100 ##
|
|
01120 NOTIONH - HEAD SECTION FOR NOTION
|
|
01140 NOTIONT - TAIL SECTION FOR NOTION
|
|
01160 NOTIONHN - MULTIPLE HEAD SECTIONS FOR NOTION
|
|
01180 NOTIONTN - MULTIPLE TAIL SECTIONS FOR NOTION
|
|
01200 LN - LOCAL LABEL USED ONLY AS DESTINATION OF PRECEDING PRODUCTION
|
|
01220 (NECESSARY ONLY BECAUSE EVERY PRODUCTION MUST SPECIFY A SUCCESS LABEL)
|
|
01240 TMN - TERMINAL SECTION
|
|
01260 CMX - COMBINED SECTION
|
|
01280 OTHERS - OTHER SELF-EXPLANATORY(?) LABELS
|
|
01300 ##
|
|
01320 SYLLABLES USED IN NOTION ABBREVIATIONS.
|
|
01340 ##
|
|
01360 PREFIX POSTFIX
|
|
01380 ACT - ACTUAL CL - CLAUSE
|
|
01400 BR - BRIEF DR - DECLARER
|
|
01420 FOR - FORMAL L - LIST
|
|
01440 PL - PARAMETER LIST
|
|
01460 SOME OTHERS PT - PART
|
|
01480 RL - ROWER LIST SR - SERIES
|
|
01500 DEF - DEFINITION SQ - SEQUENCE
|
|
01520 ##
|
|
01540 SYMBOL CLASSES.
|
|
01560 ##
|
|
01580 CL00 # ALL THE THINGS THAT CAN START A UNIT OR A DECLARATION #
|
|
01600 BEGIN@, BOOLDEN@, BY@, CASE@, DO@, EQUAL@, FOR@, FROM@,
|
|
01620 GO@, GOTO@, HEAP@, IF@, LOC@, LONG@, MDIND@, MODE@, NIL@,
|
|
01640 OP@, OPEN@, OPR@, OTHDR@, PRDEN@, PRDR@, PRIO@, PROC@, REF@, SHORT@,
|
|
01660 SKIP@, START@, STRGDEN@, STRUCT@, SUB@, TAB@, TAG@, TO@, VOID@, WHILE@
|
|
01680 ##
|
|
01700 CL01 # ALL THE THINGS THAT CANNOT START A UNIT OR DECLARATION #
|
|
01720 AGAIN@, AT@, BUS@, CLOSE@, COLON@, COMMA@, ELIF@, ELSE@, END@, ESAC@, EXIT@,
|
|
01740 FI@, IDTY@, IN@, OD@, OUSE@, OUT@, SEMIC@, STICK@, STOP@, THEN@
|
|
01760 ##
|
|
01780 CL11 AT@, BUS@, CLOSE@, COMMA@
|
|
01800 CL12 LONG@, MDIND@, OTHDR@, PRDR@,
|
|
01820 PROC@, REF@, SHORT@, STRUCT@,
|
|
01840 SUB@
|
|
01860 CL13 UNITSR@, AGAIN@, BEGIN@, CASE@,
|
|
01880 DO@, ELIF@, ELSE@, IF@, IN@,
|
|
01900 OPEN@, OUSE@, OUT@, STICK@, CSTICK@,
|
|
01920 THEN@, WHILE@
|
|
01940 CL14 EQUAL@, OPR@, TAB@
|
|
01960 ##
|
|
01980 CL21 FOR@, BY@, FROM@, TO@, WHILE@, DO@
|
|
02000 CL22 BEGIN@, CASE@, IF@, BRTHPT@, BRINPT@
|
|
02020 CL23 OUSE@, OUT@
|
|
02040 CL24 ELIF@, ELSE@
|
|
02060 CL25 AT@, COLON@
|
|
02080 CL26 OPEN@, SUB@
|
|
02100 CL27 FLDSPL@, STRUCT@
|
|
02120 CL28 OTHDR@, PRDR@
|
|
02140 CL29 CSTICK@, AGAIN@, STICK@
|
|
02160 CL2A BOOLDEN@, PRDEN@, STRGDEN@
|
|
02180 CL2B MDIND@, TAB@
|
|
02200 CL2C OP@, PROC@
|
|
02220 CL2D COMMA@, SEMIC@
|
|
02240 CL2E HEAP@ LOC@
|
|
02260 CL2F CLOSE@, END@, ESAC@, F1@, OD@.
|
|
02280 ##
|
|
02300 .COMMENT
|
|
02320 ##
|
|
02340 #INITIAL STACK CONFIGURATION STOP@,STOP@!START@#
|
|
02360 ##
|
|
02380 INIT: ! => S-120 , ! ++ PROGH;
|
|
02400 PROGH: TAG@!COLON@ => S-74 ,1-> ! (1) + PROGH,ENCLCLH;
|
|
02420 ##
|
|
02440 SERCLH: TAG@!COLON@ => S-74 , ! (1) LABT;
|
|
02460 TAG@! => , ! SECDH;
|
|
02480 CL2A! => S-65 ,1->PRIM ! PRIMT;
|
|
02500 PROC@!TAG@ => S-31 , ! + CM3;
|
|
02520 SUB@!CL00 => S-24 ,0->ACTRL ! + UNITH;
|
|
02540 LOC@! => , ! + CM1;
|
|
02560 OP@! => , ! + CM2;
|
|
02580 PRIO@! => , ! + PDEFH;
|
|
02600 MODE@! => S-32 , ! + MDEFH,UNITH1;
|
|
02620 ##
|
|
02640 UNITH: TAG@! => , ! SECDH;
|
|
02660 CL2A! => S-65 ,1->PRIM ! PRIMT;
|
|
02680 UNITH1: SKIP@! => S-67 , ! UNITT;
|
|
02700 GOTO@! => S-67 , ! + TM2;
|
|
02720 GO@!TO@ => S-67 , ! (1) + TM2;
|
|
02740 GO@! => , ! ERROR01;
|
|
02760 OPEN@!CL12 => A-2+ , ! RTEXTH;
|
|
02770 OPEN@!OPEN@ => A-2+ , ! RTEXTH;
|
|
02780 ##
|
|
02800 TERTH: NIL@! => S-67 ,1->TERT ! TERTT;
|
|
02820 ##
|
|
02840 OPRANDH: CL14! => , ! + OPRANDH;
|
|
02860 ##
|
|
02880 SECDH: TAG@!OF@ => , ! ++ SECDH;
|
|
02900 TAG@! => S-64 ,1->PRIM ! PRIMT;
|
|
02920 CL2A! => S-65 ,1->PRIM ! PRIMT;
|
|
02940 CL2E! => , ! + ACTDRH1;
|
|
02960 VOID@! => S-10 ,1->MOIDDR ! MOIDDRT;
|
|
02980 SUB@! => S-12 ,0->FORRLB ! FORRLT;
|
|
03000 CL28! => S-10 , ! NONRDRT;
|
|
03020 LONG@! => S-12 , ! LONGST2;
|
|
03040 SHORT@! => S-13 , ! SHORTST2;
|
|
03060 REF@! => , ! + FORDRH;
|
|
03080 STRUCT@! => , ! + TM3;
|
|
03100 CL2B! => , ! MDINDDRT;
|
|
03120 PROC@! => , ! + PROCPH;
|
|
03140 ##
|
|
03160 ENCLCLH: FOR@! => , ! TM1;
|
|
03180 WHILE@! => S-55 , ! + SERCLH;
|
|
03200 DO@! => S-59 , ! + SERCLH;
|
|
03220 CL21! => S-48 , ! FROMPTH;
|
|
03222 OPEN@!CL01 => , ! FORDRH;
|
|
03240 CL22! => S-34 , ! + SERCLH;
|
|
03250 OPEN@! => S-34 , ! + SERCLH;
|
|
03260 CL00! => E-33 , ! UNITH,ERROR01;
|
|
03280 ##
|
|
03300 PROCPH: ! => S-22 , ! L1;
|
|
03320 L1: OPEN@! => , ! + FORDRH;
|
|
03340 ##
|
|
03360 MOIDDRH: VOID@! => S-10 ,1->MOIDDR ! MOIDDRT;
|
|
03380 ##
|
|
03400 FORDRH: CL26! => S-12 ,0->FORRLB ! FORRLT;
|
|
03420 ##
|
|
03440 NONRDRH: CL26!CL00 => E-35 , ! + UNITH;
|
|
03460 CL26! => E-35 ,0->FORRLB ! FORRLT;
|
|
03480 CL28! => S-10 , ! NONRDRT;
|
|
03500 LONG@! => S-12 , ! LONGST1;
|
|
03520 SHORT@! => S-13 , ! SHORTST1;
|
|
03540 REF@! => , ! + FORDRH;
|
|
03560 STRUCT@! => , ! + TM3;
|
|
03580 CL2B! => , ! MDINDDRT;
|
|
03600 PROC@! => , ! + PROCPH,ERROR02;
|
|
03620 #ACTUAL-DECLARER IN GENERATOR#
|
|
03640 ACTDRH1: CL26!CL00 => S-40 ,0->ACTRL ! + UNITH,ACTDRH3;
|
|
03660 #ACTUAL-DECLARER IN MODE-DEFINITION#
|
|
03680 ACTDRH2: VOID@! => S-10 ,1->MOIDDR ! MOIDDRT;
|
|
03700 CL26!CL00 => S-69 ,0->ACTRL ! + UNITH;
|
|
03720 ACTDRH3: CL26! => E-39 ,0->ACTRL ! FORRLT,NONRDRH;
|
|
03740 ##
|
|
03760 DCLH: PROC@!TAG@ => S-31 , ! + CM3;
|
|
03780 SUB@!CL00 => S-24 , ! + UNITH;
|
|
03800 LOC@! => , ! + CM1;
|
|
03820 OP@! => , ! + CM2;
|
|
03840 PRIO@! => , ! + PDEFH;
|
|
03860 MODE@! => S-32 , ! + MDEFH,FORDRH;
|
|
03880 ##
|
|
03882 TRMSCH: CL26! => ,0->TRMSCL ! SECTL;
|
|
03884 SECTL: !CL00 => , ! + UNITH;
|
|
03886 !CL25 => , ! + SECTM,TRMSCLT;
|
|
03893 ##
|
|
03900 SECTM: COLON@!AT@ => ,1->BOUNDS ! ++ UNITH;
|
|
03920 COLON@!CL11 => S-91 , ! TRMSCT;
|
|
03940 ! => , ! + UNITH;
|
|
04120 ##
|
|
04130 #ACTUAL-DECLARER IN VARIABLE-DECLARATION WITH .LOC#
|
|
04140 CM1: PROC@!TAG@ => S-31 ,1-> ! + RVDEFH;
|
|
04160 CL26!CL00 => S-24 ,0->ACTRL ! + UNITH,ACTDRH3;
|
|
04180 ##
|
|
04200 FROMPTH: FROM@! => , ! + UNITH;
|
|
04220 ! => S-50 , ! BYPTH;
|
|
04240 BYPTH: BY@! => , ! + UNITH;
|
|
04260 ! => S-53 , ! TOPTH;
|
|
04280 TOPTH: TO@! => , ! + UNITH;
|
|
04300 ! => S-52 , ! WHILEPTH;
|
|
04320 WHILEPTH: WHILE@! => S-54 , ! + SERCLH;
|
|
04340 DO@! => S-58 , ! + SERCLH,ERROR04;
|
|
04360 ##
|
|
04380 RTEXTH: OPEN@! => S-99 ,0->FORDCL ! + FORDRH,MOIDDRH;
|
|
04400 ##
|
|
04420 FLDSELLH: TAG@! => S-18 , ! FLDSELLT,ERROR05;
|
|
04440 ##
|
|
04460 FORPLH: TAG@! => S-20 , ! FORPLT,ERROR18;
|
|
04480 ##
|
|
04500 ACTPLH: ! => ,0->ACTPL ! + UNITH;
|
|
04520 ##
|
|
04540 BRALTH: ! => A-5+ , ! BRTHENPTH;
|
|
04560 ##
|
|
04580 BRINPTH: ! => S-38 ,1->CSTICK ! + UNITH;
|
|
04600 ##
|
|
04620 BRTHENPTH: ! => S-37 , ! + SERCLH;
|
|
04640 ##
|
|
04660 LABH: TAG@!COLON@ => S-74 , ! (1) LABT,ERROR09;
|
|
04680 ##
|
|
04700 IDEFH2: ! => S-29 , ! IDEFH1;
|
|
04720 IDEFH1: !EQUAL@ => S-108 ,1->IDEFL ! (1) + UNITH,ERROR10;
|
|
04740 ##
|
|
04760 VDEFH2: ! => S-30 , ! VDEFH1;
|
|
04780 VDEFH1: !BECOM@ => S-108 ,1->VDEFL ! (1) + UNITH;
|
|
04800 !CL2D => S-107 , ! VDEFT,ERROR11;
|
|
04820 ##
|
|
04840 ODEFH2: ! => S-29 , ! ODEFH1;
|
|
04860 ODEFH1: CL14!EQUAL@ => S-109 ,1->ODEFL ! (1) + UNITH,ERROR38;
|
|
04880 ##
|
|
04900 CM2: CL14! => S-31 , ! RODEFH,PROCPH;
|
|
04920 RODEFH: !EQUAL@ => S-104 ,1->RODEFL ! (1) + RTEXTH,ERROR38;
|
|
04940 ##
|
|
04960 PDEFH: CL14!EQUAL@ => , ! (1) + TM4,ERROR40;
|
|
04980 ##
|
|
05000 MDEFH: CL2B!EQUAL@ => S-68 , ! (1) + ACTDRH2,ERROR12;
|
|
05020 ##
|
|
05040 CM3: !BECOM@ => S-33 , ! RVDEFH;
|
|
05060 RIDEFH: !EQUAL@ => S-102 ,1->RIDEFL ! (1) + RTEXTH,ERROR41;
|
|
05080 ##
|
|
05100 RVDEFH: !BECOM@ => S-103 ,1->RVDEFL ! (1) + RTEXTH,ERROR11;
|
|
05120 #TERMINAL SECTIONS#
|
|
05140 TM1: !TAG@ => S-47 , ! (1) + FROMPTH,ERROR36;
|
|
05160 ##
|
|
05180 TM2: TAG@! => S-63 ,1-> ! UNITT,ERROR13;
|
|
05200 ##
|
|
05220 TM3: OPEN@! => S-22 ,1-> ! + NONRDRH,ERROR14;
|
|
05240 ##
|
|
05260 TM4: PRIMDEN@! => S-117 ,1-> ! PDEFT,ERROR43;
|
|
05280 #TAIL SECTIONS#
|
|
05300 SHORTST1: !SHORT@ => S-15 , ! (1) SHORTST1,LSCM1;
|
|
05320 LONGST1: !LONG@ => S-14 , ! (1) LONGST1,LSCM1;
|
|
05340 ##
|
|
05360 SHORTST2: !SHORT@ => S-15 , ! (1) SHORTST2,LSCM2;
|
|
05380 LONGST2: !LONG@ => S-14 , ! (1) LONGST2;
|
|
05400 LSCM2: !PRIMDEN@ => S-66 ,1->PRIM ! (1) PRIMT;
|
|
05420 LSCM1: !PRIMDR@ => S-11 , ! (1) NONRDRT,ERROR16;
|
|
05440 ##
|
|
05460 FORRLT: !COLON@ => , ! (1) FORROWT;
|
|
05480 FORROWT: !COMMA@ => S-14 , ! (1) FORRLT;
|
|
05500 SUB@,ANY!BUS@ => , ! (1) + NONRDRH;
|
|
05510 OPEN@,ANY!CLOSE@ => , ! (1) + NONRDRH;
|
|
05520 !CL00 => E-17 ,1->FORRLB ! + UNITH,MISMATCH;
|
|
05540 ##
|
|
05560 FLDSELLT: !COMMA@ => , ! (1) CM4;
|
|
05580 !CLOSE@ => ,1-> ! FLDSPT,ERROR05;
|
|
05600 ##
|
|
05620 CM4: !TAG@ => S-19 , ! (1) FLDSELLT;
|
|
05640 !CL12 => ,1-> ! FLDSPT;
|
|
05650 !OPEN@ => ,1-> ! FLDSPT,ERROR05;
|
|
05660 ##
|
|
05680 FLDSPT: FLDSPL,ANY! => ,1-> ! FLDSPLT;
|
|
05700 ! => ,1->FLDSPL ! FLDSPLT;
|
|
05720 ##
|
|
05740 FLDSPLT: STRUCT@,ANY!CLOSE@ => S-23 ,1-> ! (1) NONRDRT;
|
|
05760 ! => , ! + NONRDRH;
|
|
05780 ##
|
|
05800 FORPLT: !COMMA@ => , ! (1) CM5;
|
|
05820 !CLOSE@ => ,1-> ! FORDCT,ERROR18;
|
|
05840 ##
|
|
05860 CM5: !TAG@ => S-21 , ! (1) FORPLT;
|
|
05880 !CL12 => ,1-> ! FORDCT;
|
|
05890 !OPEN@ => ,1-> ! FORDCT,ERROR18;
|
|
05900 ##
|
|
05920 FORDCT: FORDCL,ANY! => ,1-> ! FORDCLT;
|
|
05940 ! => ,1->FORDCL ! FORDCLT;
|
|
05960 ##
|
|
05980 FORDCLT: OPEN@,ANY!CLOSE@ => , ! ++ MOIDDRH;
|
|
06000 ! => , ! + FORDRH;
|
|
06020 ##
|
|
06040 PRMDRLT: !COMMA@ => , ! (1) + FORDRH;
|
|
06060 !CLOSE@ => , ! ++ MOIDDRH,ERROR19;
|
|
06080 ##
|
|
06100 MOIDDRT: CL2C,ANY! => , ! PROCPT;
|
|
06120 MODE@,CL2B,ANY! => S-73 ,1-> ! MDEFT;
|
|
06140 PRMDRL,ANY,ANY! => ,3-> ! PROCPT;
|
|
06160 FORDCL,ANY,ANY! => ,4->RSPEC ! RSPECT1,CM7;
|
|
06180 ##
|
|
06200 NONRDRT: CL2E,ANY! => , ! ACTDRT;
|
|
06220 CL27,ANY! => , ! + FLDSELLH;
|
|
06240 REF@,ANY! => S-16 ,1-> ! NONRDRT;
|
|
06260 ACTRL,ANY! => S-27 ,2-> ! NONRDRT;
|
|
06280 CL26! => , ! ACTDRT;
|
|
06300 FORRLB,ANY! => S-25 ,2-> ! FORDRT;
|
|
06320 MODE@,CL2B,ANY! => S-73 ,1-> ! MDEFT;
|
|
06340 CL2C,ANY! => , ! PROCPT;
|
|
06360 CLOSE@,ANY! => ,1->MOIDDR ! MOIDDRT;
|
|
06380 FORDCL,ANY! => , ! + FORPLH;
|
|
06400 CL13,ANY!TAG@ => , ! + CM6,FORDRT;
|
|
06420 ##
|
|
06440 CM6: !EQUAL@ => , ! IDEFH2,CM8A;
|
|
06460 ##
|
|
06480 FORDRT: REF@,ANY! => S-16 ,1-> ! NONRDRT;
|
|
06500 PRMDRL,ANY! => ,1-> ! PRMDRLT;
|
|
06520 FORDCL,ANY! => , ! + FORPLH;
|
|
06540 CL2C,ANY! => , ! PROCPT;
|
|
06560 PRMDRL,ANY,ANY! => ,3-> ! PROCPT;
|
|
06580 FORDCL,ANY,ANY! => ,4->RSPEC ! RSPECT1;
|
|
06600 CL2C,OPEN@,ANY! => ,1->PRMDRL ! PRMDRLT;
|
|
06620 CL13,ANY!TAG@ => , ! + IDEFH2;
|
|
06640 ##
|
|
06660 CM7: !TAG@ => , ! ERROR31,CM7A;
|
|
06680 ##
|
|
06700 CM7A: !COLON@ => S-17 ,1->RSPEC ! (1) RSPECT2;
|
|
06720 ! => S-116 ,1->MOIDDR ! + ENCLCLH; #CAST#
|
|
06740 ##
|
|
06760 MDINDDRT: ! => A-3+ , ! NONRDRT;
|
|
06780 ! => A-4+ ,1->MOIDDR ! MOIDDRT;
|
|
06800 FORRLB,ANY! => E-35 , ! NONRDRT;
|
|
06820 ACTRL,ANY! => E-35 , ! NONRDRT;
|
|
06840 CL27,ANY! => E-35 , ! NONRDRT;
|
|
06860 REF@,ANY! => S-16 ,1-> ! NONRDRT;
|
|
06880 PRMDRL,ANY! => ,1-> ! PRMDRLT;
|
|
06900 FORDCL,ANY! => , ! + FORPLH;
|
|
06920 CL2C,ANY! => , ! PROCPT;
|
|
06940 LOC@,ANY!TAG@ => S-71 ,1-> ! VDEFH3;
|
|
06960 CL2E,ANY! => S-70 , ! ACTDRT;
|
|
06980 MODE@,CL2B,ANY! => S-72 ,1-> ! MDEFT;
|
|
07000 PRMDRL,ANY,ANY! => ,3-> ! PROCPT;
|
|
07020 FORDCL,ANY,ANY! => ,4->RSPEC ! RSPECT1;
|
|
07040 CL2C,ANY,ANY! => ,1->PRMDRL ! PRMDRLT;
|
|
07060 CL13,ANY!TAG@ => , ! + CM8,CM7;
|
|
07080 ##
|
|
07100 CM8: !EQUAL@ => , ! IDEFH2;
|
|
07120 ! => S-71 , ! CM8A;
|
|
07140 CM8A: ! => S-33 , ! VDEFH2;
|
|
07160 ##
|
|
07180 ACTDRT: LOC@,ANY!TAG@ => ,1-> ! VDEFH3;
|
|
07200 CL2E,ANY! => S-98 ,1-> ! SECDT;
|
|
07220 MODE@,CL2B,ANY! => S-73 ,1-> ! MDEFT;
|
|
07240 CL13,ANY!TAG@ => S-33 , ! VDEFH3;
|
|
07260 ##
|
|
07280 VDEFH3: CL13,ANY!TAG@ => , ! + VDEFH2,ERROR31;
|
|
07300 ##
|
|
07320 RSPECT1: !COLON@ => S-28 , ! (1) RSPECT2,ERROR23;
|
|
07340 RSPECT2: RIDEFL,ANY! => S-105 , ! + UNITH;
|
|
07360 RVDEFL,ANY! => S-105 , ! + UNITH;
|
|
07380 RODEFL,ANY! => S-106 , ! + UNITH;
|
|
07400 ! => S-100 , ! + UNITH;
|
|
07420 ##
|
|
07440 RTEXTT: RIDEFL,ANY! => S-111 ,1-> ! RIDEFT;
|
|
07460 RVDEFL,ANY! => S-111 ,1-> ! RVDEFT;
|
|
07480 RODEFL,ANY! => S-111 ,1-> ! RODEFT;
|
|
07500 ! => , ! UNITT;
|
|
07520 ##
|
|
07540 PROCPT: PROC@,ANY! => S-28 ,2->NONRDR ! NONRDRT;
|
|
07560 OP@,ANY! => S-28 ,1-> ! + ODEFH2,ERROR15;
|
|
07580 ##
|
|
07600 PRIMT: !SUB@ => S-85 , ! + TRMSCH;
|
|
07620 !OPEN@ => A-9+ , ! + ACTPLH;
|
|
07630 !OPEN@ => S-85 , ! + TRMSCH;
|
|
07640 ##
|
|
07660 SECDT: OF@,ANY! => S-75 ,2-> ! SECDT;
|
|
07680 CL14,ANY! => ,1->OPRAND ! MONOPDT;
|
|
07700 !CL14 => S-77 ,1->OPRAND ! CM9A,TERTT;
|
|
07720 ##
|
|
07740 MONOPDT: OPRAND,ANY,ANY! => , ! DYOPDT;
|
|
07760 OP@,ANY,ANY! => , ! DYOPDT;
|
|
07780 CL14,ANY! => S-78 ,2->OPRAND ! MONOPDT;
|
|
07800 ##
|
|
07820 DYOPDT: !CL14 => S-77 , ! CM9;
|
|
07840 OPRAND,CL14,ANY! => S-79 ,2-> ! DYOPDT,TERTT;
|
|
07860 ##
|
|
07880 CM9: OPRAND,CL14,ANY! => A-1+ ,2-> ! DYOPDT;
|
|
07900 CM9A: ! => S-80 , ! ++ UNITH;
|
|
07920 ##
|
|
07940 TERTT: IDTY@,ANY! => S-82 ,2-> ! TERTT; #RATHER THAN UNITT#
|
|
07960 !BECOM@ => S-83 ,1->TERT ! ++ UNITH;
|
|
07980 !IDTY@ => S-81 ,1->TERT ! ++ TERTH;
|
|
08000 ##
|
|
08020 UNITT: UNITSR,ANY! => ,1-> ! UNITSRT;
|
|
08040 CL13,ANY! => , ! UNITCOM;
|
|
08060 TERT,BECOM@,ANY! => S-84 ,2-> ! UNITT;
|
|
08080 VDEFL,ANY! => S-110 ,1-> ! VDEFT;
|
|
08100 IDEFL,ANY! => S-110 ,1-> ! IDEFT;
|
|
08120 ACTPL,ANY! => ,1-> ! ACTPLT;
|
|
08140 FROM@,ANY! => S-49 ,1-> ! + BYPTH;
|
|
08160 BY@,ANY! => S-49 ,1-> ! + TOPTH;
|
|
08180 TO@,ANY! => S-49 ,1-> ! + WHILEPTH;
|
|
08200 UNITLC,ANY! => ,1-> ! UNITLCT;
|
|
08220 UNITLP,ANY! => ,1-> ! UNITLPT;
|
|
08240 RSPEC,ANY! => S-101 ,1-> ! RTEXTT;
|
|
08260 LABSQ,ANY! => ,1-> ! LABUNITT;
|
|
08280 ODEFL,ANY! => S-111 ,1-> ! ODEFT;
|
|
08300 COLON@,ANY! => S-95 ,2-> ! CMB;
|
|
08320 AT@,ANY! => S-90 ,1-> ! REVLBT;
|
|
08340 !COLON@ => S-94 ,1->TERT ! LOWBNDT;
|
|
08380 TRMSCL,ANY! => S-92 ,1-> ! TRMSCLT;
|
|
08400 UNITCOM: !COMMA@ => ,1->TERT ! UNITLT;
|
|
08420 ! => , ! UNITSRT;
|
|
08440 ##
|
|
08460 UNITLT: OPEN@,ANY! => S-113 ,1->UNITLC ! (1) + UNITH;
|
|
08480 BEGIN@,ANY! => S-113 ,1->UNITLC ! (1) + UNITH;
|
|
08500 ! => S-41 ,1->UNITLP ! (1) + UNITH;
|
|
08520 ##
|
|
08540 LOWBNDT: ACTRL,ANY! => , ! ++ UNITH;
|
|
08600 ! => S-87 , ! + CMA;
|
|
08620 # LOWER-BOUND IN TRIMMER#
|
|
08640 CMA: !CL11 => ,2->BOUNDS ! BOUNDST;
|
|
08660 ! => , ! + UNITH;
|
|
08680 #COMBINED ACTRLT AND BOUNDST, AFTER COLON#
|
|
08700 CMB: ACTRL,ANY! => ,1-> ! ACTRLT;
|
|
08720 TRMSCL,ANY! => S-88 ,1->BOUNDS ! BOUNDST;
|
|
08760 FORRLB,ANY! => ,1-> ! ACTRLT; #ERROR PATH FROM E-17#
|
|
08770 ! => S-88 ,0->BOUNDS ! BOUNDST; #NO UNIT BEFORE THE COLON#
|
|
08820 ##
|
|
08840 ACTRLT: !COMMA@ => , ! (1) + UNITH;
|
|
08860 SUB@,ANY!BUS@ => S-26 , ! ACTRLT2;
|
|
08862 OPEN@,ANY!CLOSE@ => S-26 , ! ACTRLT2;
|
|
08866 !CL00 => , ! ERROR20,MISMATCH;
|
|
08873 ##
|
|
08880 ACTRLT2: CL2B,ANY,ANY! => S-101 , ! (1) + NONRDRH; #MODE-DECLARATION#
|
|
08900 ! => , ! (1) + NONRDRH;
|
|
08920 ##
|
|
08940 BOUNDST: !AT@ => S-89 , ! ++ UNITH,TRMSCT;
|
|
08960 ##
|
|
08980 REVLBT: BOUNDS,ANY! => ,1-> ! TRMSCT;
|
|
09000 TRMSCT: TRMSCL,ANY! => ,1-> ! TRMSCLT;
|
|
09020 ! => ,1->TRMSCL ! TRMSCLT;
|
|
09040 ##
|
|
09060 TRMSCLT: !COMMA@ => S-86 , ! (1) TRMSCH;
|
|
09070 SUB@,ANY!BUS@ => S-93 ,2-> ! (1) PRIMT;
|
|
09072 OPEN@,ANY!CLOSE@ => S-93 ,2-> ! (1) PRIMT;
|
|
09080 !CL00 => , ! ERROR03,MISMATCH;
|
|
09090 ##
|
|
09120 UNITLCT: !COMMA@ => S-114 , ! (1) + UNITH;
|
|
09140 OPEN@,ANY!CLOSE@ => S-115 ,1-> ! (1) UNITLCT1;
|
|
09160 BEGIN@,ANY!END@ => S-115 ,1-> ! (1) UNITLCT1,ERROR37;
|
|
09180 ##
|
|
09200 UNITLCT1: OPEN@,ANY! => ,1->PRIM ! UNITLCT2;
|
|
09220 BEGIN@,ANY! => ,1->PRIM ! UNITLCT2,ENCLCLT;
|
|
09240 ##
|
|
09260 UNITLCT2: !COMMA@ => , ! ENCLCLT,ERROR34;
|
|
09280 ##
|
|
09300 UNITLPT: ! => S-41 , ! UNITLPT1;
|
|
09320 UNITLPT1: !COMMA@ => , ! (1) + UNITH;
|
|
09340 CSTICK@,ANY! => S-34 ,2->BRINPT ! BRINPTT;
|
|
09360 STICK@,ANY! => A-7+ ,2->BRINPT ! BRINPTT;
|
|
09380 IN@,ANY! => S-34 ,2-> ! INPTT,ERROR25;
|
|
09400 ##
|
|
09420 ACTPLT: !COMMA@ => S-96 , ! (1) + UNITH;
|
|
09440 OPEN@,ANY!CLOSE@ => S-97 ,2-> ! (1) PRIMT,ERROR22;
|
|
09460 ##
|
|
09480 LABUNITT: UNITSR,ANY! => ,1-> ! UNITSRT;
|
|
09500 ##
|
|
09520 UNITSRT: CL13,ANY!SEMIC@ => S-62 ,1->UNITSR ! (1) + SERCLH;
|
|
09540 CL13,ANY!EXIT@ => S-46 ,1->UNITSR ! ++ LABH;
|
|
09560 ##
|
|
09580 SERCLT: CL13,ANY! => S-43 ,1->UNITSR ! L2,ERROR33;
|
|
09600 L2: OPEN@,ANY!CLOSE@ => ,1-> ! (1) ENCLCLT;
|
|
09620 BEGIN@,ANY!END@ => ,1-> ! (1) ENCLCLT;
|
|
09640 IF@,ANY!THEN@ => S-37 ,1-> ! ++ SERCLH;
|
|
09660 THEN@,ANY! => S-39 ,2-> ! THENPTT;
|
|
09680 ELSE@,ANY! => ,2-> ! CONDALTT;
|
|
09700 ELIF@,ANY!THEN@ => S-37 ,1-> ! ++ SERCLH;
|
|
09720 OPEN@,ANY!STICK@ => ,1-> ! + BRALTH;
|
|
09740 CASE@,ANY!IN@ => S-38 ,1-> ! ++ SERCLH;
|
|
09760 OUT@,ANY! => ,2-> ! CASEALTT;
|
|
09780 OUSE@,ANY!IN@ => S-38 ,1-> ! ++ SERCLH;
|
|
09800 DO@,ANY!OD@ => S-60 ,1-> ! (1) DOPTT;
|
|
09820 WHILE@,ANY!DO@ => S-57 ,1-> ! ++ SERCLH;
|
|
09840 BRTHPT,STICK@,ANY! => ,2-> ! BRCONDALTT;
|
|
09860 BRINPT,STICK@,ANY! => ,2-> ! BRCASEALTT;
|
|
09880 CSTICK@,ANY! => E-42 ,1->UNITLP ! UNITLPT;
|
|
09900 IN@,ANY! => E-42 ,1->UNITLP ! UNITLPT;
|
|
09920 STICK@,ANY! => S-39 ,2->BRTHPT ! BRTHENPTT;
|
|
09940 BRTHPT,AGAIN@,ANY! => ,1-> ! + BRTHENPTH;
|
|
09960 BRINPT,AGAIN@,ANY! => ,1-> ! + BRINPTH,ERROR24;
|
|
09980 ##
|
|
10000 BRCONDALTT:OPEN@,ANY!CLOSE@ => S-35 ,1-> ! (1) ENCLCLT;
|
|
10020 AGAIN@,ANY! => S-35 ,2-> ! BRCONDALTT,ERROR24;
|
|
10040 ##
|
|
10060 CONDALTT: IF@!FI@ => S-35 , ! (1) ENCLCLT;
|
|
10080 ELIF@! => S-35 ,1-> ! CONDALTT,ERROR24;
|
|
10100 ##
|
|
10120 BRCASEALTT:OPEN@,ANY!CLOSE@ => S-42 ,1-> ! (1) ENCLCLT;
|
|
10140 AGAIN@,ANY! => S-42 ,2-> ! BRCASEALTT,ERROR24;
|
|
10160 ##
|
|
10180 CASEALTT: CASE@!ESAC@ => S-42 , ! (1) ENCLCLT;
|
|
10200 OUSE@! => S-42 ,1-> ! CASEALTT,ERROR24;
|
|
10220 ##
|
|
10240 BRTHENPTT: !CL29 => , ! ++ SERCLH;
|
|
10260 ! => S-36 , ! BRCONDALTT;
|
|
10280 ##
|
|
10300 THENPTT: !CL24 => , ! ++ SERCLH;
|
|
10320 ! => S-36 , ! CONDALTT;
|
|
10340 ##
|
|
10360 BRINPTT: !CL29 => , ! ++ SERCLH;
|
|
10380 ! => S-36 , ! BRCASEALTT;
|
|
10400 ##
|
|
10420 INPTT: !CL23 => , ! ++ SERCLH;
|
|
10440 ! => S-36 , ! CASEALTT;
|
|
10460 ##
|
|
10480 DOPTT: WHILE@,ANY! => S-56 ,1-> ! WHILEPTT;
|
|
10500 WHILEPTT: TO@,ANY! => ,1-> ! TOPTT;
|
|
10520 TOPTT: BY@,ANY! => ,1-> ! BYPTT;
|
|
10540 BYPTT: FROM@,ANY! => ,1-> ! FROMPTT;
|
|
10560 FROMPTT: FOR@,ANY! => ,1-> ! LOOPCLT;
|
|
10580 LOOPCLT: ! => S-61 , ! ENCLCLT;
|
|
10600 ##
|
|
10620 ENCLCLT: START@,ANY! => S-44 , ! CMC;
|
|
10640 MOIDDR,ANY! => S-45 ,2->PRIM ! PRIMT;
|
|
10660 ! => S-44 ,1->PRIM ! PRIMT;
|
|
10680 ##
|
|
10700 CMC: !STOP@ => S-118 , ! QUIT,ERROR21;
|
|
10720 ##
|
|
10740 QUIT: ! => S-121 , ! QUIT;
|
|
10760 #DCL WAS FOLLOWED BY COMMAS#
|
|
10780 DCLT1: ! => ,2-> ! + DCLH;
|
|
10800 #DCL WAS FOLLOWED BY NON-COMMAS#
|
|
10820 DCLT2: ! => S-112 ,2-> ! DCLPT;
|
|
10840 ##
|
|
10860 DCLPT: UNITSR!SEMIC@ => , ! (1) + SERCLH;
|
|
10880 !SEMIC@ => ,0->UNITSR ! (1) + SERCLH,ERROR30;
|
|
10900 ##
|
|
10920 LABT: LABSQ,ANY! => ,1-> ! LABSQT;
|
|
10940 EXIT@,ANY! => ,2-> ! + SERCLH;
|
|
10960 ! => ,1->LABSQ ! LABSQT;
|
|
10980 ##
|
|
11000 LABSQT: !TAG@ => , ! + CMD;
|
|
11020 ! => , ! + UNITH;
|
|
11040 ##
|
|
11060 CMD: !COLON@ => S-74 , ! (1) LABT,UNITH;
|
|
11080 ##
|
|
11100 IDEFT: !COMMA@ => , ! (1) CME,DCLT2;
|
|
11120 ##
|
|
11140 CME: !TAG@ => ,1-> ! + IDEFH1,DCLT1;
|
|
11160 ##
|
|
11180 RIDEFT: !COMMA@ => , ! (1) CMF,DCLT2;
|
|
11200 ##
|
|
11220 CMF: !TAG@ => ,1-> ! + RIDEFH,DCLT1;
|
|
11240 ##
|
|
11260 VDEFT: PROC@,ANY! => , ! ERROR32;
|
|
11280 # CAN THIS REALLY HAPPEN? #
|
|
11300 !COMMA@ => , ! (1) CMG,DCLT2;
|
|
11320 ##
|
|
11340 CMG: !TAG@ => ,1-> ! + VDEFH1,DCLT1;
|
|
11360 ##
|
|
11380 RVDEFT: !COMMA@ => , ! (1) CMH,DCLT2;
|
|
11400 ##
|
|
11420 CMH: !TAG@ => ,1-> ! + RVDEFH,DCLT1;
|
|
11440 ##
|
|
11460 ODEFT: !COMMA@ => , ! (1) CMI,DCLT2;
|
|
11480 ##
|
|
11500 CMI: !CL14 => ,1-> ! + ODEFH1,DCLT1;
|
|
11520 ##
|
|
11540 RODEFT: !COMMA@ => , ! (1) CMJ,DCLT2;
|
|
11560 ##
|
|
11580 CMJ: !CL14 => ,1-> ! + RODEFH,DCLT1;
|
|
11600 ##
|
|
11620 PDEFT: !COMMA@ => , ! (1) CMK,DCLT2;
|
|
11640 ##
|
|
11660 CMK: !CL14 => ,1-> ! + PDEFH,DCLT1;
|
|
11680 ##
|
|
11700 MDEFT: !COMMA@ => , ! (1) CML,DCLT2;
|
|
11720 ##
|
|
11740 CML: !CL2B => A-6+ ,1-> ! + MDEFH,DCLT1;
|
|
11760 #SYNTAX ERROR PROCESSING; ACTIVATED AFTER BRANCH TO ERRORNN #
|
|
11780 PERROR: CL13! => S-119 , ! PEA1;
|
|
11800 START@! => S-119 , ! PEA2;
|
|
11820 ! => ,1-> ! PERROR;
|
|
11840 ##
|
|
11860 PEA1: !SEMIC@ => A-8+ , ! (1) + SERCLH;
|
|
11880 !CL23 => A-8+ , ! INPTT;
|
|
11900 !CL24 => A-8+ , ! THENPTT;
|
|
11920 !CL29 => A-8+ , ! BRTHENPTT;
|
|
11940 !CL2F => A-8+ , ! (1) ENCLCLT;
|
|
11960 !STOP@ => E-08 , ! QUIT;
|
|
11980 !CL21 => , ! + PEA1;
|
|
12000 !CL22 => , ! + PEA1;
|
|
12010 !CL26 => , ! + PEA1;
|
|
12020 ! => , ! (1) PEA1;
|
|
12040 ##
|
|
12060 PEA2: !STOP@ => E-08 , ! QUIT;
|
|
12080 ! => , ! (1) PEA2;
|
|
12100 ##
|
|
12120 ERROR01: ! => E-01 , ! PERROR;
|
|
12140 ERROR02: ! => E-02 , ! PERROR;
|
|
12160 ERROR03: ! => E-03 , ! PERROR;
|
|
12180 ERROR04: ! => E-04 , ! PERROR;
|
|
12200 ERROR05: ! => E-05 , ! PERROR;
|
|
12220 ERROR09: ! => E-09 , ! PERROR;
|
|
12240 ERROR10: ! => E-10 , ! PERROR;
|
|
12260 ERROR11: ! => E-11 , ! PERROR;
|
|
12280 ERROR12: ! => E-12 , ! PERROR;
|
|
12300 ERROR13: ! => E-13 , ! PERROR;
|
|
12320 ERROR14: ! => E-14 , ! PERROR;
|
|
12340 ERROR15: ! => E-15 , ! PERROR;
|
|
12360 ERROR16: ! => E-16 , ! PERROR;
|
|
12380 ERROR18: ! => E-18 , ! PERROR;
|
|
12400 ERROR19: ! => E-19 , ! PERROR;
|
|
12420 ERROR20: ! => E-20 , ! PERROR;
|
|
12440 ERROR21: ! => E-21 , ! PERROR;
|
|
12460 ERROR22: ! => E-22 , ! PERROR;
|
|
12480 ERROR23: ! => E-23 , ! PERROR;
|
|
12500 ERROR24: !CL00 => E-24 , ! PERROR;
|
|
12520 MISMATCH: CL21! => E-26 , ! PEA3;
|
|
12540 BEGIN@! => E-27 , ! PEA3;
|
|
12560 CASE@! => E-28 , ! PEA3;
|
|
12580 IF@! => E-29 , ! PEA3;
|
|
12600 CL22! => E-7 , ! PEA3;
|
|
12606 OPEN@! => E-7 , ! PEA3;
|
|
12613 SUB@! => E-6 , ! PEA3;
|
|
12620 ! => ,1-> ! MISMATCH;
|
|
12640 PEA3: ! => S-119 , ! PEA1;
|
|
12660 ERROR25: ! => E-25 , ! PERROR;
|
|
12680 ERROR30: ! => E-30 , ! PERROR;
|
|
12700 ERROR31: ! => E-31 , ! PERROR;
|
|
12720 ERROR32: ! => E-32 , ! PERROR;
|
|
12740 ERROR33: ! => E-33 , ! PERROR;
|
|
12760 ERROR34: ! => E-34 , ! PERROR;
|
|
12780 ERROR36: ! => E-36 , ! PERROR;
|
|
12800 ERROR37: ! => E-37 , ! PERROR;
|
|
12820 ERROR38: ! => E-38 , ! PERROR;
|
|
12840 ERROR40: ! => E-40 , ! PERROR;
|
|
12860 ERROR41: ! => E-41 , ! PERROR;
|
|
12880 ERROR43: ! => E-43 , ! PERROR,PERROR;
|