802 lines
		
	
	
	
		
			36 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			802 lines
		
	
	
	
		
			36 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
33000 (*+01()   (*$P+,T-+)   ()+01*)
 | 
						|
33010  (*+25()   (*$P+,T-+)   ()+25*)
 | 
						|
33020      (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
 | 
						|
33030  (**)
 | 
						|
33040  (**)
 | 
						|
33050  (**)
 | 
						|
33060  (*+83()
 | 
						|
33070  (**)
 | 
						|
33080  (**)
 | 
						|
33090  PROCEDURE INITIALIZE;
 | 
						|
33100  (*FUNCTION: COMPILER INITIALIZATION TO SET UP LEXEMES, PARSER,
 | 
						|
33110      STANDARD-PRELUDE, ETC.  ULTIMATELY, THE COMPILER WILL BE FROZEN
 | 
						|
33120      AFTER THE CALL OF INITIALIZE, AND HOPEFULLY THIS PROCEDURE CAN
 | 
						|
33130      THEN BE MADE TO VANISH AWAY.
 | 
						|
33140  *)
 | 
						|
33150    VAR I: INTEGER;
 | 
						|
33160      OTCOUNT: INTEGER;
 | 
						|
33170  (*+84()
 | 
						|
33180    (*MDMS*)
 | 
						|
33190      MDVINT, MDVLINT, MDVREAL, MDVLREAL, MDVCHAR, MDVBITS, MDVBYTES, MDVSTRNG, MDVBOOL,
 | 
						|
33200      MDVCHAN, MDVCOVER, MDVVOID, MDVSKIP, MDVJUMP, MDVNIL,
 | 
						|
33210      MDVOUT, MDVIN, MDVOUTB, MDVINB, MDVNUMBER,
 | 
						|
33220      MDVROWS, MDVBNDS, MDVABSENT, MDVERROR (*, MDVPROC, MDVREF, MDVSTRUCT, MDVROW*): MDM;
 | 
						|
33230  ()+84*)
 | 
						|
33240  (*+81()
 | 
						|
33250    (*LXMS - NONTERMINALS*)
 | 
						|
33260      LXVACTPL, LXVACTRL,
 | 
						|
33270      LXVBOUNDS, LXVBRINPT, LXVBRTHPT,
 | 
						|
33280      LXVCSTICK,
 | 
						|
33290      LXVDCLL,
 | 
						|
33300      LXVFLDSPL, LXVFORDCL, LXVFORRLB,
 | 
						|
33310      LXVIDEFL,
 | 
						|
33320      LXVLABSQ,
 | 
						|
33330      LXVMOIDDR,
 | 
						|
33340      LXVNONRDR,
 | 
						|
33350      LXVODEFL, LXVOPRAND,
 | 
						|
33360      LXVPRIM, LXVPRMDRL,
 | 
						|
33370      LXVRIDEFL, LXVRODEFL, LXVRSPEC, LXVRVDEFL,
 | 
						|
33380      LXVTERT, LXVTRMSCL,
 | 
						|
33390      LXVUNLC, LXVUNLP, LXVUNSR,
 | 
						|
33400      LXVVDEFL,
 | 
						|
33410    (*LXMS - TERMINALS*)
 | 
						|
33420      LXVAGAIN, LXVAT,
 | 
						|
33430      LXVBECOM, LXVBEGIN, LXVBOOLDEN, LXVBUS, LXVBY,
 | 
						|
33440      LXVCASE, LXVCLOSE, LXVCOLON, LXVCOMMA, LXVCMMENT,
 | 
						|
33450      LXVDO,
 | 
						|
33460      LXVELIF, LXVELSE, LXVEND, LXVEQUAL, LXVERROR, LXVESAC, LXVEXIT,
 | 
						|
33470      LXVFI, LXVFOR, LXVFROM,
 | 
						|
33480      LXVGO, LXVGOTO,
 | 
						|
33490      LXVHEAP,
 | 
						|
33500      LXVIDTY, LXVIF, LXVIN,
 | 
						|
33510      LXVLOC, LXVLONG,
 | 
						|
33520      (*LXVMDIND,*) LXVMODE,
 | 
						|
33530      LXVNIL,
 | 
						|
33540      LXVOD, LXVOF, LXVOP, LXVOPEN, (*LXVOPR,*) LXVOTHDR, LXVOUSE, LXVOUT,
 | 
						|
33550      LXVPRAGMAT, (*LXVPRDEN,*) LXVPRDR, LXVPRIO, LXVPROC,
 | 
						|
33560      LXVREF,
 | 
						|
33570      LXVSEMIC, LXVSHORT, LXVSKIP, LXVSTART, LXVSTICK, LXVSTOP, (*LXVSTRGDEN*) LXVSTRUCT, LXVSUB,
 | 
						|
33580      (*LXVTAB,*) (*LXVTAG,*) LXVTHEN, LXVTO,
 | 
						|
33590      LXVVOID,
 | 
						|
33600      LXVWHILE: LXM;
 | 
						|
33610    (*PLEXES - NONTERMINALS*)
 | 
						|
33620      LEXACTPL, LEXACTRL,
 | 
						|
33630      LEXBOUNDS, LEXBRINPT, (*LEXBRTHPT,*)
 | 
						|
33640      LEXCSTICK,
 | 
						|
33650      LEXDCLL,
 | 
						|
33660      LEXFLDSPL, LEXFORDCL, LEXFORRLB,
 | 
						|
33670      LEXIDEFL,
 | 
						|
33680      LEXLABSQ,
 | 
						|
33690      LEXMOIDDR,
 | 
						|
33700      LEXNONRDR,
 | 
						|
33710      LEXODEFL, LEXOPRAND,
 | 
						|
33720      LEXPRIM, LEXPRMDRL,
 | 
						|
33730      LEXRIDEFL, LEXRODEFL, LEXRSPEC, LEXRVDEFL,
 | 
						|
33740      LEXTERT, LEXTRMSCL,
 | 
						|
33750      LEXUNLC, LEXUNLP, LEXUNSR,
 | 
						|
33760      LEXVDEFL,
 | 
						|
33770    (*PLEXES - TERMINALS*)
 | 
						|
33780      LEXAGAIN, LEXAT, LEXATB,
 | 
						|
33790      LEXBECOM, (*LEXBEGIN,*) LEXBUSB, LEXBY,
 | 
						|
33800      (*LEXCASE,*) LEXCLOSE, LEXCOLON, LEXCOMMA, LEXCO, LEXCO2, LEXCMMENT,
 | 
						|
33810      LEXDIV, LEXDO, LEXDVAB,
 | 
						|
33820      LEXELIF, LEXELSE, LEXEMPTY, LEXEND, LEXEQUAL, (*LEXERROR,*) LEXESAC, LEXEXIT,
 | 
						|
33830      (*LEXFALSE,*) LEXFI, LEXFLEX, LEXFOR, LEXFROM,
 | 
						|
33840      LEXGE, LEXGO, LEXGOTO, LEXGT,
 | 
						|
33850      LEXHEAP,
 | 
						|
33860      (*LEXIF,*) LEXIN, LEXIS, LEXISB, LEXISNT, LEXISNTB,
 | 
						|
33870      LEXLE, LEXLOC, LEXLONG, LEXLT,
 | 
						|
33880      LEXMDAB, LEXMINUS, LEXMNAB, LEXMOD, LEXMODE,
 | 
						|
33890      LEXNE, LEXNIL,
 | 
						|
33900      LEXOD, LEXOF, LEXOP, (*LEXOPEN,*) LEXOUSE, LEXOUT, LEXOVAB, LEXOVER,
 | 
						|
33910      LEXPAR, LEXPLAB, LEXPLTO, LEXPLUS, LEXPLITM, LEXPR, LEXPRAGMAT, LEXPRIO, LEXPROC,
 | 
						|
33920      LEXREF,
 | 
						|
33930      LEXSEMA, LEXSEMIC, LEXSHORT, LEXSKIP, (*LEXSTART,*) LEXSTICK, (*LEXLSTOP, LEXSTOP,*) LEXSTRUCT, LEXSUBB,
 | 
						|
33940      LEXTHEN, LEXTIMES, LEXTMAB, LEXTO, (*LEXTRUE,*)
 | 
						|
33950      LEXUP1, LEXUP2, LEXUNION,
 | 
						|
33960      LEXVOID (*, LEXWHILE*)
 | 
						|
33970         : PLEX;
 | 
						|
33980  ()+81*)
 | 
						|
33990    PROCEDURE LXVVAL(VAR LXVVAR: LXM; IO: LXIOTYPE; CL0: CL0TYPE; CL1: CL1TYPE; CL2: CL2TYPE);
 | 
						|
34000      VAR WORD: RECORD CASE SEVERAL OF
 | 
						|
34010    (*-02() (*-05()     1:(LXV: LXM); 2:(INT: INTEGER) END; ()-05*) ()-02*)
 | 
						|
34020    (*+02()      1:(LXV:LXM); 2:(INT,INT2,INT3: INTEGER); 3,4,5,6,7,8,9,10:() END; ()+02*)
 | 
						|
34030    (*+05()      1:(LXV:LXM); 2:(INT,INT2: INTEGER); 3,4,5,6,7,8,9,10:() END; ()+05*)
 | 
						|
34040      BEGIN WORD.INT := 0; (*TO ENSURE THAT PARTS OF WORD NOT OCCUPIED BY THE LXM ARE CLEAR*)
 | 
						|
34050  (*+02()   WORD.INT2 := 0; WORD.INT3 := 0;  ()+02*)
 | 
						|
34060  (*+05()   WORD.INT2 := 0; ()+05*)
 | 
						|
34070      WITH WORD.LXV DO
 | 
						|
34080            BEGIN LXIO := IO; LXCLASS0 := CL0; LXCLASS1 := CL1; LXCLASS2 := CL2; LXPSTB := NIL END;
 | 
						|
34090      LXVVAR := WORD.LXV
 | 
						|
34100        END;
 | 
						|
34110  (*+81()
 | 
						|
34120    PROCEDURE LOCNDEX(VAR LEX: PLEX; LXV: LXM);
 | 
						|
34130        BEGIN
 | 
						|
34140        ENEW(LEX, LEX1SIZE);
 | 
						|
34150        LEX^.LXV := LXV;
 | 
						|
34160        LEX^.LXCOUNT := 0;
 | 
						|
34170        END;
 | 
						|
34180  ()+81*)
 | 
						|
34190  (*+84()
 | 
						|
34200    FUNCTION DEFPRC0(YIELD: MODE; CP: CODEPROC): MODE;
 | 
						|
34210        BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
 | 
						|
34220        FINDPRC(YIELD,0,CP); DEFPRC0 := SRSTK[SRSEMP].MD
 | 
						|
34230        END;
 | 
						|
34240    FUNCTION DEFPRC1(P1, YIELD: MODE; CP: CODEPROC): MODE;
 | 
						|
34250        BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
 | 
						|
34260        SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P1;
 | 
						|
34270        FINDPRC(YIELD,1,CP); DEFPRC1 := SRSTK[SRSEMP].MD
 | 
						|
34280        END;
 | 
						|
34290    FUNCTION DEFPRC2(P1, P2, YIELD: MODE; CP: CODEPROC): MODE;
 | 
						|
34300        BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
 | 
						|
34310        SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P1;
 | 
						|
34320        SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P2;
 | 
						|
34330        FINDPRC(YIELD,2,CP); DEFPRC2 := SRSTK[SRSEMP].MD
 | 
						|
34340        END;
 | 
						|
34350  ()+84*)
 | 
						|
34360  (*+81()
 | 
						|
34370    PROCEDURE DEFSYMB(VAR LEX: PLEX; TLXV: LXM; SYMB: ALFA);
 | 
						|
34380      VAR I: INTEGER;
 | 
						|
34390        BEGIN WITH CURRENTLEX DO
 | 
						|
34400          BEGIN
 | 
						|
34410          LXV := TLXV; LXTOKEN := TKSYMBOL;
 | 
						|
34420  (*+11() S10 := SYMB; LXCOUNT := 1; ()+11*)
 | 
						|
34430  (*-11() STASHLEX(SYMB); ()-11*)
 | 
						|
34440          ENEW(LEX, LEX1SIZE+LXCOUNT*SZWORD);
 | 
						|
34450          FOR I := 1 TO LEX1SIZE DIV SZWORD + LXCOUNT DO
 | 
						|
34460            LEX^.LEXWORDS[I] := LEXWORDS[I];
 | 
						|
34470          END
 | 
						|
34480        END;
 | 
						|
34490  (**)
 | 
						|
34500  ()+81*)
 | 
						|
34510  (**)
 | 
						|
34520    PROCEDURE INTAB(VAR LEX: PLEX; TAG: ALFA; LXVV: LXM);
 | 
						|
34530     VAR I:  INTEGER;
 | 
						|
34540        BEGIN WITH CURRENTLEX DO
 | 
						|
34550            BEGIN
 | 
						|
34560            LXV := LXVV;  LXTOKEN := TKBOLD;
 | 
						|
34570  (*+11()  S10:=TAG; LXCOUNT:=1;   ()+11*)
 | 
						|
34580  (*-11()  STASHLEX(TAG); ()-11*)
 | 
						|
34590            END;
 | 
						|
34600        LEX := HASHIN
 | 
						|
34610        END;
 | 
						|
34620  (*+84()
 | 
						|
34630    FUNCTION DEFTAG(TAG: ALFA): PLEX;
 | 
						|
34640        BEGIN WITH CURRENTLEX DO
 | 
						|
34650          BEGIN
 | 
						|
34660          LXV := LXVTAG;  LXTOKEN := TKTAG;
 | 
						|
34670  (*+11()  S10:=TAG; LXCOUNT:=1;   ()+11*)
 | 
						|
34680  (*-11() STASHLEX(TAG); ()-11*)
 | 
						|
34690          END;
 | 
						|
34700        DEFTAG := HASHIN
 | 
						|
34710        END;
 | 
						|
34720  ()+84*)
 | 
						|
34730  (*+81()
 | 
						|
34740    FUNCTION DEFLTAG(TAG1, TAG2: ALFA): PLEX;
 | 
						|
34750        BEGIN WITH CURRENTLEX DO
 | 
						|
34760          BEGIN
 | 
						|
34770          LXV := LXVTAG; LXTOKEN := TKTAG;
 | 
						|
34780  (*+11() S20 := TAG2; S10 := TAG1; LXCOUNT := 2;   ()+11*)
 | 
						|
34790  (*-11() STASHLLEX(TAG1, TAG2); ()-11*)
 | 
						|
34800          DEFLTAG := HASHIN;
 | 
						|
34810          END
 | 
						|
34820        END;
 | 
						|
34830    PROCEDURE OTPAIR(OTCOUNT: OPCHTABBOUND; TCHAR: CHAR; TNEXT, TALT: OPCHTABBOUND; TLEX: PLEX);
 | 
						|
34840        BEGIN WITH OPCHTABLE[OTCOUNT] DO
 | 
						|
34850            BEGIN OTCHAR := TCHAR; OTNEXT := TNEXT; OTALT := TALT; OTLEX := TLEX;
 | 
						|
34860             END
 | 
						|
34870        END;
 | 
						|
34880    PROCEDURE INITLEXES;
 | 
						|
34890        BEGIN
 | 
						|
34900    (*SET UP LXV VALUES - NONTERMINALS*)
 | 
						|
34910      LXVVAL(LXVACTPL  , LXIOACTPL  , 0, 0, 00); (*ACTUAL PARAMETER LIST*)
 | 
						|
34920      LXVVAL(LXVACTRL  , LXIOACTRL  , 0, 0, 00); (*ACTUAL ROWER LIST*)
 | 
						|
34930      LXVVAL(LXVBOUNDS , LXIOBOUNDS , 0, 0, 00); (*BOUNDS*)
 | 
						|
34940      LXVVAL(LXVBRINPT , LXIOBRINPT , 0, 0, 02); (*BRIEF IN PART*)
 | 
						|
34950      LXVVAL(LXVBRTHPT , LXIOBRTHPT , 0, 0, 02); (*BRIEF THEN PART*)
 | 
						|
34960      LXVVAL(LXVCSTICK , LXIOCSTICK , 0, 3, 09); (*STICK IN CASE-CLAUSE*)
 | 
						|
34970      LXVVAL(LXVDCLL   , LXIODCLL   , 0, 0, 00); (*DECLARATION LIST*)
 | 
						|
34980      LXVVAL(LXVFLDSPL , LXIOFLDSPL , 0, 0, 07); (*FIELD SPECIFICATION LIST*)
 | 
						|
34990      LXVVAL(LXVFORDCL , LXIOFORDCL , 0, 0, 00); (*FORMAL DECLARATIVE LIST*)
 | 
						|
35000      LXVVAL(LXVFORRLB , LXIOFORRLB , 0, 0, 00); (*FORMAL ROWER LIST BRACKET*)
 | 
						|
35010      LXVVAL(LXVIDEFL  , LXIOIDEFL  , 0, 0, 00); (*IDENTITY DEFINITION LIST*)
 | 
						|
35020      LXVVAL(LXVLABSQ  , LXIOLABSQ  , 0, 0, 00); (*LABEL SEQUENCE*)
 | 
						|
35030      LXVVAL(LXVMOIDDR , LXIOMOIDDR , 0, 0, 00); (*MOID DECLARER*)
 | 
						|
35040      LXVVAL(LXVNONRDR , LXIONONRDR , 0, 0, 00); (*NONROWED DECLARER*)
 | 
						|
35050      LXVVAL(LXVODEFL  , LXIOODEFL  , 0, 0, 00); (*OPERATION DEFINITION LIST*)
 | 
						|
35060      LXVVAL(LXVOPRAND , LXIOOPRAND , 0, 0, 00); (*OPERAND*)
 | 
						|
35070      LXVVAL(LXVPRIM   , LXIOPRIM   , 0, 0, 00); (*PRIMARY*)
 | 
						|
35080      LXVVAL(LXVPRMDRL , LXIOPRMDRL , 0, 0, 00); (*PARAMETER DECLARER LIST*)
 | 
						|
35090      LXVVAL(LXVRIDEFL , LXIORIDEFL , 0, 0, 00); (*ROUTINE IDENTITY DEFINITION LIST*)
 | 
						|
35100      LXVVAL(LXVRODEFL , LXIORODEFL , 0, 0, 00); (*ROUTINE OPERATION DEFINITION LIST*)
 | 
						|
35110      LXVVAL(LXVRSPEC  , LXIORSPEC  , 0, 0, 00); (*ROUTINE SPECIFICATION*)
 | 
						|
35120      LXVVAL(LXVRVDEFL , LXIORVDEFL , 0, 0, 00); (*ROUTINE VARIABLE DEFINITION LIST*)
 | 
						|
35130      LXVVAL(LXVTERT   , LXIOTERT   , 0, 0, 00); (*TERTIARY*)
 | 
						|
35140      LXVVAL(LXVTRMSCL , LXIOTRMSCL , 0, 0, 00); (*TRIMSCRIPT LIST*)
 | 
						|
35150      LXVVAL(LXVUNLC   , LXIOUNLC   , 0, 0, 00); (*UNIT LIST PROPER IN COLLATERAL*)
 | 
						|
35160      LXVVAL(LXVUNLP   , LXIOUNLP   , 0, 0, 00); (*UNIT LIST PROPER*)
 | 
						|
35170      LXVVAL(LXVUNSR   , LXIOUNSR   , 0, 3, 00); (*UNIT SERIES*)
 | 
						|
35180      LXVVAL(LXVVDEFL  , LXIOVDEFL  , 0, 0, 00); (*VARIABLE DEFINITION LIST*)
 | 
						|
35190    (*SET UP LXV VALUES - TERMINALS*)
 | 
						|
35200      LXVVAL(LXVAGAIN  , LXIOAGAIN  , 1, 3, 09);
 | 
						|
35210      LXVVAL(LXVAT     , LXIOAT     , 1, 1, 05);
 | 
						|
35220      LXVVAL(LXVBECOM  , LXIOBECOM  , 1, 0, 00);
 | 
						|
35230      LXVVAL(LXVBEGIN  , LXIOBEGIN  , 0, 3, 02);
 | 
						|
35240      LXVVAL(LXVBOOLDEN, LXIOBOOLDEN, 0, 0, 10);
 | 
						|
35250      LXVBOOLDEN.LXPYPTR := 0;
 | 
						|
35260      LXVVAL(LXVBUS    , LXIOBUS    , 1, 1, 00);
 | 
						|
35270      LXVVAL(LXVBY     , LXIOBY     , 0, 0, 01);
 | 
						|
35280      LXVVAL(LXVCASE   , LXIOCASE   , 0, 3, 02);
 | 
						|
35290      LXVVAL(LXVCLOSE  , LXIOCLOSE  , 1, 1, 15);
 | 
						|
35300      LXVVAL(LXVCOLON  , LXIOCOLON  , 1, 0, 05);
 | 
						|
35310      LXVVAL(LXVCOMMA  , LXIOCOMMA  , 1, 1, 13);
 | 
						|
35320      LXVVAL(LXVCMMENT , LXIOCMMENT , 0, 0, 00);
 | 
						|
35330      LXVVAL(LXVDO     , LXIODO     , 0, 3, 01);
 | 
						|
35340      LXVVAL(LXVELIF   , LXIOELIF   , 1, 3, 04);
 | 
						|
35350      LXVVAL(LXVELSE   , LXIOELSE   , 1, 3, 04);
 | 
						|
35360      LXVVAL(LXVEND    , LXIOEND    , 1, 0, 15);
 | 
						|
35370      LXVVAL(LXVEQUAL  , LXIOEQUAL  , 0, 4, 00);
 | 
						|
35380      LXVVAL(LXVERROR  , LXIOERROR  , 0, 0, 00);
 | 
						|
35390      LXVVAL(LXVESAC   , LXIOESAC   , 1, 0, 15);
 | 
						|
35400      LXVVAL(LXVEXIT   , LXIOEXIT   , 1, 0, 00);
 | 
						|
35410      LXVVAL(LXVFI     , LXIOFI     , 1, 0, 15);
 | 
						|
35420      LXVVAL(LXVFOR    , LXIOFOR    , 0, 0, 01);
 | 
						|
35430      LXVVAL(LXVFROM   , LXIOFROM   , 0, 0, 01);
 | 
						|
35440      LXVVAL(LXVGO     , LXIOGO     , 0, 0, 00);
 | 
						|
35450      LXVVAL(LXVGOTO   , LXIOGOTO   , 0, 0, 00);
 | 
						|
35460      LXVVAL(LXVHEAP   , LXIOHEAP   , 0, 0, 14);
 | 
						|
35470      LXVVAL(LXVIDTY   , LXIOIDTY   , 1, 0, 00);
 | 
						|
35480      LXVVAL(LXVIF     , LXIOIF     , 0, 3, 02);
 | 
						|
35490      LXVVAL(LXVIN     , LXIOIN     , 1, 3, 00);
 | 
						|
35500      LXVVAL(LXVLOC    , LXIOLOC    , 0, 0, 14);
 | 
						|
35510      LXVVAL(LXVLONG   , LXIOLONG   , 0, 2, 00);
 | 
						|
35520      LXVVAL(LXVMDIND  , LXIOMDIND  , 0, 2, 11);
 | 
						|
35530      LXVVAL(LXVMODE   , LXIOMODE   , 0, 0, 00);
 | 
						|
35540      LXVVAL(LXVNIL    , LXIONIL    , 0, 0, 00);
 | 
						|
35550      LXVVAL(LXVOD     , LXIOOD     , 1, 0, 15);
 | 
						|
35560      LXVVAL(LXVOF     , LXIOOF     , 1, 0, 00);
 | 
						|
35570      LXVVAL(LXVOP     , LXIOOP     , 0, 0, 12);
 | 
						|
35580      LXVVAL(LXVOPEN   , LXIOOPEN   , 0, 3, 06);
 | 
						|
35590      LXVVAL(LXVOPR    , LXIOOPR    , 0, 4, 00);
 | 
						|
35600      LXVVAL(LXVOTHDR  , LXIOOTHDR  , 0, 2, 08); (*DOESN'T SEEM TO BE USED ANYWHERE*)
 | 
						|
35610      LXVVAL(LXVOUSE   , LXIOOUSE   , 1, 3, 03);
 | 
						|
35620      LXVVAL(LXVOUT    , LXIOOUT    , 1, 3, 03);
 | 
						|
35630      LXVVAL(LXVPRAGMAT, LXIOPRAGMAT, 0, 0, 00);
 | 
						|
35640      LXVVAL(LXVPRDEN  , LXIOPRDEN  , 0, 0, 10);
 | 
						|
35650      LXVPRDEN.LXPYPTR := 0;
 | 
						|
35660      LXVVAL(LXVPRDR   , LXIOPRDR   , 0, 2, 08);
 | 
						|
35670      LXVVAL(LXVPRIO   , LXIOPRIO   , 0, 0, 00);
 | 
						|
35680      LXVVAL(LXVPROC   , LXIOPROC   , 0, 2, 12);
 | 
						|
35690      LXVVAL(LXVREF    , LXIOREF    , 0, 2, 00);
 | 
						|
35700      LXVVAL(LXVSEMIC  , LXIOSEMIC  , 1, 0, 13);
 | 
						|
35710      LXVVAL(LXVSHORT  , LXIOSHORT  , 0, 2, 00);
 | 
						|
35720      LXVVAL(LXVSKIP   , LXIOSKIP   , 0, 0, 00);
 | 
						|
35730      LXVVAL(LXVSTART  , LXIOSTART  , 0, 0, 00);
 | 
						|
35740      LXVVAL(LXVSTICK  , LXIOSTICK  , 1, 3, 09);
 | 
						|
35750      LXVVAL(LXVSTOP   , LXIOSTOP   , 1, 0, 00);
 | 
						|
35760      LXVVAL(LXVSTRGDEN, LXIOSTRGDEN, 0, 0, 10);
 | 
						|
35770      LXVSTRGDEN.LXPYPTR := 0;
 | 
						|
35780      LXVVAL(LXVSTRUCT , LXIOSTRUCT , 0, 2, 07);
 | 
						|
35790      LXVVAL(LXVSUB    , LXIOSUB    , 0, 2, 06);
 | 
						|
35800      LXVVAL(LXVTAB    , LXIOTAB    , 0, 4, 11);
 | 
						|
35810      LXVVAL(LXVTAG    , LXIOTAG    , 0, 0, 00);
 | 
						|
35820      LXVVAL(LXVTHEN   , LXIOTHEN   , 1, 3, 00);
 | 
						|
35830      LXVVAL(LXVTO     , LXIOTO     , 0, 0, 01);
 | 
						|
35840      LXVVAL(LXVVOID   , LXIOVOID   , 0, 0, 00);
 | 
						|
35850      LXVVAL(LXVWHILE  , LXIOWHILE  , 0, 3, 01);
 | 
						|
35860    (*SET UP LEX VALUES - NONTERMINALS*)
 | 
						|
35870      LOCNDEX(LEXACTPL,  LXVACTPL);
 | 
						|
35880      LOCNDEX(LEXACTRL,  LXVACTRL);
 | 
						|
35890      LOCNDEX(LEXBOUNDS, LXVBOUNDS);
 | 
						|
35900      LOCNDEX(LEXBRINPT, LXVBRINPT);
 | 
						|
35910      LOCNDEX(LEXBRTHPT, LXVBRTHPT);
 | 
						|
35920      LOCNDEX(LEXCSTICK, LXVCSTICK);
 | 
						|
35930      LOCNDEX(LEXDCLL,   LXVDCLL);
 | 
						|
35940      LOCNDEX(LEXFLDSPL, LXVFLDSPL);
 | 
						|
35950      LOCNDEX(LEXFORDCL, LXVFORDCL);
 | 
						|
35960      LOCNDEX(LEXFORRLB, LXVFORRLB);
 | 
						|
35970      LOCNDEX(LEXIDEFL,  LXVIDEFL);
 | 
						|
35980      LOCNDEX(LEXLABSQ,  LXVLABSQ);
 | 
						|
35990      LOCNDEX(LEXMOIDDR, LXVMOIDDR);
 | 
						|
36000      LOCNDEX(LEXNONRDR, LXVNONRDR);
 | 
						|
36010      LOCNDEX(LEXODEFL,  LXVODEFL);
 | 
						|
36020      LOCNDEX(LEXOPRAND, LXVOPRAND);
 | 
						|
36030      LOCNDEX(LEXPRIM,   LXVPRIM);
 | 
						|
36040      LOCNDEX(LEXPRMDRL, LXVPRMDRL);
 | 
						|
36050      LOCNDEX(LEXRIDEFL, LXVRIDEFL);
 | 
						|
36060      LOCNDEX(LEXRODEFL, LXVRODEFL);
 | 
						|
36070      LOCNDEX(LEXRSPEC,  LXVRSPEC);
 | 
						|
36080      LOCNDEX(LEXRVDEFL, LXVRVDEFL);
 | 
						|
36090      LOCNDEX(LEXTERT,   LXVTERT);
 | 
						|
36100      LOCNDEX(LEXTRMSCL, LXVTRMSCL);
 | 
						|
36110      LOCNDEX(LEXUNLC, LXVUNLC);
 | 
						|
36120      LOCNDEX(LEXUNLP, LXVUNLP);
 | 
						|
36130      LOCNDEX(LEXUNSR, LXVUNSR);
 | 
						|
36140      LOCNDEX(LEXVDEFL,  LXVVDEFL);
 | 
						|
36150    (*SET UP LEX VALUES - BRIEF TERMINALS*)
 | 
						|
36160      LOCNDEX(LEXAGAIN, LXVAGAIN);
 | 
						|
36170      LOCNDEX(LEXAT,    LXVAT);
 | 
						|
36180      LOCNDEX(LEXBECOM, LXVBECOM);
 | 
						|
36190      LOCNDEX(LEXBUSB,  LXVBUS);
 | 
						|
36200      LOCNDEX(LEXCLOSE, LXVCLOSE);
 | 
						|
36210      LOCNDEX(LEXCOLON, LXVCOLON);
 | 
						|
36220      LOCNDEX(LEXCOMMA, LXVCOMMA);
 | 
						|
36230      DEFSYMB(LEXCO2,   LXVCMMENT, '#         ');
 | 
						|
36240      DEFSYMB(LEXDIV,   LXVOPR,    '/         ');
 | 
						|
36250      DEFSYMB(LEXDVAB,  LXVOPR,    '/:=       ');
 | 
						|
36260      DEFSYMB(LEXEQUAL, LXVEQUAL,  '=         ');
 | 
						|
36270      LOCNDEX(LEXERROR, LXVERROR);
 | 
						|
36280      DEFSYMB(LEXGE,    LXVOPR,    '>=        ');
 | 
						|
36290      DEFSYMB(LEXGT,    LXVOPR,    '>         ');
 | 
						|
36300      LOCNDEX(LEXIS,    LXVIDTY);
 | 
						|
36310      LEXIS^.LXV.LXP := 0;
 | 
						|
36320      LOCNDEX(LEXISNT,  LXVIDTY);
 | 
						|
36330      LEXISNT^.LXV.LXP := 1;
 | 
						|
36340      DEFSYMB(LEXLE,    LXVOPR,    '<=        ');
 | 
						|
36350      DEFSYMB(LEXLT,    LXVOPR,    '<         ');
 | 
						|
36360      DEFSYMB(LEXMDAB,  LXVOPR,    '%*:=      ');
 | 
						|
36370      DEFSYMB(LEXMINUS, LXVOPR,    '-         ');
 | 
						|
36380      DEFSYMB(LEXMNAB,  LXVOPR,    '-:=       ');
 | 
						|
36390      DEFSYMB(LEXMOD,   LXVOPR,    '%*        ');
 | 
						|
36400      DEFSYMB(LEXNE,    LXVOPR,    '/=        ');
 | 
						|
36410      LOCNDEX(LEXOPEN,  LXVOPEN);
 | 
						|
36420      DEFSYMB(LEXOVAB,  LXVOPR,    '%:=       ');
 | 
						|
36430      DEFSYMB(LEXOVER,  LXVOPR,    '%         ');
 | 
						|
36440      DEFSYMB(LEXPLAB,  LXVOPR,    '+:=       ');
 | 
						|
36450      DEFSYMB(LEXPLTO,  LXVOPR,    '+=:       ');
 | 
						|
36460      DEFSYMB(LEXPLUS,  LXVOPR,    '+         ');
 | 
						|
36470      DEFSYMB(LEXPLITM, LXVOPR,    '+*        ');
 | 
						|
36480        (*LEXPR2 OMITTED*)
 | 
						|
36490      LOCNDEX(LEXSEMIC, LXVSEMIC);
 | 
						|
36500      LOCNDEX(LEXSTART, LXVSTART);
 | 
						|
36510      LOCNDEX(LEXSTICK, LXVSTICK);
 | 
						|
36520      LOCNDEX(LEXSTOP,  LXVSTOP);
 | 
						|
36530      LOCNDEX(LEXSUBB,  LXVSUB);
 | 
						|
36540      DEFSYMB(LEXTIMES, LXVOPR,    '*         ');
 | 
						|
36550      DEFSYMB(LEXTMAB,  LXVOPR,    '*:=       ');
 | 
						|
36560      DEFSYMB(LEXUP1,   LXVOPR,    '^         ');
 | 
						|
36570      DEFSYMB(LEXUP2,   LXVOPR,    '**        ');
 | 
						|
36580        END;
 | 
						|
36590  (**)
 | 
						|
36600    PROCEDURE MAKEPUSHTBL;
 | 
						|
36610    (*SET UP PUSHTBL*)
 | 
						|
36620      BEGIN
 | 
						|
36630      PUSHTBL[LXIOACTPL]  := LEXACTPL;
 | 
						|
36640      PUSHTBL[LXIOACTRL]  := LEXACTRL;
 | 
						|
36650      PUSHTBL[LXIOBOUNDS] := LEXBOUNDS;
 | 
						|
36660      PUSHTBL[LXIOBRINPT] := LEXBRINPT;
 | 
						|
36670      PUSHTBL[LXIOBRTHPT] := LEXBRTHPT;
 | 
						|
36680      PUSHTBL[LXIOCSTICK] := LEXCSTICK;
 | 
						|
36690      PUSHTBL[LXIODCLL]   := LEXDCLL;
 | 
						|
36700      PUSHTBL[LXIOFLDSPL] := LEXFLDSPL;
 | 
						|
36710      PUSHTBL[LXIOFORDCL] := LEXFORDCL;
 | 
						|
36720      PUSHTBL[LXIOFORRLB] := LEXFORRLB;
 | 
						|
36730      PUSHTBL[LXIOIDEFL]  := LEXIDEFL;
 | 
						|
36740      PUSHTBL[LXIOLABSQ]  := LEXLABSQ;
 | 
						|
36750      PUSHTBL[LXIOMOIDDR] := LEXMOIDDR;
 | 
						|
36760      PUSHTBL[LXIONONRDR] := LEXNONRDR;
 | 
						|
36770      PUSHTBL[LXIOODEFL]  := LEXODEFL;
 | 
						|
36780      PUSHTBL[LXIOOPRAND] := LEXOPRAND;
 | 
						|
36790      PUSHTBL[LXIOPRIM]   := LEXPRIM;
 | 
						|
36800      PUSHTBL[LXIOPRMDRL] := LEXPRMDRL;
 | 
						|
36810      PUSHTBL[LXIORIDEFL] := LEXRIDEFL;
 | 
						|
36820      PUSHTBL[LXIORODEFL] := LEXRODEFL;
 | 
						|
36830      PUSHTBL[LXIORSPEC]  := LEXRSPEC;
 | 
						|
36840      PUSHTBL[LXIORVDEFL] := LEXRVDEFL;
 | 
						|
36850      PUSHTBL[LXIOTERT]   := LEXTERT;
 | 
						|
36860      PUSHTBL[LXIOTRMSCL] := LEXTRMSCL;
 | 
						|
36870      PUSHTBL[LXIOUNLC] := LEXUNLC;
 | 
						|
36880      PUSHTBL[LXIOUNLP] := LEXUNLP;
 | 
						|
36890      PUSHTBL[LXIOUNSR] := LEXUNSR;
 | 
						|
36900      PUSHTBL[LXIOVDEFL]  := LEXVDEFL;
 | 
						|
36910      END;
 | 
						|
36920   PROCEDURE OTPAIRS;
 | 
						|
36930    (*SET UP OPCHTABLE*)
 | 
						|
36940      BEGIN
 | 
						|
36950    (*THE INITIAL ENTRIES TO THIS TABLE (THE ONES LESS INDENTED) DEPEND UPON
 | 
						|
36960      THE POSITION OF THE CHARACTER CONCERNED IN THE CHARACTER CODE*)
 | 
						|
36970  (*+01() (*BUT ':' OCCUPIES THE POSITION OF '$'*) ()+01*)
 | 
						|
36980  (*-01() (*BUT '[', ']' AND '^' OCCUPY THE POSITIONS OF '$', '&' AND ''''*) ()-01*)
 | 
						|
36990  (*+01() (*CDC CODE*)
 | 
						|
37000      OTPAIR( 0, '+', 37,  0, LEXPLUS);
 | 
						|
37010      OTPAIR( 1, '-', 15,  0, LEXMINUS);
 | 
						|
37020      OTPAIR( 2, '*', 45,  0, LEXTIMES);
 | 
						|
37030      OTPAIR( 3, '/', 42,  0, LEXDIV);
 | 
						|
37040      OTPAIR( 4, '(',  0,  0, LEXOPEN);
 | 
						|
37050      OTPAIR( 5, ')',  0,  0, LEXCLOSE);
 | 
						|
37060      OTPAIR( 6, ':', 27,  0, LEXCOLON);
 | 
						|
37070      OTPAIR( 7, '=',  0,  0, LEXEQUAL);
 | 
						|
37080        OTPAIR( 8, ':',  0,  0, LEXAGAIN);
 | 
						|
37090      OTPAIR( 9, ',',  0,  0, LEXCOMMA);
 | 
						|
37100        OTPAIR(10, '=',  0,  0, LEXLE);
 | 
						|
37110      OTPAIR(11, '#',  0,  0, LEXCO2);
 | 
						|
37120      OTPAIR(12, '[',  0,  0, LEXSUBB);
 | 
						|
37130      OTPAIR(13, ']',  0,  0, LEXBUSB);
 | 
						|
37140      OTPAIR(14, '%', 32,  0, LEXOVER);
 | 
						|
37150        OTPAIR(15, ':', 16,  0, LEXERROR);
 | 
						|
37160        OTPAIR(16, '=',  0,  0, LEXMNAB);
 | 
						|
37170  (*-51()
 | 
						|
37180      OTPAIR(17, '!',  8,  0, LEXSTICK);
 | 
						|
37190  ()-51*)
 | 
						|
37200  (*+51()
 | 
						|
37210      OTPAIR(18, '&',  8,  0, LEXSTICK);
 | 
						|
37220      OTPAIR(19, '''', 0,  0, LEXUP1);
 | 
						|
37230  ()+51*)
 | 
						|
37240      OTPAIR(20, '=',  0,  0, LEXTMAB);
 | 
						|
37250      OTPAIR(21, '<', 10, 0, LEXLT);
 | 
						|
37260      OTPAIR(22, '>', 24,  0, LEXGT);
 | 
						|
37270      OTPAIR(23, '@',  0,  0, LEXAT);
 | 
						|
37280        OTPAIR(24, '=',  0,  0, LEXGE);
 | 
						|
37290  (*-51()
 | 
						|
37300      OTPAIR(25, '^',  0,  0, LEXUP1);
 | 
						|
37310  ()-51*)
 | 
						|
37320      OTPAIR(26, ';',  0,  0, LEXSEMIC);
 | 
						|
37330        OTPAIR(27, '=', 28, 29, LEXBECOM);
 | 
						|
37340        OTPAIR(28, ':',  0,  0, LEXIS);
 | 
						|
37350        OTPAIR(29, '/', 30,  0, LEXERROR);
 | 
						|
37360        OTPAIR(30, '=', 31,  0, LEXERROR);
 | 
						|
37370        OTPAIR(31, ':',  0,  0, LEXISNT);
 | 
						|
37380   ()+01*)
 | 
						|
37390  (*+25() (*CDC CODE*)
 | 
						|
37400     OTPAIR( 0, '+', 37,  0, LEXPLUS);
 | 
						|
37410      OTPAIR( 1, '-', 15,  0, LEXMINUS);
 | 
						|
37420      OTPAIR( 2, '*', 45,  0, LEXTIMES);
 | 
						|
37430      OTPAIR( 3, '/', 42,  0, LEXDIV);
 | 
						|
37440      OTPAIR( 4, '(',  0,  0, LEXOPEN);
 | 
						|
37450      OTPAIR( 5, ')',  0,  0, LEXCLOSE);
 | 
						|
37460      OTPAIR( 6, ':', 27,  0, LEXCOLON);
 | 
						|
37470      OTPAIR( 7, '=',  0,  0, LEXEQUAL);
 | 
						|
37480        OTPAIR( 8, ':',  0,  0, LEXAGAIN);
 | 
						|
37490      OTPAIR( 9, ',',  0,  0, LEXCOMMA);
 | 
						|
37500        OTPAIR(10, '=',  0,  0, LEXLE);
 | 
						|
37510      OTPAIR(11, '#',  0,  0, LEXCO2);
 | 
						|
37520      OTPAIR(12, '[',  0,  0, LEXSUBB);
 | 
						|
37530      OTPAIR(13, ']',  0,  0, LEXBUSB);
 | 
						|
37540      OTPAIR(14, '%', 32,  0, LEXOVER);
 | 
						|
37550        OTPAIR(15, ':', 16,  0, LEXERROR);
 | 
						|
37560        OTPAIR(16, '=',  0,  0, LEXMNAB);
 | 
						|
37570  (*-51()
 | 
						|
37580      OTPAIR(17, '!',  8,  0, LEXSTICK);
 | 
						|
37590  ()-51*)
 | 
						|
37600  (*+51()
 | 
						|
37610      OTPAIR(18, '&',  8,  0, LEXSTICK);
 | 
						|
37620      OTPAIR(19, '''', 0,  0, LEXUP1);
 | 
						|
37630  ()+51*)
 | 
						|
37640      OTPAIR(20, '=',  0,  0, LEXTMAB);
 | 
						|
37650      OTPAIR(21, '<', 10, 0, LEXLT);
 | 
						|
37660      OTPAIR(22, '>', 24,  0, LEXGT);
 | 
						|
37670      OTPAIR(23, '@',  0,  0, LEXAT);
 | 
						|
37680        OTPAIR(24, '=',  0,  0, LEXGE);
 | 
						|
37690  (*-51()
 | 
						|
37700      OTPAIR(25, '^',  0,  0, LEXUP1);
 | 
						|
37710  ()-51*)
 | 
						|
37720      OTPAIR(26, ';',  0,  0, LEXSEMIC);
 | 
						|
37730        OTPAIR(27, '=', 28, 29, LEXBECOM);
 | 
						|
37740        OTPAIR(28, ':',  0,  0, LEXIS);
 | 
						|
37750        OTPAIR(29, '/', 30,  0, LEXERROR);
 | 
						|
37760        OTPAIR(30, '=', 31,  0, LEXERROR);
 | 
						|
37770        OTPAIR(31, ':',  0,  0, LEXISNT);
 | 
						|
37780   ()+25*)
 | 
						|
37790  (*-01()  (*ASCII*)
 | 
						|
37800  (*-25()
 | 
						|
37810      OTPAIR( 0, '!',  1,  0, LEXSTICK); (*!*)
 | 
						|
37820        OTPAIR( 1, ':',  0,  0, LEXAGAIN); (*!:*)
 | 
						|
37830      OTPAIR( 2, '#',  0,  0, LEXCO2  ); (*#*)
 | 
						|
37840      OTPAIR( 3, '[',  0,  0, LEXSUBB ); (*[*)
 | 
						|
37850      OTPAIR( 4, '\',  0,  0, LEXSTICK); (*STICK*)
 | 
						|
37860      OTPAIR( 5, ']',  0,  0, LEXBUSB ); (*]*)
 | 
						|
37870      OTPAIR( 6, '^',  0,  0, LEXUP1  ); (*^*)
 | 
						|
37880      OTPAIR( 7, '(',  0,  0, LEXOPEN ); (*(*)
 | 
						|
37890      OTPAIR( 8, ')',  0,  0, LEXCLOSE); (*)*)
 | 
						|
37900      OTPAIR( 9, '*', 45,  0, LEXTIMES); (***)
 | 
						|
37910      OTPAIR(10, '+', 37,  0, LEXPLUS ); (*+*)
 | 
						|
37920      OTPAIR(11, ',',  0,  0, LEXCOMMA); (*,*)
 | 
						|
37930      OTPAIR(12, '-', 21,  0, LEXMINUS); (*-*)
 | 
						|
37940        OTPAIR(13, '=',  0,  0, LEXLE   ); (*<=*)
 | 
						|
37950      OTPAIR(14, '/', 42,  0, LEXDIV  ); (* / *)
 | 
						|
37960        OTPAIR(15, '=', 16, 17, LEXBECOM);(*:=*)
 | 
						|
37970        OTPAIR(16, ':',  0,  0, LEXIS   ); (*:=:*)
 | 
						|
37980        OTPAIR(17, '/', 18,  0, LEXERROR);
 | 
						|
37990        OTPAIR(18, '=', 19,  0, LEXERROR);
 | 
						|
38000        OTPAIR(19, ':',  0,  0, LEXISNT ); (*:/=:*)
 | 
						|
38010        OTPAIR(20, '=',  0,  0, LEXTMAB ); (**:=*)
 | 
						|
38020        OTPAIR(21, ':', 22,  0, LEXERROR);
 | 
						|
38030        OTPAIR(22, '=',  0,  0, LEXMNAB ); (*-:=*)
 | 
						|
38040      OTPAIR(23, '%', 32,  0, LEXOVER ); (*%*)
 | 
						|
38050        (*SPARE 24*)
 | 
						|
38060      OTPAIR(25, ':', 15,  0, LEXCOLON); (*:*)
 | 
						|
38070      OTPAIR(26, ';',  0,  0, LEXSEMIC); (*;*)
 | 
						|
38080      OTPAIR(27, '<', 13,  0, LEXLT   ); (*<*)
 | 
						|
38090      OTPAIR(28, '=',  0,  0, LEXEQUAL); (*=*)
 | 
						|
38100      OTPAIR(29, '>', 30,  0, LEXGT   ); (*>*)
 | 
						|
38110        OTPAIR(30, '=',  0,  0, LEXGE   ); (*>=*)
 | 
						|
38120      OTPAIR(31, '@',  0,  0, LEXAT   ); (*@*)
 | 
						|
38130   ()-25*)
 | 
						|
38140   ()-01*)
 | 
						|
38150        OTPAIR(32, '*', 33, 35, LEXMOD)  ; (*%**)
 | 
						|
38160        OTPAIR(33, ':', 34,  0, LEXERROR);
 | 
						|
38170        OTPAIR(34, '=',  0,  0, LEXMDAB ); (*%*:=*)
 | 
						|
38180        OTPAIR(35, ':', 36,  0, LEXERROR);
 | 
						|
38190        OTPAIR(36, '=',  0,  0, LEXOVAB ); (*%:=*)
 | 
						|
38200        OTPAIR(37, '=', 38, 39, LEXERROR);
 | 
						|
38210        OTPAIR(38, ':',  0,  0, LEXPLTO ); (*+=:*)
 | 
						|
38220        OTPAIR(39, ':', 40, 41, LEXERROR);
 | 
						|
38230        OTPAIR(40, '=',  0,  0, LEXPLAB ); (*+:=*)
 | 
						|
38240        OTPAIR(41, '*',  0,  0, LEXPLITM); (*+**)
 | 
						|
38250        OTPAIR(42, '=',  0, 43, LEXNE   ); (*/=*)
 | 
						|
38260        OTPAIR(43, ':', 44,  0, LEXERROR);
 | 
						|
38270        OTPAIR(44, '=',  0,  0, LEXDVAB ); (*/:=*)
 | 
						|
38280        OTPAIR(45, '*',  0, 46, LEXUP2  ); (****)
 | 
						|
38290        OTPAIR(46, ':', 20,  0, LEXERROR);
 | 
						|
38300      END;
 | 
						|
38310    PROCEDURE BOLDWORDS;
 | 
						|
38320      BEGIN
 | 
						|
38330      INTAB(LEXATB    , 'AT        ', LXVAT);
 | 
						|
38340      INTAB(LEXBEGIN  , 'BEGIN     ', LXVBEGIN);
 | 
						|
38350      INTAB(LEXBY     , 'BY        ', LXVBY);
 | 
						|
38360      INTAB(LEXCASE   , 'CASE      ', LXVCASE);
 | 
						|
38370      INTAB(LEXCO     , 'CO        ', LXVCMMENT);
 | 
						|
38380      INTAB(LEXCMMENT, 'COMMENT   ', LXVCMMENT);
 | 
						|
38390      INTAB(LEXDO     , 'DO        ', LXVDO);
 | 
						|
38400      INTAB(LEXELIF   , 'ELIF      ', LXVELIF);
 | 
						|
38410      INTAB(LEXELSE   , 'ELSE      ', LXVELSE);
 | 
						|
38420      INTAB(LEXEMPTY  , 'EMPTY     ', LXVERROR);
 | 
						|
38430      INTAB(LEXEND    , 'END       ', LXVEND);
 | 
						|
38440      INTAB(LEXESAC   , 'ESAC      ', LXVESAC);
 | 
						|
38450      INTAB(LEXEXIT   , 'EXIT      ', LXVEXIT);
 | 
						|
38460      INTAB(LEXFALSE  , 'FALSE     ', LXVBOOLDEN);
 | 
						|
38470      INTAB(LEXFI     , 'FI        ', LXVFI);
 | 
						|
38480      INTAB(LEXFLEX   , 'FLEX      ', LXVERROR);
 | 
						|
38490      INTAB(LEXFOR    , 'FOR       ', LXVFOR);
 | 
						|
38500      INTAB(LEXFROM   , 'FROM      ', LXVFROM);
 | 
						|
38510      INTAB(LEXGO     , 'GO        ', LXVGO);
 | 
						|
38520      INTAB(LEXGOTO   , 'GOTO      ', LXVGOTO);
 | 
						|
38530      INTAB(LEXHEAP   , 'HEAP      ', LXVHEAP);
 | 
						|
38540      INTAB(LEXIF     , 'IF        ', LXVIF);
 | 
						|
38550      INTAB(LEXIN     , 'IN        ', LXVIN);
 | 
						|
38560      INTAB(LEXISB    , 'IS        ', LXVIDTY);
 | 
						|
38570      INTAB(LEXISNTB  , 'ISNT      ', LXVIDTY);
 | 
						|
38580      INTAB(LEXLOC    , 'LOC       ', LXVLOC);
 | 
						|
38590      INTAB(LEXLONG   , 'LONG      ', LXVLONG);
 | 
						|
38600      INTAB(LEXMODE   , 'MODE      ', LXVMODE);
 | 
						|
38610      INTAB(LEXNIL    , 'NIL       ', LXVNIL);
 | 
						|
38620      INTAB(LEXOD     , 'OD        ', LXVOD);
 | 
						|
38630      INTAB(LEXOF     , 'OF        ', LXVOF);
 | 
						|
38640      INTAB(LEXOP     , 'OP        ', LXVOP);
 | 
						|
38650      INTAB(LEXOUSE   , 'OUSE      ', LXVOUSE);
 | 
						|
38660      INTAB(LEXOUT    , 'OUT       ', LXVOUT);
 | 
						|
38670      INTAB(LEXPAR    , 'PAR       ', LXVERROR);
 | 
						|
38680      INTAB(LEXPR     , 'PR        ', LXVPRAGMAT);
 | 
						|
38690      INTAB(LEXPRAGMAT, 'PRAGMAT   ', LXVPRAGMAT);
 | 
						|
38700      INTAB(LEXPRIO   , 'PRIO      ', LXVPRIO);
 | 
						|
38710      INTAB(LEXPROC   , 'PROC      ', LXVPROC);
 | 
						|
38720      INTAB(LEXREF    , 'REF       ', LXVREF);
 | 
						|
38730      INTAB(LEXSEMA   , 'SEMA      ', LXVERROR);
 | 
						|
38740      INTAB(LEXSHORT  , 'SHORT     ', LXVSHORT);
 | 
						|
38750      INTAB(LEXSKIP   , 'SKIP      ', LXVSKIP);
 | 
						|
38760      INTAB(LEXSTRUCT , 'STRUCT    ', LXVSTRUCT);
 | 
						|
38770      INTAB(LEXTHEN   , 'THEN      ', LXVTHEN);
 | 
						|
38780      INTAB(LEXTO     , 'TO        ', LXVTO);
 | 
						|
38790      INTAB(LEXTRUE   , 'TRUE      ', LXVBOOLDEN);
 | 
						|
38800      INTAB(LEXUNION  , 'UNION     ', LXVERROR);
 | 
						|
38810      INTAB(LEXVOID   , 'VOID      ', LXVVOID);
 | 
						|
38820      INTAB(LEXWHILE  , 'WHILE     ', LXVWHILE);
 | 
						|
38830      END;
 | 
						|
38840  ()+81*)
 | 
						|
38850  (*+84()
 | 
						|
38860    PROCEDURE INITMODES;
 | 
						|
38870      CONST SIMPLE=FALSE; PILE=TRUE; UNDRESSED=FALSE; DRESSED=TRUE; IO=TRUE;
 | 
						|
38880          NOIO=FALSE; O=FALSE; SCOPE=TRUE;
 | 
						|
38890      VAR I: INTEGER;
 | 
						|
38900          PRFB: MODE;
 | 
						|
38910          PLX: PLEX; LXEM: LXM; LX: LXM;
 | 
						|
38920      PROCEDURE MDVVAL(VAR V: MDM; ID: MDIDTYPE; PILE, DRESSED, IO, SCOPE: BOOLEAN; LENGTH: INTEGER);
 | 
						|
38930  (*+02() (*-25() VAR CLEAR: RECORD CASE BOOLEAN OF
 | 
						|
38940                             TRUE: (V:MDM); FALSE: (A: ARRAY[1..MODE1SIZE] OF INTEGER) END
 | 
						|
38950                      I: INTEGER; ()-25*) ()+02*)
 | 
						|
38960        BEGIN
 | 
						|
38970  (*+02() (*-25() WITH CLEAR DO FOR I:= 1 TO MODE1SIZE DIV SZWORD DO A[I] := 0;
 | 
						|
38980                  V := CLEAR.V;
 | 
						|
38990  ()-25*) ()+02*)
 | 
						|
39000        WITH V DO
 | 
						|
39010          BEGIN MDID := ID; MDLEN := LENGTH;
 | 
						|
39020          MDDEPROC := FALSE; MDRECUR := FALSE;
 | 
						|
39030          MDDRESSED := DRESSED; MDIO := IO; MDPILE := PILE; MDSCOPE := SCOPE; MDCNT := 0
 | 
						|
39040          END
 | 
						|
39050        END;
 | 
						|
39060      PROCEDURE MDVAR(VAR V: MODE; MDV: MDM);
 | 
						|
39070          BEGIN ENEW(V, MODE1SIZE); V^.MDV := MDV END;
 | 
						|
39080      PROCEDURE MDIND(TAG: ALFA; M: MODE);
 | 
						|
39090        VAR LEX: PLEX; STB: PSTB;
 | 
						|
39100          BEGIN
 | 
						|
39110          INTAB(LEX,TAG,LX);
 | 
						|
39120          LEX^.LXV.LXPMD := M
 | 
						|
39130          END;
 | 
						|
39140      PROCEDURE PUTFIELD(M: MODE; L: PLEX);
 | 
						|
39150          BEGIN
 | 
						|
39152          SRSEMP := SRSEMP+2;
 | 
						|
39154          SRSTK[SRSEMP-1].MD := M;
 | 
						|
39156          SRSTK[SRSEMP].LEX := L ;
 | 
						|
39158          END;
 | 
						|
39160  (**)
 | 
						|
39170        BEGIN
 | 
						|
39180        REFL := NIL; ROWL := NIL; PROCL := NIL; PASCL := NIL; STRUCTL := NIL;
 | 
						|
39190        MDVVAL(MDVINT   , MDIDINT   , SIMPLE, O        , IO  , O    , SZINT);
 | 
						|
39200        MDVVAL(MDVLINT  , MDIDLINT  , SIMPLE, UNDRESSED, IO  , O    , SZLONG);
 | 
						|
39210        MDVVAL(MDVREAL  , MDIDREAL  , SIMPLE, O        , IO  , O    , SZREAL);
 | 
						|
39220        MDVVAL(MDVLREAL , MDIDLREAL , SIMPLE, UNDRESSED, IO  , O    , 2*SZREAL);
 | 
						|
39230        MDVVAL(MDVCHAR  , MDIDCHAR  , SIMPLE, O        , IO  , O    , SZWORD);
 | 
						|
39240        MDVVAL(MDVBITS  , MDIDBITS  , SIMPLE, O        , IO  , O    , SZINT);
 | 
						|
39250        MDVVAL(MDVBYTES , MDIDBYTES , SIMPLE, O        , IO   ,O    , SZINT);
 | 
						|
39260        MDVVAL(MDVSTRNG , MDIDSTRNG , PILE  , DRESSED  , IO  , O    , SZADDR);
 | 
						|
39270        MDVVAL(MDVBOOL  , MDIDBOOL  , SIMPLE, O        , IO  , O    , SZWORD);
 | 
						|
39280        MDVVAL(MDVCHAN  , MDIDCHAN  , SIMPLE, O        , NOIO, O    , SZPROC);
 | 
						|
39290        MDVVAL(MDVCOVER , MDIDCOVER , PILE  , DRESSED  , NOIO, O    , SZADDR);
 | 
						|
39300        MDVVAL(MDVVOID  , MDIDVOID  , O     , O        , NOIO, O    , 0);
 | 
						|
39310        MDVVAL(MDVSKIP  , MDIDSKIP  , O     , O        , NOIO, O    , 0);
 | 
						|
39320        MDVVAL(MDVJUMP  , MDIDJUMP  , O     , O        , NOIO, O    , 0);
 | 
						|
39330        MDVVAL(MDVNIL   , MDIDNIL   , O     , O        , NOIO, O    , 0);
 | 
						|
39340        MDVVAL(MDVOUT   , MDIDOUT   , O     , O        , O   , O    , SZWORD+SZINT);
 | 
						|
39350        MDVVAL(MDVIN    , MDIDIN    , O     , O        , O   , SCOPE, 2*SZWORD+SZADDR);
 | 
						|
39360        MDVVAL(MDVOUTB  , MDIDOUTB  , O     , O        , O   , O    , SZWORD+SZINT);
 | 
						|
39370        MDVVAL(MDVINB   , MDIDINB   , O     , O        , O   , SCOPE, SZWORD+SZADDR);
 | 
						|
39380        MDVVAL(MDVNUMBER, MDIDNUMBER, O     , O        , O   , O    , SZWORD+SZINT);
 | 
						|
39390        MDVVAL(MDVROWS  , MDIDROWS  , PILE  , DRESSED  , O   , O    , SZADDR);
 | 
						|
39400        MDVVAL(MDVBNDS  , MDIDBNDS  , PILE  , O        , NOIO, O    , SZADDR);
 | 
						|
39410        MDVVAL(MDVABSENT, MDIDABSENT, SIMPLE, O        , O   , O    , SZWORD);
 | 
						|
39420                     (*CAN BE USED TO MANUFACTURE UN-USER-FORGEABLE STRUCTURES*)
 | 
						|
39430        MDVVAL(MDVERROR , MDIDERROR , SIMPLE, O        , O   , O    , SZWORD);
 | 
						|
39440        MDVVAL(MDVPROC  , MDIDPROC  , PILE  , DRESSED  , NOIO, SCOPE, SZADDR);
 | 
						|
39450        MDVVAL(MDVREF   , MDIDREF   , PILE  , DRESSED  , NOIO, SCOPE, SZADDR);
 | 
						|
39460        MDVVAL(MDVSTRUCT, MDIDSTRUCT, PILE  , UNDRESSED, NOIO, SCOPE, 0);
 | 
						|
39470        MDVVAL(MDVROW   , MDIDROW   , PILE  , O        , NOIO, SCOPE, 0);
 | 
						|
39480        MDVVAL(MDVPASC  , MDIDPASC  , SIMPLE, O        , NOIO, O    , SZPROC);
 | 
						|
39500      (*SET UP MD VALUES*)
 | 
						|
39510        MDVAR(MDINT   , MDVINT);
 | 
						|
39520        MDVAR(MDLINT  , MDVLINT);
 | 
						|
39530        MDVAR(MDBITS  , MDVBITS);
 | 
						|
39540        MDVAR(MDBYTES , MDVBYTES);
 | 
						|
39550        MDVAR(MDREAL  , MDVREAL);
 | 
						|
39560        MDVAR(MDLREAL , MDVLREAL);
 | 
						|
39570        MDVAR(MDBOOL  , MDVBOOL);
 | 
						|
39580        MDVAR(MDCHAN  , MDVCHAN);
 | 
						|
39590        MDVAR(MDCHAR  , MDVCHAR);
 | 
						|
39600        MDVAR(MDSTRNG, MDVSTRNG);
 | 
						|
39610        MDVAR(MDCOVER , MDVCOVER);
 | 
						|
39620        MDVAR(MDVOID  , MDVVOID);
 | 
						|
39630        MDVAR(MDSKIP  , MDVSKIP);
 | 
						|
39640        MDVAR(MDJUMP  , MDVJUMP);
 | 
						|
39650        MDVAR(MDNIL   , MDVNIL);
 | 
						|
39660        MDVAR(MDOUT   , MDVOUT);
 | 
						|
39670        MDVAR(MDIN    , MDVIN);
 | 
						|
39680        MDVAR(MDOUTB  , MDVOUTB);
 | 
						|
39690        MDVAR(MDINB   , MDVINB);
 | 
						|
39700        MDVAR(MDNUMBER, MDVNUMBER);
 | 
						|
39710        MDVAR(MDROWS  , MDVROWS);
 | 
						|
39720        MDVAR(MDBNDS  , MDVBNDS);
 | 
						|
39730        MDVAR(MDABSENT, MDVABSENT);
 | 
						|
39740        MDVAR(MDROUT  , MDVPROC);
 | 
						|
39750        MDVAR(MDERROR , MDVERROR);
 | 
						|
39760        INTAB(PLX,'GO        ',LXEM);
 | 
						|
39770        PLX^.LXV.LXPMD := MDJUMP;
 | 
						|
39780        INTAB(PLX,'GOTO      ',LXEM);
 | 
						|
39790        PLX^.LXV.LXPMD := MDJUMP;
 | 
						|
39800        INTAB(PLX,'IS        ',LXEM);
 | 
						|
39810        PLX^.LXV.LXP := 0;
 | 
						|
39820        INTAB(PLX,'ISNT      ',LXEM);
 | 
						|
39830        PLX^.LXV.LXP := 1;
 | 
						|
39840        INTAB(PLX,'NIL       ',LXEM);
 | 
						|
39850        PLX^.LXV.LXPMD := MDNIL;
 | 
						|
39860        INTAB(PLX,'SKIP      ',LXEM);
 | 
						|
39870        PLX^.LXV.LXPMD := MDSKIP;
 | 
						|
39880        INTAB(PLX,'VOID      ',LXEM);
 | 
						|
39890        PLX^.LXV.LXPMD := MDVOID;
 | 
						|
39900        MDREFERROR := FINDREF(MDERROR);
 | 
						|
39910        PRCBNDS := DEFPRC0(MDBNDS, PROC);
 | 
						|
39920        PRCERROR := DEFPRC0(MDERROR, PROC);
 | 
						|
39930        SRSEMP := -1; SRSUBP := 0; SUBSAVE;
 | 
						|
39940        PUTFIELD(MDREAL, DEFTAG('RE        '));
 | 
						|
39950        PUTFIELD(MDREAL, DEFTAG('IM        '));
 | 
						|
39960        FINSTRUCT(2); MDCOMPL := SRSTK[SRSEMP].MD;
 | 
						|
39970        (*MDLCOMPL OUGHT TO BE DONE ONE OF THESE DAYS, TOO*)
 | 
						|
39980        MDFILE := NIL; (*BECAUSE IT IS TO BE A RECURSIVE MODE*)
 | 
						|
39990        PRFB := DEFPRC1(FINDREF(MDFILE), MDBOOL, PROC);
 | 
						|
40000        SRSEMP := -1; SRSUBP := 0; SUBSAVE;
 | 
						|
40010        FOR I := 1 TO 4 DO
 | 
						|
40020          PUTFIELD(PRFB, LEXALEPH);
 | 
						|
40030        PUTFIELD(MDCOVER, LEXALEPH);
 | 
						|
40040        FOR I := 1 TO SZTERM DIV SZINT DO
 | 
						|
40050          PUTFIELD(MDINT, LEXALEPH);
 | 
						|
40060        FINSTRUCT(5+SZTERM DIV SZINT); MDFILE := SRSTK[SRSEMP].MD;
 | 
						|
40070        PRCVF := DEFPRC1(FINDREF(MDFILE), MDVOID, PROC);
 | 
						|
40080        PASCVF := DEFPRC1(FINDREF(MDFILE), MDVOID, PASC);
 | 
						|
40090        ROWBOOL := FINDROW(MDBOOL,1);
 | 
						|
40100        ROWCHAR := FINDROW(MDCHAR,1);
 | 
						|
40110        ROWIN := FINDROW(MDIN,1);
 | 
						|
40120        ROWINB := FINDROW(MDINB,1);
 | 
						|
40130        REFSTRNG := FINDREF(MDSTRNG);
 | 
						|
40140  (*+54()
 | 
						|
40150        SRSEMP := -1; SRSUBP := 0; SUBSAVE;
 | 
						|
40160        PUTFIELD(MDINT, DEFTAG('ALEPH     '));
 | 
						|
40170        PUTFIELD(MDABSENT, LEXALEPH);
 | 
						|
40180        FINSTRUCT(2); MDEXC := SRSTK[SRSEMP].MD;
 | 
						|
40190  ()+54*)
 | 
						|
40200      (*SET UP STANDARD-PRELUDE MODE-INDICATIONS*)
 | 
						|
40210          LXVVAL(LX,LXIOPRDR,0,2,08);
 | 
						|
40220        MDIND('INT       ', MDINT);
 | 
						|
40230        MDIND('BITS      ', MDBITS);
 | 
						|
40240        MDIND('BYTES     ', MDBYTES);
 | 
						|
40250        MDIND('REAL      ', MDREAL);
 | 
						|
40260        MDIND('BOOL      ', MDBOOL);
 | 
						|
40270        MDIND('CHANNEL   ', MDCHAN);
 | 
						|
40280        MDIND('CHAR      ', MDCHAR);
 | 
						|
40290        MDIND('STRING    ', MDSTRNG);
 | 
						|
40300        MDIND('FILE      ', MDFILE);
 | 
						|
40310        MDIND('COMPL     ', MDCOMPL);
 | 
						|
40320  (*+54() MDIND('EXCEPTION ', MDEXC); ()+54*)
 | 
						|
40330        MODEID[MDIDINT]:=0;
 | 
						|
40340        MODEID[MDIDLINT]:=1;
 | 
						|
40350        MODEID[MDIDREAL]:=2;
 | 
						|
40360        MODEID[MDIDLREAL]:=3;
 | 
						|
40370        MODEID[MDIDCHAR]:=6;
 | 
						|
40380        MODEID[MDIDBITS]:=9;
 | 
						|
40390        MODEID[MDIDBYTES]:=10;
 | 
						|
40400        MODEID[MDIDSTRNG]:=7;
 | 
						|
40410        MODEID[MDIDBOOL]:=8;
 | 
						|
40420        MODEID[MDIDCHAN]:=-1;
 | 
						|
40430        MODEID[MDIDCOVER]:=-1;
 | 
						|
40440        MODEID[MDIDVOID]:=-1;
 | 
						|
40450        MODEID[MDIDSKIP]:=-1;
 | 
						|
40460        MODEID[MDIDJUMP]:=-1;
 | 
						|
40470        MODEID[MDIDNIL]:=-1;
 | 
						|
40480        MODEID[MDIDOUT]:=-1;
 | 
						|
40490        MODEID[MDIDIN]:=-1;
 | 
						|
40500        MODEID[MDIDOUTB]:=-1;
 | 
						|
40510        MODEID[MDIDINB]:=-1;
 | 
						|
40520        MODEID[MDIDNUMBER]:=-1;
 | 
						|
40530        MODEID[MDIDROWS]:=-1;
 | 
						|
40540        MODEID[MDIDBNDS]:=-1;
 | 
						|
40550        MODEID[MDIDABSENT]:=-1;
 | 
						|
40560        MODEID[MDIDPROC]:=11;
 | 
						|
40570        MODEID[MDIDREF]:=-1;
 | 
						|
40580        MODEID[MDIDSTRUCT]:=12;  (*BUT NOT COMPL*)
 | 
						|
40590        MODEID[MDIDROW]:=13;
 | 
						|
40600        MODEID[MDIDPASC]:=14;
 | 
						|
40620        XMODES[XINT] := MDINT;
 | 
						|
40630        XMODES[XLINT] := MDLINT;
 | 
						|
40640        XMODES[XREAL] := MDREAL;
 | 
						|
40650        XMODES[XLREAL] := MDLREAL;
 | 
						|
40660        XMODES[XCOMPL] := MDCOMPL;
 | 
						|
40670  (*+61()
 | 
						|
40680        XMODES[XLCOMPL] := MDLCOMPL;
 | 
						|
40690  ()+61*)
 | 
						|
40700        XMODES[XCHAR] := MDCHAR;
 | 
						|
40710        XMODES[XSTRNG] := MDSTRNG;
 | 
						|
40720        XMODES[XBOOL] := MDBOOL;
 | 
						|
40730        XMODES[XBITS] := MDBITS;
 | 
						|
40740        XMODES[XBYTES] := MDBYTES;
 | 
						|
40750        END;
 | 
						|
40760  (**)
 | 
						|
40770  ()+84*)
 | 
						|
40780  (**)
 | 
						|
40790      BEGIN (*INITIALIZE*)
 | 
						|
40800  (*+81()
 | 
						|
40810      INITLEXES;
 | 
						|
40820      MAKEPUSHTBL;
 | 
						|
40830  (**)
 | 
						|
40840      OTPAIRS;
 | 
						|
40850      FOR I := 0 TO HTSIZE DO
 | 
						|
40860        HT[I] := NIL;
 | 
						|
40870      INPRAGMENT := FALSE;
 | 
						|
40880      ENEW(LEXALEPH, LEX1SIZE); WITH LEXALEPH^ DO
 | 
						|
40890        BEGIN LXV:=LXVTAG; LXCOUNT:=0; LXTOKEN:=TKTAG END;
 | 
						|
40900        BOLDWORDS;
 | 
						|
40910  ()+81*)
 | 
						|
40920  (*+84() INITMODES; ()+84*)
 | 
						|
40930  (*+84()
 | 
						|
40940      ENEW(LEXONE, SZADDR+SZINT+LEX1SIZE); WITH LEXONE^ DO
 | 
						|
40950        BEGIN LXV:=LXVPRDEN; LXCOUNT:= (SZADDR+SZINT) DIV SZWORD; LXTOKEN:=TKDENOT; LXDENRP:=1; LXDENMD:=MDINT END;
 | 
						|
40960  ()+84*)
 | 
						|
40970      END;
 | 
						|
40980  (**)
 | 
						|
40990  ()+83*)
 |