! File: LDSF2.BEG ! ! This work was supported by the Advanced Research ! Projects Agency of the Office of the Secretary of ! Defense (F44620-73-C-0074) and is monitored by the ! Air Force Office of Scientific Research. !---------------------------- !4. DELIMITER LEXEME CLASSES: ! A DELIMITER LEXEME HAS A FIELD CALLED THE CLASS ! FIELD. THIS FIELD SPECIFIES WHETHER THE DELIMITER IS AN OPEN ! BRACKET, A CLOSE BRACKET, OR A DECLARATOR. BIND SE=8, MT=4, AE=2, R2L=1, OBR=0, OPENBRAC=0, OP=1, CBR=2, CLOBRAC=2, DCL=3, DCLRTR=3; !---------------------------------------------------- !5. DECLARATION ROUTINE INDICES, AND ASSOCIATED PLIT: ! THESE INDICES ARE USED IN THE SAME MANNER AS THE ! SYNTAX ROUTINE INDICES IN #3.B, EXCEPT THAT THEY INDEX ! INTO A PLIT OF DECLARATION ROUTINES. THUS, THE ! CORRECT DECLARATION ROUTINE IS EXECUTED FOR EACH ! TYPE OF DECLARATION EXPRESSION ENCOUNTERED. BIND DCLBYTE=1, DCLOWN=2, DCLGLO=3, DCLEXT=4, DCLROU=5, DCLSTR=6, DCLMAP=7, DCLFOR=8, DCLBIN=9, DCLMAC=10, DCLUND=11, DCLLAB=12, DCLWORD=13, DCLSWI=14, DCLLOC=15, DCLREG=16, DCLENABLE=17, DCLREQU=18, DCLCSECT=19, DCLSLOCAL=20, DCLLNKG=21, DCLPSECT=22; !-------------------- !6. DELIMITER LEXEMES ! 1. THIS MACRO IS USED FOR MAKING UP SPECIAL ! DELIMITER LEXEMES. MACRO DEFLEX(CLASS,PRIO,FLGS,UN,IND)= (CLASS)^34 OR (PRIO)^30 OR (FLGS)^26 OR (UN)^22 OR (IND)$; ! 2. NOW WE HAVE AN ASSORTMENT OF SPECIAL LEXEMES FOR ! RESERVED WORD DELIMITERS. ! NOTE: IN THE FOLLOWING MT IS A FLAG THAT INDICATES WHETHER ! SYM IS ALLOWED TO BE EMPTY AT A GIVEN POINT. IT ALSO INDICATES ! UNARY OR BINARY IN THE CASE OF OPERATORS ! AE INDICATES WHETHER AEFOLLOWS() IN SYNTAX SHOULD BE ! TRUE. SIMILARLY FOR SE AND SEFOLLOWS(); BIND !A. SPECIAL LEXEMES HDOWHILE=DEFLEX(CBR,0,0,1,SYNDOW), HDOUNTIL=DEFLEX(CBR,0,0,0,SYNDOU), HCOMP=DEFLEX(OBR,1,0,0,SYNCOMP), HCOMP2=DEFLEX(OBR,1,0,1,SYNCOMP), HNULL=DEFLEX(0,0,0,0,SYNNULL), HEMPTY=0, HFPARM=DEFLEX(OBR,0,0,0,SFPARM), HFSTORE=DEFLEX(OBR,0,0,0,SFSTORE), HSWAB=DEFLEX(OP,0,0,0,SSWABOP), HCARRY=DEFLEX(OP,0,0,0,SCARRYOP), HOVFLOW=DEFLEX(OP,0,0,0,SOVFLOP), HMOVP=DEFLEX(OP,0,0,0,SYNMOVP), !B. OPEN BRACKETS HBEGIN=DEFLEX(OBR,0,SE+AE,0,SYNCOMP), HCOMPOPEN=DEFLEX(OBR,0,SE+AE,2,SYNCOMP), HCASE=DEFLEX(OBR,0,AE,0,SYNCASE), HCREATE=DEFLEX(OBR,0,AE,0,SYNCRE), HDECR=DEFLEX(OBR,0,AE,0,SYNDECR), HDO=DEFLEX(OBR,0,AE,2,SYNDOW), HEXCHJ=DEFLEX(OBR,0,SE+AE,0,SYNEXC), HEXITLOOP=DEFLEX(OBR,0,AE,1,SYNESC), HINLINE=DEFLEX(OBR,0,SE+AE,0,SYNINLINE), HINLINECOM=DEFLEX(OBR,0,SE+AE,1,SYNINLINE), HLABUSE=DEFLEX(OBR,0,0,0,SYNLABEL), HLEAVE=DEFLEX(OBR,0,AE,0,SYNEXIT), HIF=DEFLEX(OBR,0,AE,0,SYNIF), HINCR=DEFLEX(OBR,0,AE,0,SYNINCR), HMODULE=DEFLEX(OBR,0,SE+AE,0,SYNMOD), HPARAOPEN=DEFLEX(OBR,0,SE+MT+AE,0,SYNPAR), HPLIT=DEFLEX(OBR,0,SE+AE,0,SYNPLIT), HPOINTOPEN=DEFLEX(OBR,0,SE+MT+AE,0,SYNPOI), HRETURN=DEFLEX(OBR,0,AE,0,SYNESC), HRLEAVE=DEFLEX(OBR,0,0,0,SYNREXIT), HSELECT=DEFLEX(OBR,0,SE+AE,0,SYNSEL), HSIGNAL=DEFLEX(OBR,0,AE,0,SYNSIGNAL), HSQBOPEN=DEFLEX(OBR,0,SE+MT+AE,0,SYNSQB), HUNTIL=DEFLEX(OBR,0,AE,0,SYNUDO), HUPLIT=DEFLEX(OBR,0,SE+AE,1,SYNPLIT), HWHILE=DEFLEX(OBR,0,AE,1,SYNWDO), !C. STANDARD ARITH OPERATORS HADD=DEFLEX(OP,6,SE+MT+AE,0,SADDOP), HAT=DEFLEX(OP,0,SE+AE+R2L,1,SDOTOP), HDIV=DEFLEX(OP,4,SE+MT+AE,1,SDIVOP), HDOT=DEFLEX(OP,0,SE+AE+R2L,0,SDOTOP), HMINUS=DEFLEX(OP,6,SE+MT+AE,1,SMINOP), HMOD=DEFLEX(OP,4,SE+MT+AE,2,SMODOP), HMULT=DEFLEX(OP,4,SE+MT+AE,0,SMULOP), HNEG=DEFLEX(OP,2,SE+AE+R2L,0,SNEGOP), HPLUS=DEFLEX(OP,2,SE+AE+R2L,4,SPLUSOP), HROT=DEFLEX(OP,3,SE+MT+AE,0,SROTOP), HSHIFT=DEFLEX(OP,3,SE+MT+AE,5,SSHIFTOP), HMAX=DEFLEX(OP,7,SE+MT+AE,0,SMAXOP), HMIN=DEFLEX(OP,7,SE+MT+AE,0,SMINNOP), HSTORE=DEFLEX(OP,15,SE+MT+AE+R2L,0,SSTOROP), !D. BOOLEAN OPERATORS HAND=DEFLEX(OP,10,SE+MT+AE,0,SANDOP), HEQL=DEFLEX(OP,8,SE+MT+AE,2,SEQLOP), HEQLU=DEFLEX(OP,8,SE+MT+AE,8,SEQLUOP), HEQV=DEFLEX(OP,14,SE+MT+AE,1,SEQVOP), HGEQ=DEFLEX(OP,8,SE+MT+AE,4,SGEQOP), HGEQU=DEFLEX(OP,8,SE+MT+AE,10,SGEQUOP), HGTR=DEFLEX(OP,8,SE+MT+AE,5,SGTROP), HGTRU=DEFLEX(OP,8,SE+MT+AE,11,SGTRUOP), HLEQ=DEFLEX(OP,8,SE+MT+AE,1,SLEQOP), HLEQU=DEFLEX(OP,8,SE+MT+AE,7,SLEQUOP), HLSS=DEFLEX(OP,8,SE+MT+AE,0,SLSSOP), HLSSU=DEFLEX(OP,8,SE+MT+AE,6,SLSSUOP), HNEQ=DEFLEX(OP,8,SE+MT+AE,3,SNEQOP), HNEQU=DEFLEX(OP,8,SE+MT+AE,9,SNEQUOP), HNOT=DEFLEX(OP,9,SE+AE+R2L,0,SNOTOP), HOR=DEFLEX(OP,12,SE+MT+AE,0,SOROP), HXOR=DEFLEX(OP,14,SE+MT+AE,0,SXOROP), !E. FLOATING POINT OPERATORS HFADR=DEFLEX(OP,6,SE+MT+AE,2,SFADROP), HFDVR=DEFLEX(OP,4,SE+MT+AE,4,SFDVROP), HFIX=DEFLEX(OP,2,SE+AE+R2L,3,SFIXOP), HFLOAT=DEFLEX(OP,2,SE+AE+R2L,2,SFLOATOP), HFMPR=DEFLEX(OP,4,SE+MT+AE,3,SFMPROP), HFNEG=DEFLEX(OP,2,SE+AE+R2L,1,SFNEGOP), HFSBR=DEFLEX(OP,6,SE+MT+AE,3,SFSBROP), !F. CLOSE BRACKETS HALWAYS=DEFLEX(CBR,0,0,3,SYNNULL), HBY=DEFLEX(CBR,0,0,3,SYNINCR), HCOLON=DEFLEX(CBR,0,0,0,21), HCOMMA=DEFLEX(CBR,0,0,0,18), HCRAT=DEFLEX(CBR,0,0,1,SYNCRE), HDOCLOSE=DEFLEX(CBR,0,0,2,SYNDOU), HELBANE=DEFLEX(CBR,0,0,0,SYNENABLE), HELSE=DEFLEX(CBR,0,0,2,SYNIF), HELUDOM=DEFLEX(CBR,0,0,0,SYNMOD), HEND=DEFLEX(CBR,0,0,0,0), HEQUAL=HSTORE, HFROM=DEFLEX(CBR,0,0,1,SYNINCR), HLENGTH=DEFLEX(CBR,0,0,2,SYNCRE), HNSET=DEFLEX(CBR,0,0,1,SYNSEL), HOF=DEFLEX(CBR,0,0,0,SYNCASE), HOTHERWISE=DEFLEX(CBR,0,0,4,SYNNULL), HPARACLOSE=DEFLEX(CBR,0,0,0,1), HPOINCLOSE=DEFLEX(CBR,0,0,0,2), HSEMICOLON=DEFLEX(CBR,0,0,0,17), HSET=DEFLEX(CBR,0,0,1,SYNCASE), HSQBCLOSE=DEFLEX(CBR,0,0,0,3), HTES=DEFLEX(CBR,0,0,2,SYNCASE), HTESN=DEFLEX(CBR,0,0,2,SYNSEL), HTHEN=DEFLEX(CBR,0,0,1,SYNIF), HTO=DEFLEX(CBR,0,0,2,SYNINCR), HUNTILCLOS=HDOUNTIL, HWHILECLOS=HDOWHILE, HWITH=DEFLEX(CBR,0,0,0,SYNEXIT), !G. DECLARATORS HBIND=DEFLEX(DCL,0,0,0,DCLBIN), HENABLE=DEFLEX(DCL,0,0,0,DCLENABLE), HEXTERNAL=DEFLEX(DCL,0,0,0,DCLEXT), HFORWARD=DEFLEX(DCL,0,0,0,DCLFOR), HGLOBAL=DEFLEX(DCL,0,0,0,DCLGLO), HLABEL=DEFLEX(DCL,0,0,0,DCLLAB), HLOCAL=DEFLEX(DCL,0,0,0,DCLLOC), HMACRO=DEFLEX(DCL,0,0,0,DCLMAC), HMAP=DEFLEX(DCL,0,0,0,DCLMAP), HOWN=DEFLEX(DCL,0,0,0,DCLOWN), HREGISTER=DEFLEX(DCL,0,0,0,DCLREG), HROUTINE=DEFLEX(DCL,0,0,0,DCLROU), HSTRUCTURE=DEFLEX(DCL,0,0,0,DCLSTR), HSWITCHES=DEFLEX(DCL,0,0,0,DCLSWI), HUNDECLARE=DEFLEX(DCL,0,0,0,DCLUND), HWORD=DEFLEX(DCL,0,0,0,DCLWORD), HBYTE=DEFLEX(DCL,0,0,0,DCLBYTE), HREQUIRE=DEFLEX(DCL,0,0,0,DCLREQU), HCSECT=DEFLEX(DCL,0,0,0,DCLCSECT), HSLOCAL=DEFLEX(DCL,0,0,0,DCLSLOCAL), HLNKG=DEFLEX(DCL,0,0,0,DCLLNKG), HPSECT=DEFLEX(DCL,0,0,0,DCLPSECT), !H SPECIAL ERROR OPERATOR ERRLEX=DEFLEX(OP,14,SE+MT+AE,0,SERROP), HBACKSLASH=DEFLEX(OP,14,SE+MT+AE,1,SERROP); !--------------------------------------------- !7. QUOTE AND CLASS LEVELS FOR RUND PARAMETERS BIND CLLEXEME=BNDVAR, QLLEXEME=CLLEXEME, CLLSLEX=LSLEXTYP, QLLSLEX=CLLSLEX, CLSSLEX=SSLEXTYP, QLSSLEX=CLSSLEX, CLQNAME=UNBNDVAR, QLQNAME=CLQNAME, QLSFCONV=CLSFCONV, QLMACR=CLMACR; !8. SIZE OF DELIMITER TABLE (SEE OF1 AND DEBUG). BIND DTSIZE=#200; ! RECOMPILE GLODEC IF YOU CHANGE THIS. !----------------------------------------- !9. LOOPING CONSTRUCT DEFAULT DEFINITIONS: MACRO DFROM=ZERO$, DTOI=LITLEXEME((1^15)-1)$, DTOD=LITLEXEME(((-1)^15))$, DBY=LITLEXEME(1)$; !----------------------------------------- !10. PRIMITIVES TO SET AND RESTORE NOTREE MACRO NOCODE=(NOTREE_(.NOTREE^1) OR 1)$, RESNOTREE=(NOTREE_.NOTREE^(-1))$;