Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-04 - 43,50325/ldsf2.beg
There are no other files named ldsf2.beg in the archive.
! 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))$;