/ oldbcpl / comphdr
comphdr
  1  ||KRC COMPILER HEADER FILE
  2  
  3  ||----------------------------------------------------------------------
  4  ||The KRC system is Copyright (c) D. A. Turner 1981
  5  ||All  rights reserved.  It is distributed as free software under the
  6  ||terms in the file "COPYING", which is included in the distribution.
  7  ||----------------------------------------------------------------------
  8  
  9  ||LEX ANALYSER MANIFESTS
 10  MANIFEST $( ID=0; CONST=1; EOL='*N'; BADTOKEN=256
 11              PLUSPLUS.SY=257; GE.SY=258; LE.SY=259; NE.SY=260
 12              DOTDOT.SY=261; BACKARROW.SY=262; DASHDASH.SY=263
 13              STARSTAR.SY=264
 14           $)
 15  
 16  ||LEX ANALYSER GLOBALS
 17  GLOBAL $( TOKENS:150; THE.ID:151; THE.CONST:152      || BASES
 18            EXPFLAG:153; ERRORFLAG:154; THE.NUM:155; THE.DECIMALS:156
 19            EQNFLAG:157
 20            CASECONV:158
 21            UPPERCASE:159  ||A FLAG - IF SET UPPER AND LOWER CASE ARE TREATED AS EQUIVALENT
 22            COMMENTFLAG:160; SUPPRESSPROMPTS:161
 23            FILECOMMANDS:162  || BASE
 24            WRITETOKEN:163
 25         $)
 26  
 27  || KRC EXPRESSION REPRESENTATIONS
 28  || THE INTERNAL REPRESENTATIONS OF EXPRESSIONS IS AS FOLLOWS
 29  || EXP::= ID|CONST|APPLN|OTHER
 30  || ID::= ATOM
 31  || CONST::= NUM|CONS(QUOTE,ATOM)|NIL
 32  || APPLN::= CONS(EXP,EXP)
 33  || OTHER::= CONS(OPERATOR,OPERANDS)
 34  || NOTE THAT THE INTERNAL FORM OF ZF EXESSIONS IS CONS(ZF.OP,BODY) :-
 35  ||  BODY::= CONS(EXP,NIL) | CONS(QUALIFIER,BODY)
 36  ||  QUALIFIER::= EXP | CONS(GENERATOR,CONS(ID,EXP))
 37  
 38  || OPERATOR VALUES:
 39  MANIFEST $( ALPHA=-2; INDIR=-1; QUOTE=0   || QUASI OPERATORS
 40              COLON.OP=1; APPEND.OP=2; LISTDIFF.OP=3; OR.OP=4; AND.OP=5; GR.OP=6
 41              GE.OP=7; NE.OP=8; EQ.OP=9; LE.OP=10; LS.OP=11; PLUS.OP=12
 42              MINUS.OP=13;TIMES.OP=14;DIV.OP=15;REM.OP=16;EXP.OP=17;DOT.OP=18
 43              DOTDOT.OP=19; COMMADOTDOT.OP=20; ZF.OP=21; GENERATOR=22
 44              LENGTH.OP=23; NEG.OP=24; NOT.OP=25
 45              QUOTE.OP=26    ||USED TO CONVERT AN INFIX INTO A FUNCTION 
 46           $)
 47  
 48  ||INTERNAL REPRESENTATION OF KRC EQUATIONS
 49  ||VAL FIELD OF ATOM ::= CONS(CONS(NARGS,COMMENT),LISTOF(EQN))
 50  || COMMENT ::= NIL | CONS(ATOM,COMMENT)
 51  || EQN ::= CONS(LHS,CODE)
 52  ||(IF NARGS=0 THERE IS ONLY ONE EQUATION IN THE LIST AND ITS LHS FIELD
 53  || IS USED TO REMEMBER THE VALUE OF THE VARIABLE)
 54  || LHS ::= ID | CONS(LHS,FORMAL)
 55  || FORMAL ::= ID | CONST | CONS(COLON.OP,CONS(FORMAL,FORMAL))
 56  || CODE ::= INSTR*
 57  || INSTR ::= LOAD.C <ID|CONST|MONOP> |
 58  ||           LOADARG.C INT |
 59  ||           APPLY.C |
 60  ||           APPLYINFIX.C DIOP |
 61  ||           IF.C |
 62  ||           FORMLIST.C INT |
 63  ||           MATCH.C INT CONST
 64  ||           MATCHARG.C INT INT |
 65  ||           MATCHPAIR.C INT |
 66  ||           STOP.C |
 67  ||           LINENO.C INT |
 68  ||           CONTINUE.INFIX.C DIOP |
 69  ||           CONT.GENERATOR.C INT|
 70  ||           FORMZF.C INT|
 71  ||           CALL.C BCPL_FN
 72  
 73  ||INSTRUCTION CODES
 74  MANIFEST $( LOAD.C=0; LOADARG.C=1; APPLY.C=2; APPLYINFIX.C=3
 75              IF.C=4; FORMLIST.C=5; MATCH.C=6; MATCHARG.C=7
 76              MATCHPAIR.C=8; STOP.C=9; LINENO.C=10; CALL.C=11
 77              CONTINUE.INFIX.C=12; FORMZF.C=13; CONT.GENERATOR.C=14
 78         ||THE LINENO COMMAND HAS NO EFFECT AT EXECUTION TIME, IT IS USED
 79         ||TO GIVE AN EQUATION A NON STANDARD LINE NUMBER FOR INSERTION 
 80         ||PURPOSES
 81           $)
 82  
 83  ||EXTERNAL SYNTAX FOR KRC EXPRESSIONS AND EQUATIONS
 84  || EQUATION ::= LHS=EXP | LHS=EXP,EXP
 85  || LHS ::= ID FORMAL*
 86  || FORMAL ::= ID | CONST | (PATTERN) | [PATTERN-LIST?]
 87  || PATTERN ::= FORMAL:PATTERN | FORMAL
 88  || EXP ::= PREFIX EXP | EXP INFIX EXP | SIMPLE SIMPLE*
 89  || SIMPLE ::= ID | CONST | (EXP) | [EXP-LIST?] | [EXP..EXP] | [EXP..] |
 90  ||            [EXP,EXP..EXP] | [EXP,EXP..] | {EXP;QUALIFIERS}
 91  || QUALIFIERS ::= QUALIFIER | QUALIFIER;QUALIFIERS
 92  || QUALIFIER ::= EXP | NAME-LIST<-EXP
 93  || CONST ::= INT | "STRING"
 94  
 95  || PREFIX AND INFIX OPERATORS, IN ORDER OF INCREASING BINDING POWER:
 96  
 97  ||    (PREFIX)               (INFIX)            (REMARKS)
 98  ||                          :  ++  --           right associative
 99  ||                             |
100  ||                             &
101  ||       \     
102  ||                     >  >=  =  \=  <=  <      continued relations allowed
103  ||                            +  -              left associative
104  ||     +  -      
105  ||                          *  /  %             left associative 
106  ||                           **  .              (** is right associative)
107  ||      #
108  ||Notes - "%" is remainder operator, "." is functional composition and "#" takes the length of lists
109  
110  ||COMPILER GLOBALS
111  
112  ||PROCEDURES
113  GLOBAL $( SETUP.INFIXES:170; READLINE:171; HAVE:172; HAVEID:173
114            SYNTAX:174; CHECK:175; HAVECONST:176;HAVENUM:177
115            EQUATION:178; PROFILE:179; PRINTEXP:180; DISPLAY:181
116            EXP:182; REMOVELINENO:183
117            PRINTATOM:184   ||DEFINED IN KRC_REDUCER
118            ISID:185
119         $)
120  
121  ||OTHERS
122  GLOBAL $( CODEV:195; ENV:196       || BASES FOR GARBAGE COLLECTION
123            TRUEWRCH:197
124            TRUTH:198; FALSITY:199; INFINITY:200  ||BASES
125            ENVP:201; CODEP:202
126            LASTLHS:203       ||BASE
127         $)
128  
129  
130  
131  
132