.TITLE CC0HD .IDENT /X01/ .NLIST BEX ; ; C COMPILER ; EQUIVALENCES ; ; VERSION X01 ; ; DAVID G. CONROY 14-NOV-77 ; ; ; OPERATORS AND SCANNER TOKENS ; LEAF NODES ; BINARY OPERATORS ; UNARY OPERATORS ; OTHER OPERATORS ; PUNCTUATION MARKS ; RESERVED WORDS ; OP.EOF == 0 ;END OF FILE OP.CON == 1 ;CONSTANT (ALL TYPES) OP.ID == 2 ;ID (EXTERNALS) OP.LID == 3 ;LOCAL ID (STATICS) OP.LCN == 4 ;LONG CONSTANT (SCANNER) OP.DCN == 5 ;DOUBLE CONSTANT (SCANNER) OP.REG == 6 ;REGISTER OP.INX == 7 ;XXX(REG) OP.AUI == 10 ;(REG)+ OP.AUD == 11 ;-(REG) OP.ADD == 12 ;+ OP.SUB == 13 ;- BINARY OP.MUL == 14 ;* BINARY OP.DIV == 15 ;/ OP.MOD == 16 ;% OP.ASL == 17 ;<< OP.ASR == 20 ;>> OP.AND == 21 ;& BINARY OP.OR == 22 ;OR OP.XOR == 23 ;^ OP.ADA == 24 ;+= OP.SBA == 25 ;-= OP.MUA == 26 ;*= OP.DVA == 27 ;/= OP.MOA == 30 ;%= OP.ALA == 31 ;<<= OP.ARA == 32 ;>>= OP.ANA == 33 ;&= OP.ORA == 34 ;OR= OP.XRA == 35 ;^= OP.EQ == 36 ;== OP.NE == 37 ;!= OP.LT == 40 ;< OP.LE == 41 ;<= OP.GE == 42 ;>= OP.GT == 43 ;> OP.LTU == 44 ;< UNSIGNED OP.LEU == 45 ;<= UNSIGNED OP.GEU == 46 ;>= UNSIGNED OP.GTU == 47 ;> UNSIGNED OP.AA == 50 ;LOGICAL AND OP.OO == 51 ;LOGICAL OR OP.INB == 52 ;++ PREFIX OP.INA == 53 ;++ POSTFIX OP.DEB == 54 ;-- PREFIX OP.DEA == 55 ;-- POSTFIX OP.ASG == 56 ;ASSIGNMENT OP.ADR == 57 ;& UNARY OP.IND == 60 ;* UNARY OP.NEG == 61 ;- UNARY OP.COM == 62 ;TILDE OP.NOT == 63 ;! OP.QRY == 64 ;? OP.CLN == 65 ;: OP.CMA == 66 ;, IN ARGLISTS. OP.SEQ == 67 ;SEQUENTIAL EXECUTION OP.BIC == 70 ;BIT CLEAR OP.BCA == 71 ;ASSIGNED BIT CLEAR OP.BIT == 72 ;BIT TEST OP.JSR == 73 ;CALL OP.CVR == 74 ;CONVERT TO REGISTER OP.CVM == 75 ;CONVERT TO MEMORY OP.FSR == 76 ;FIELD SELECT TO REGISTER. OP.FSM == 77 ;FIELD SELECT TO MEMORY OP.LOD == 100 ;LOAD OP.CST == 101 ;NULL TERMINATED STRING OP.NAC == 102 ;NO ARGS CALL OP.SEM == 103 ;SEMICOLON OP.DOT == 104 ;. OP.ARO == 105 ;-> OP.LPA == 106 ;( OP.RPA == 107 ;) OP.LSQ == 110 ;[ OP.RSQ == 111 ;] OP.LBR == 112 ;LEFT BRACE OP.RBR == 113 ;RIGHT BRACE OP.INT == 116 ;INT OP.CHR == 117 ;CHAR OP.FLT == 120 ;FLOAT OP.DBL == 121 ;DOUBLE OP.UNS == 122 ;UNSIGNED OP.LNG == 123 ;LONG OP.STR == 124 ;STRUCT OP.AUT == 125 ;AUTO OP.STA == 126 ;STATIC OP.EXT == 127 ;EXTERN OP.GOT == 130 ;GOTO OP.RET == 131 ;RETURN OP.IF == 132 ;IF OP.WHI == 133 ;WHILE OP.ELS == 134 ;ELSE OP.SWI == 135 ;SWITCH OP.CAS == 136 ;CASE OP.BRK == 137 ;BREAK OP.CTN == 140 ;CONTINUE OP.DO == 141 ;DO OP.DEF == 142 ;DEFAULT OP.FOR == 143 ;FOR OP.TYP == 144 ;TYPEDEF OP.SIZ == 145 ;SIZEOF OP.SHO == 146 ;SHORT OP.UNI == 147 ;UNION ; ; TYPES ; IN ORDER OF 'WIDENESS' ; TY.UND == 0 ;UNDEFINED TY.CHR == 2 ;CHAR TY.INT == 4 ;INT TY.UNS == 6 ;UNSIGNED TY.PTR == 10 ;POINTER TY.LNG == 12 ;LONG TY.FLT == 14 ;FLOAT TY.DBL == 16 ;DOUBLE TY.UST == 20 ;UNDEFINED STRUCTURE TY.UUN == 22 ;UNDEFINED UNION TY.STR == 24 ;STRUCTURE TY.UNI == 26 ;UNION ; ; CLASSES ; IN NO PARTICULAR ORDER ; CL.UND == 0 ;UNDEFINED CL.AUT == 2 ;AUTO CL.SIN == 4 ;STATIC INTERNAL CL.SEX == 6 ;STATIC EXTERNAL CL.GBD == 10 ;GLOBAL DEFINITION CL.GBR == 12 ;GLOBAL REFERENCE CL.REG == 14 ;REGISTER CL.DRG == 16 ;DEFINED ARGUMENT IN REGISTER CL.ARG == 20 ;ARGUMENT CL.DEF == 22 ;DEFINED ARGUMENT CL.LAB == 24 ;LABEL CL.FOR == 26 ;FORWARD REFERENCED LABEL CL.TAG == 30 ;STRUCTURE TAG CL.MOS == 32 ;MEMBER OF STRUCTURE CL.KEY == 34 ;KEYWORD CL.TYP == 36 ;TYPEDEF ; ; DIMENSION LIST NODES ; A CHAIN OF DIMENSION LIST NODES BEGINS AT THE S.DIMP OF ; EACH SYMBOL. THIS IS COPIED INTO E.DIMP WHEN THAT SYMBOL ; IS USED IN AN EXPRESSION. ; ; USED BY PASS I ; D.LINK == 0 ;LINK TO THE NEXT DIMENSION D.TYPE == 2 ;DIMENSION TYPE D.BOUN == 4 ;ARRAY BOUND D.LENG == 6 ;SIZE FOR ALLOCATION DT.FUN == 0 ;FUNCTION DT.PTR == 1 ;POINTER DT.ARY == 2 ;ARRAY ; ; SYMBOL TABLE NODES ; THE SYMBOL TABLE IS (UGH) LINEAR. ; SOMEDAY I WILL MAKE IT INTO A HASH TABLE. ; ; USED BY PASS I ; S.LINK == 0 ;LINK S.CLAS == 2 ;CLASS (BYTE) S.TYPE == 3 ;TYPE (BYTE) S.DIMP == 4 ;POINTER TO DIMENSION LIST S.DOPE == 6 ;POINTER TO STRUCTURE DOPE BLOCK S.FLAG == 10 ;FLAGS S.ADDR == 12 ;ADDRESS S.AUXP == 14 ;AUX POINTER FOR DOPE S.NAME == 16 ;NAME, 8 BYTES + NULL + PAD S.LENG == 30 ;SIZE FOR ALLOCATION SF.MOS == 000001 ;NAME IS IN MOS SYMBOL TABLE SF.PRM == 000002 ;PERM. SYMBOL, DON'T DELETE SF.RUP == 000004 ;ROUND UP IN STRUCT BEFORE THIS MEMBER ; ; STRUCTURE DOPE NODE ; THE DOPE BLOCK IS USED TO INITIALISE A STRUCTURE (MAINLY). ; IT IS A VARIABLE SIZE NODE POINTED TO BY THE S.DOPE FIELD ; OF THE SYMBOL TABLE NODE. ; ; USED BY PASS I ; S.REFC == 0 ;REFERENCE COUNT S.SSIZ == 2 ;STRUCTURE SIZE (BYTES) S.MEMB == 4 ;START OF MEMBERS ; ; EXPRESSION TREE NODES ; LOTS OF DIFFERENT TYPES. THE FIRST PART IS THE SAME FOR ALL ; TYPES; THE SECOND PART IS VARIABLE. THE SYMBOL OF THE FORM ; ES.XXX IS THE SIZE OF THE NODE, FOR ALLOCATION. ; E.OP == 0 ;OP E.CLAS == 2 ;CLASS (BYTE) E.TYPE == 3 ;TYPE (BYTE) E.DIMP == 4 ;POINTER TO DIMENSION LIST (I) E.SSIZ == 6 ;STRUCTURE SIZE (I) E.HFPR == 4 ;HIGHEST FLOATING POINT REG. (II) E.HGPR == 6 ;HIGHEST GENERAL REG. (II) E.LOP == 10 ;LEFT OPERAND E.ROP == 12 ;RIGHT OPERAND ES.OP == 14 ;SIZE FOR ALLOCATION E.VAL == 10 ;8 BYTE CONSTANT VALUE ES.CON == 20 ;SIZE FOR ALLOCATION E.OFFS == 10 ;OFFSET E.REG == 12 ;REGISTER NUMBER ES.REG == 14 ;SIZE FOR ALLOCATION E.OFFS == 10 ;OFFSET E.NAME == 12 ;8 BYTE NAME + NULL + PAD ES.ID == 24 ;SIZE FOR ALLOCATION E.OFFS == 10 ;OFFSET E.LAB == 12 ;LOCAL ID LABEL ES.LID == 14 ;SIZE FOR ALLOCATION .END