.TITLE TABLE - KEY TABLES FOR INDEX .IDENT /V02/ ; ; AUTHOR: GARY L. MAXWELL ; DATE: 13-AUG-79 ; ; THIS MODULE REPLACES THE OLD TABLE MODULE FOR INDEX ; ; THESE TABLES ARE COMPLETELY CODIFIED SO TABLE ENTRIES ARE ; REFERRED SYMBOLICALLY THROUGHOUT THE IDX PROGRAM. ; ; THIS MODULE CONTAINS A TABLE (STARTING AT LOCATION KEY) ; OF FORTRAN CONTROL AND KEY WORDS IN ASCII WHICH IS SCANNED ; BY THE SCANLN ROUTINE. IF A MATCH IS FOUND, THE SEQUENCE OF ; THIS ENTRY IN THE TABLE INDEXES INTO ANOTHER TABLE (STARTING ; AT EVLRTN) WHICH POINTS TO A PARSING ROUTINE WHICH WILL ; PROCESS THE SOURCE LINE. ; ; A MACRO, KEYDEF, BUILDS THE KEY AND ENTRY POINT TABLE. ; IT IS INVOKED WITH THE CALL: ; ; KEYDEF ,KEYSYM,EVALRTN ; ; WHERE: ; KEYWORD IS THE FORTRAN 'TOKEN' THAT WILL BE MATCHED ; WITH THE INPUT STREAM. ; KEYSYM IS A SYMBOL, FOUR LETTERS MAXIMUM IN LENGTH, ; THAT WILL BE APPENDED TO THE LETTERS 'KY' AND ; DEFINED AS THE GLOBAL SEQUENCE NUMBER (TOKEN ; VALUE) OF THE KEYWORD. THUS, IF THE KEYSYM ; ARGUMENT WAS "SUB", THEN THE GLOBAL SYMBOL ; "KYSUB" IS DEFINED WITH THE UNIQUE VALUE OF ; "KEYWORD"'S SEQUENCE IN THE KEY TABLE. ; EVALRTN IS THE NUMBER ID OF THE EVALUATION PARSER THAT ; WILL BE PARSING THIS KEY LINE ; ; MACRO EVL DEFINES THE GLOBAL ENTRY POINT INTO AN EVALUATION ; ROUTINE BY ISSUING A .WORD DIRECTIVE IN THE EVLRTN TABLE ; .MACRO EVL A .PSECT ROUTSC,D .GLOBL EVL'A .WORD EVL'A .ENDM ; .MACRO KEYDEF KEY,KEYSYM,EVLRTN .PSECT KEYSEC,D KEYVAL = KEYVAL + 1 KY'KEYSYM == KEYVAL .ASCIZ ^KEY^ EVL EVLRTN .PSECT TABLE .ENDM ;+ ; THE VTYPDF MACRO BELOW DEFINES THE CODES USED IN THE ; CREF LISTING, AND THE TOKENS WHOSE VALUES CORRESPOND TO ; THESE CODES. ;- .MACRO VTYPDF VCODE,VTOKEN VARVAL = VARVAL + 1 VT'VTOKEN == VARVAL .ASCII ^VCODE^ .ENDM ;+ ; INITIALIZE SYMBOLS FOR THIS MODULE ;- KEYVAL = 0 VARVAL = -1 .PSECT KEYSEC,D KEY:: ; .PSECT ROUTSC,D EVLRTN:: EVL 40 ; TYPE 0 SHOULD NOT OCCUR ; KEYDEF ,ACC,2 ; ACCEPT: GO TO EVL2 KEYDEF ,ASN,3 ; ASSIGN: GO TO EVL3 KEYDEF ,BKSP,4 ; BACKSPACE: GO TO EVL4 KEYDEF ,BKDT,14 ; BLOCKDATA: GO TO EVL14 KEYDEF ,BYTE,15 ; BYTE: GO TO EVL15 KEYDEF ,CALL,5 ; CALL: GO TO EVL5 KEYDEF ,CLOS,19 ; CLOSE(: GO TO EVL19 KEYDEF ,COM,6 ; COMMON: GO TO EVL6 KEYDEF ,CPX,15 ; COMPLEX: GO TO EVL15 KEYDEF ,CONT,0 ; CONTINUE: GO TO EVL0 KEYDEF ,DATA,7 ; DATA: GO TO EVL7 KEYDEF ,DCOD,8 ; DECODE(: GO TO EVL8 KEYDEF ,DEFF,9 ; DEFINEFILE: GO TO EVL9 KEYDEF ,DIM,10 ; DIMENSION: GO TO EVL10 KEYDEF ,DBP,15 ; DOUBLEPRECISION: GO TO EVL15 KEYDEF ,DO,11 ; DO: GO TO EVL11 KEYDEF ,ENDF,4 ; ENDFILE: GO TO EVL4 KEYDEF ,ENC,8 ; ENCODE(: GO TO EVL8 KEYDEF ,END,12 ; END: GO TO EVL12 KEYDEF ,ENT,14 ; ENTRY: GO TO EVL14 KEYDEF ,EQV,10 ; EQUIVALENCE: GO TO EVL10 KEYDEF ,EXT,10 ; EXTERNAL: GO TO EVL10 KEYDEF ,FIND,13 ; FIND(: GO TO EVL13 KEYDEF ,FMT,22 ; FORMAT(: GO TO EVL22 KEYDEF ,FUNC,14 ; FUNCTION: GO TO EVL14 KEYDEF ,GOTO,18 ; GOTO: GO TO EVL18 KEYDEF ,IF,16 ; IF(: GO TO EVL16 KEYDEF ,IMPL,0 ; IMPLICIT: GO TO EVL0 KEYDEF ,INCL,21 ; INCLUDE: GO TO EVL21 KEYDEF ,INT,15 ; INTEGER: GO TO EVL15 KEYDEF ,LOGI,15 ; LOGICAL: GO TO EVL15 KEYDEF ,OPEN,19 ; OPEN(: GO TO EVL19 KEYDEF ,PARM,20 ; PARAMETER: GO TO EVL20 KEYDEF ,PAUS,0 ; PAUSE: GO TO EVL0 KEYDEF ,PRIN,2 ; PRINT: GO TO EVL2 KEYDEF ,PROG,14 ; PROGRAM: GO TO EVL14 KEYDEF ,RDF,17 ; READ(: GO TO EVL17 KEYDEF ,RDUF,2 ; READ: GO TO EVL2 KEYDEF ,REAL,15 ; REAL: GO TO EVL15 KEYDEF ,RET,0 ; RETURN: GO TO EVL0 KEYDEF ,RWND,4 ; REWIND: GO TO EVL4 KEYDEF ,STOP,0 ; STOP: GO TO EVL0 KEYDEF ,SUB,14 ; SUBROUTINE: GO TO EVL14 KEYDEF ,TYPE,2 ; TYPE: GO TO EVL2 KEYDEF ,VIRT,10 ; VIRTUAL: GO TO EVL10 KEYDEF ,WRIT,17 ; WRITE(: GO TO EVL17 ; .PSECT KEYSEC,D .BYTE 0 ; END OF KEYWORD LIST KYARTH == KEYVAL + 1 KYERR == KEYVAL + 2 ; .PSECT ROUTSC,D EVL 1 ; EVALUATE ARITHMETIC STATEMENTS EVL 40 ; PROCESS ILLEGAL LINES .PSECT VTABSC,D VARNEM:: VTYPDF < >,ARTH ; ARITHMETIC STATEMENT VTYPDF <= >,ASNS ; ASSIGNMENT STATEMENT VTYPDF <* >,LDEF ; LABEL DEFINITION VTYPDF ,ACC ; ACCEPT VTYPDF ,ARG ; ARGUMENT TO SUBPROGRAM VTYPDF ,ASN ; ASSIGN VTYPDF ,BKSP ; BACKSPACE VTYPDF ,BKDT ; BLOCK DATA VTYPDF ,BYTE ; BYTE VTYPDF ,CALL ; CALL VTYPDF ,COM ; COMMON VTYPDF ,COMN ; COMMON BLOCK NAME VTYPDF ,CLOS ; CLOSE FILE VTYPDF ,CPX ; COMPLEX VTYPDF ,DATA ; DATA STATEMENT VTYPDF ,DCOD ; DECODE VTYPDF ,DEFF ; DEFINE FILE VTYPDF ,DIM ; DIMENSION VTYPDF ,DO ; DO STATEMENT VTYPDF ,DBP ; DOUBLE PRECISION VTYPDF ,ENDF ; ENDFILE VTYPDF ,ENC ; ENCODE VTYPDF ,EQV ; EQUIVALENCE VTYPDF ,EXT ; EXTERNAL VTYPDF ,ENT ; ENTRY POINT VTYPDF ,BFUN ; BYTE FUNCTION VTYPDF ,CFUN ; COMPLEX FUNCTION VTYPDF ,DFUN ; DOUBLE PRECISION FUNCTION VTYPDF ,IFUN ; INTEGER FUNCTION VTYPDF ,LFUN ; LOGICAL FUNCTION VTYPDF ,FMT ; FORMAT STATEMENT VTYPDF ,FIND ; FIND RECORD VTYPDF ,RFUN ; REAL FUNCTION VTYPDF ,FUNC ; PLAIN FUNCTION VTYPDF ,GOTO ; GO TO STATEMENT VTYPDF ,IF ; IF STATEMENT VTYPDF ,INT ; INTEGER VTYPDF ,LOGI ; LOGICAL DECL. VTYPDF ,OPEN ; OPEN FILE VTYPDF ,PARM ; PARAMETER DEF. VTYPDF ,PROG ; PROGRAM STATEMENT VTYPDF ,PRIN ; PRINT STATEMENT VTYPDF ,READ ; ALL READ STATEMENTS VTYPDF ,REAL ; REAL DECLARATION VTYPDF ,RWND ; REWIND FILE VTYPDF ,SUB ; SUBROUTINE VTYPDF ,TYPE ; TYPE STATEMENT VTYPDF ,VIRT ; VIRTUAL DECL. VTYPDF ,WRIT ; WRITE STATEMENT ; LOGNEM:: ;LOGICAL OPERATOR NEMONICS .ASCIZ /.AND./ .ASCIZ /.OR./ .ASCIZ /.XOR./ .ASCIZ /.NOT./ .ASCIZ /.EQU./ .ASCIZ /.LT./ .ASCIZ /.LE./ .ASCIZ /.EQ./ .ASCIZ /.NE./ .ASCIZ /.GT./ .ASCIZ /.GE./ .ASCIZ /.TRUE./ .ASCIZ /.FALSE./ .BYTE 0 .EVEN .END