|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 79104 (0x13500)
Types: TextFile
Names: »algpass63tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »algpass63tx «
; rc 11.1.1971 algol 6, pass 6, page ...0...
; pass 6 makes a type and kind check on all operands and outputs the
; text in reverse polish notation. some operators are deleted after
; the type check (e.g. pos) - other operators are added (e.g. convert
; top etc.). two stacks are used:
; operator stack: entries consist of double words beginning with the
; first free double word after pass 6 and continuing
; higher in the store as needed.
; operand stack : entries consist of words beginning with the last free
; word accessible by pass 6 and continuing lower in
; the store as needed. operand kinds and types are
; designated as follows:
; bit 7 = 1<16 : expression
; - 8 = 1<15 : variable
; - 9 = 1<14 : formal procedure
; - 10 = 1<13 : no parameter procedure
; - 11 = 1<12 : parameter procedure
; - 12 = 1<11 : array
; - 13 = 1<10 : zone array
; - 14 = 1<9 : zone
; - 15 = 1<8 : field
; - 16 = 1<7 : array field
; - 17 = 1<6 : no type
; - 18 = 1<5 : label
; - 19 = 1<4 : string
; - 20 = 1<3 : integer
; - 21 = 1<2 : real
; - 22 = 1<1 : long
; - 23 = 1<0 : boolean
; briefly, the action proceeds as follows: a byte is input and used to
; index an entry in the input table. this entry is stored in the control
; word and also compared to operator stack(top). if the priority of ope-
; rator stack(top) is greater than the priority of the control word, ope-
; rator stack pointer is decreased and the new operator stack top is com-
; pared to the control word. eventually, if not initially, the priority
; of the control word will be greater than that of operator stack top and
; the input actions will ensue. frequently required tasks such as stacking
; and outputing are accomplished within the central logic, while special
; actions requiring entry addresses stored in input and operator table en-
; tries are jumped to from the central logic. often special actions by-pass
; the priority check which results in simply calling a new input byte.
; errors encountered in the pass and error identification bytes from previ-
; ous passes cause the output of error messages. usually such messages are
; accompanied by the transmission of the trouble byte to pass 7. cascading
; effects of errors are surpressed.
; the pass terminates when end pass (or end external and the subsequent
; standard procedure information bytes have been copied from input to output.
\f
; rc 1977.11.03 algol 6, pass 6, page ...0.1...
s. a35, b27, c70, d35, f49, g11, h54, j3, i6
w.
k = e0
; list of slang-names in global block and pages, where defined:
; a0 5, a5 5, a10 7, a15 19, a20 3, a25 , a30 20
; a1 4, a6 16, a11 10, a16 18, a21 18, a26 , a31 12
; a2 4, a7 5, a12 , a17 19, a22 15, a27 17, a32 12
; a3 5, a8 5, a13 14, a18 15, a23 16, a28 17, a33 8
; a4 5, a9 7, a14 11, a19 21, a24 18, a29 4, a34 8
; a35 13,
; b0 , b4 , b8 , b12 , b16 , b20 5, b24
; b1 , b5 , b9 , b13 , b17 , b21 15, b25 20
; b2 , b6 , b10 , b14 , b18 , b22 15, b26 20
; b3 , b7 , b11 , b15 , b19 5, b23 15, b27 20
; c0 4, c10 10, c20 9, c30 8, c40 14, c50 21, c60 20
; c1 7, c11 9, c21 12, c31 8, c41 14, c51 3, c61 20
; c2 8, c12 11, c22 14, c32 8, c42 15, c52 3, c62 20
; c3 8, c13 10, c23 12, c33 8, c43 17, c53 7, c63 11
; c4 8, c14 7, c24 12, c34 13, c44 8, c54 9, c64 11
; c5 9, c15 11, c25 12, c35 13, c45 18, c55 9, c65 11
; c6 9, c16 11, c26 14, c36 13, c46 18, c56 20, c66 12
; c7 9, c17 11, c27 13, c37 8, c47 11, c57 20, c67 11
; c8 10, c18 11, c28 12, c38 13, c48 19, c58 20, c68 7
; c9 10, c19 9, c29 13, c39 13, c49 21, c59 20, c69 13, c70 3
; d0 4, d6 14, d12 14, d18 17, d24 21, d30 21
; d1 4, d7 6, d13 16, d19 17, d25 21, d31 17
; d2 4, d8 11, d14 16, d20 , d26 21, d32 9
; d3 5, d9 11, d15 17, d21 18, d27 21, d33 9
; d4 , d10 14, d16 17, d22 18, d28 21, d34 11
; d5 15, d11 14, d17 17, d23 21, d29 21, d35 7
; f0 1, f7 1, f14 21, f21 1, f28 , f35 1, f42 1, f49 1
; f1 1, f8 1, f15 , f22 , f29 , f36 1, f43 1
; f2 1, f9 1, f16 1, f23 , f30 1, f37 1, f44 1
; f3 1, f10 , f17 , f24 , f31 1, f38 1, f45 1
; f4 1, f11 1, f18 , f25 , f32 1, f39 1, f46 1
; f5 1, f12 , f19 , f26 , f33 1, f40 1, f47 1
; f6 1, f13 21, f20 , f27 , f34 1, f41 1, f48 1
; g0 , g2 24, g4 33, g6 33, g8 26, g10 23
; g1 27, g3 , g5 33, g7 26, g9 26, g11
; h0 , h7 2, h14 2, h21 2, h28 , h35 2, h42 , h49 2
; h1 , h8 2, h15 , h22 2, h29 , h36 2, h43 2, h50 2
; h2 , h9 2, h16 2, h23 2, h30 , h37 2, h44 2, h51 2
; h3 2, h10 2, h17 2, h24 , h31 2, h38 2, h45 2, h52 2
; h4 2, h11 2, h18 2, h25 , h32 , h39 2, h46 2, h53 2
; h5 2, h12 2, h19 2, h26 , h33 2, h40 2, h47 2, h54 2
; h6 2, h13 , h20 2, h27 , h34 , h41 2, h48 2,
; i0 6, i1 6, i2 6, i3 6, i4 20, i5 20, i6 20
; j0 1, j1 6, j2 6, j3 6
\f
; rc 23.1.1971 algol 6, pass 6, page ...1...
j0: g5 ; no of byes in pass 6
h. d0, 6<1 + 0 ; entry , passno<1 + scan direction
w. ;
0<12 + 0 ; control word (part 0 and 1)
f0: 0<12 + 0 ; control word (part 2 and 3)
f1: 0 ; operator stack pointer
f2: 0 ; operand stack pointer
f3: 0 ; pseudo stack pointer
f30=1<0 ; boolean
f31=1<1 ; long
f32=1<2 ; real
f33=1<3 ; integer
f34=1<4 ; string
f35=1<5 ; label
f36=1<6 ; no type
f37=1<7 ; array field
f38=1<8 ; field
f39=1<9 ; zone
f40=1<10 ; zone array
f45=127 ; all types
f46= 15 ; all declarable types
f4: 1<17-1 ; undefined operand, standard operand mask
f6: 127 ; all type mask
f7: 1<16 ; expression mask
f8: f32+f34 ; real-string mask
f9: 1<15 ; variable mask
f11: 47<9 ; begin list mask
f16: 0 ;
f5: 0<12 + 0 ; no.operands in line, no.zones specs
f21: 1<15+f33 ; variable and integer
f41: 1<11 ; array
f42: 1<12 ; parameter procedure
f43: 1<13 ; no parameter procedure
f44: 1<14 ; formal procedure
f47: f46 ; all declarable types
f48: -1<14 ; formal proc and undefined operand
f49: f39+f32 ; zone and real
\f
; rc 15.2.1971 algol 6, pass 6, page ...2...
h3 = 0 ; output base for operators
h4 = h3 + 107 ; call no param output value
h5 = h3 + 38 ; not (-,) output value
h6 = 145 ; if operator table value
h7 = 146 ; while elem do operator table value
h8 = h3 + 99 ; begin param output value
h9 = h3 + 106 ; end call output value
h10 = h3 + 100 ; end subscripts one output value
h11 = h3 + 101 ; end subscripts more output value
h12 = h3 + 105 ; zone indexing output value
h14 = 336 ; no.zones error spec operator table index
h16 = h3 + 118 ; trouble output value
h17 = 144 ; output base for operands
h18 = h3 + 102 ; first comma output value
h19 = 148 ; then - of ex operator table index
h20 = h3 + 113 ; end zone decl output value
h21 = h3 + 97 ; end value param output value
h22 = h3 + 96 ; end name param output value
h23 = h3 + 98 ; end addr param output value
h31 = h3 + 127 ; convert top real to int output value
h33 = h3 + 128 ; convert top real to long output value
h35 = h3 + 124 ; convert top int to real output value
h36 = h3 + 130 ; convert nexttop int to real output value
h37 = h3 + 123 ; convert top int to long output value
h38 = h3 + 129 ; convert nexttop int to long output value
h39 = h3 + 126 ; convert top long to real output value
h40 = h3 + 131 ; convert nexttop long to real output value
h41 = h3 + 125 ; convert top long to int output value
h43 = h3 + 132 ; field boolean output value
h44 = h3 + 134 ; field long output value
h45 = h3 + 135 ; field real output value
h46 = h3 + 133 ; field integer output value
h47 = h3 + 136 ; array field boolean output value
h48 = h3 + 138 ; array field long output value
h49 = h3 + 139 ; array field real output value
h50 = h3 + 137 ; array field integer output value
h51 = h3 + 140 ; field subscr boolean output value
h52 = h3 + 142 ; field subscr long output value
h53 = h3 + 143 ; field subscr real output value
h54 = h3 + 141 ; field subscr integer output value
\f
; rc 15.3.1971 algol 6, pass 6, page ...3...
c51: al w1 0 ; end external: bytes out := 0;
jl. a20. ; goto end bytes;
c52: al w1 4 ; end pass: bytes out := 4;
a20: jl. w3 e2. ; endbytes:
al w0 x2 ; for w1 := bytes out step 1 until 6 do
jl. w3 e3. ; outbyte(inbyte);
al w1 x1+1 ;
se w1 6 ;
jl. a20. ;
sn w2 0 ; if last inbyte = 0 then goto next pass;
jl. e7. ;
ls w2 1 ;
wm w2 2 ;
rs. w2 f0. ; control word := 12*no.stdprocs;
al w1 0 ;
a21: jl. w3 e2. ; for w1 := 1 step 1 until controlword do
al w0 x2 ; outbyte(inbyte);
jl. w3 e3. ;
al w1 x1+1 ;
se. w1 (f0.) ;
jl. a21. ;
jl. e7. ; goto next pass;
c70: rl. w0 f0.-2 ; delete call:
rl. w1 (f2.) ; w0:=part 1(control word);
sl w1 f45+1 ; w1:=top(operand stack);
jl. w3 d3. ; if kind <> 0 then
bz. w0 f0. ; check operand;
jl. w3 e3. ; outbyte(part 3(control word));
jl. c28. ; goto decrease operand stack;
\f
; jz 1979.06.22 algol 8, pass 6, page ...4...
w.
d0 = k - j0 ; entry pass 6
al. w2 g2. ; start pass 6:
al w2 x2+g6 ;
rs. w2 f1. ; operator stack pointer := bottom;
rl. w0 e9.+4 ;
rs. w0 f2. ; operand stack pointer := bottom;
jl. w3 e2. ;
al w0 x2 ; inbyte(no of own bytes);
jl. w3 e3. ; outbyte;
c0: jl. w3 e2. ; inbyte:
al w2 x2-198 ; byte := inbyte - 198;
ls w2 2 ; get table index:
dl. w3 x2+g1. ; control word :=
ds. w3 f0. ; input table ( byte*4);
d1: dl. w1 (f1.) ; priority check:
sl w0 x2 ; if priority(operator stack top) > priority(contr.word)
jl. a0. ; then goto unstacking actions;
d2: bz w0 7 ; test control word:
so w0 1<2 ; if stack bit(control word) = 1 then
jl. a1. ; begin
rl. w1 f1. ; operator stack pointer :=
al w1 x1+4 ; operator stack pointer + 4;
sl. w1 (f2.) ; if operator stack and operand stack collide
jl. d23. ; then goto stack overflow;
rs. w1 f1. ;
bz. w2 f0. ; operator stack(top) :=
dl. w3 x2+g2. ; operator table(part 3(control word));
ds w3 x1 ; end;
a1: so w0 1<1 ; if output bit(control word) = 1 then
jl. a2. ; begin
bz. w0 f0.-1 ; byte := output part(control word);
jl. w3 e3. ; outbyte;
; end;
a2: bz. w2 f0.+1 ; action no := part 4(control word);
a29: ls w2 -5 ; jump: action no := action no shift (-5);
bl. w2 x2+g10. ; action := action table(action no);
jl. x2+c0. ; switch to action;
\f
; rc 15.04.1971 algol 6, pass 6, page ...5...
a0: am. (f1.) ; unstacking actions:
bz w0 1 ; bits := part 4(operator stack(top));
so w0 1<4 ; if typecheckbit <> 1 then
jl. a4. ; goto action jump;
rl. w2 f2. ; w2 := operand stack pointer;
so w0 1<3 ; if (top+1) bit = 1 then
jl. a3. ; begin
al w2 x2+2 ; w1 := top(operand stack);
rs. w2 f2. ; operand stack pointer :=
am -2 ; operand stack pointer + 2;
a3: rl w1 x2 ; end
am. (f1.) ; else w1 := top(operand stack);
rl w0 -2 ; w0 := top(operator stack);
jl. w3 d3. ; check operand;
sn. w1 (f4.) ; if operand = undef then
rs. w1 (f2.) ; top(operand stack):= undef;
a4: am. (f1.) ; action jump:
bz w2 1 ; action no := part 4(operator stack top);
jl. a29. ; goto jump;
; procedure check operand;
; call: w0=mask; w1=operand; jl. w3 d3.
; exit: w1=kind and type(may be undef after error)
d3: rs. w3 b19. ; check operand: save return;
sn. w1 (f4.) ; if operand = undef then
jl x3 ; return;
la w1 0 ; w1 := mask and operand;
sz w1 f45 ; if type correct then goto kind check;
jl. a5. ;
a8: jl. w2 d25. ; type error: type error;
rl. w1 f4. ; w1 := undef;
jl. (b19.) ; return;
a5: sh w1 f45 ; kind check:
jl. a8. ; if kind incorrect then goto type error;
sz. w1 (b20.) ; if no parproc or formal proc
jl. a7. ; then goto convert operand;
jl. (b19.) ; return;
a7: al w0 h4 ; convert operand:
jl. w3 e3. ; outbyte(call no param);
la. w1 f6. ; w1 := w1 and all type;
wa. w1 f7. ; w1 := w1+expression;
jl. (b19.) ; return;
b19: 0 ; saved return
b20: 1<13+1<14 ; mask (no parproc or formal proc)
\f
; rc 18.1.1971 algol 6, pass 6, page ...6...
; procedure arith pair;
; call: w0=left operand; w1=right operand;
; jl. w2 d7.
; exit: w1=type of result;
; the procedure may output a convert (top or nexttop) operator;
d7: la. w0 i2. ; arith pair:
la. w1 i2. ; comment: w0=left op.; w1=right op.;
ns w0 1 ; compute table index:
bl w0 1 ; normalize(left operand and arith type mask);
ba. w0 j3. ;
wm. w0 i3. ; row := (exponent+21)*no.arith types;
ns w1 3 ; normalize(right operand and arith type mask);
bl w1 3 ; column := exponent;
am (0) ;
j3 = k + 1 ; 21 ;
al w1 x1+21 ; index := row + column + 21;
bl. w0 x1+i0. ; byte := convert operand(index);
bz. w1 x1+i1. ; arith pair := arith pair result(index);
se w0 -1 ; if operand types not the same
jl. w3 e3. ; then outbyte;
jl x2 ; return;
; in the following two matrix-tables, the row-index is the left operand
; and the column-index the right operand
; convert operator table(output value):
h. ; long real integer ;
i0: -1, h40, h37 ; long
h39, -1, h35 ; real
j1: h38, h36, -1 ; integer
j2 = k - j1
; arith pair result table:
; long real integer ;
i1: f31, f32, f31 ; long
f32, f32, f32 ; real
f31, f32, f33 ; integer
w.
i2: f31+f32+f33 ; arith type mask
i3: j2 ; no of arith types
\f
; rc 11.3.1971 algol 6, pass 6, page ...7...
c53: rl. w1 f4. ; load undefined operand: w1 := undef;
c14: rs. w1 (f2.) ; store operand: operand stack(top) := operand;
c1: am. (f1.) ; bit actions:
bz w1 1 ; bits := part 4(operator stack top);
so w1 1<2 ; test no result:
jl. a9. ; if no result bit = 1 then
rl. w2 f2. ; unstack operand:
al w2 x2+2 ; operand stack pointer :=
rs. w2 f2. ; operand stack pointer + 2;
a9: so w1 1<1 ; output self:
jl. a10. ; if output self bit = 1 then
bz. w0 (f1.) ; begin byte := part 3(operator stack top);
jl. w3 e3. ; outbyte;
; end;
a10: rl. w2 f1. ; unstack operator:
al w2 x2-4 ; operator stack pointer :=
rs. w2 f1. ; operator stack pointer - 4;
dl. w3 f0. ; (w2,w3) := control word;
so w1 1<0 ; if terminate unstack bit = 0 then
jl. d1. ; goto priority check;
jl. d2. ; goto test control word;
d35: rx. w1 f1. ; stack operator:
al w1 x1+4 ; operator stack pointer :=
sl. w1 (f2.) ; operator stack pointer + 4;
jl. d23. ; if operator stack and operand stack collide
ds w0 x1 ; then goto stack overflow;
rx. w1 f1. ; top(operator stack) := (w3,w0);
jl x2 ; return;
c68: al w0 2 ; end else ex: end case ex:
rl. w1 (f2.) ; type:=2; operand:=top(operand stack);
sz w1 f30+f33 ; if operand=boo or int then
al w0 0 ; type:=0;
sz w1 f32+f33 ; if operand=real or integer then
ba. w0 1 ; type := type+1;
jl. w3 e3. ; outbyte(type);
jl. c0. ; goto inbyte;
\f
; rc 18.1.1971 algol 6, pass 6, page ...8...
a33: rl. w1 f2. ; stack and output operand:
al w1 x1-2 ; operand stack pointer :=
sh. w1 (f1.) ; operand stack pointer - 2;
jl. d23. ; if operand stack and operator stack collide
rs. w1 f2. ; then goto stack overflow;
rl. w0 f0.-2 ; stack operand:
la. w0 f4. ; item := first word(control word) and standard;
rs w0 x1 ; top(operand stack) := item;
bz. w1 f5. ; count operands:
al w1 x1+1 ; no.operands in line :=
hs. w1 f5. ; no.operands in line + 1;
a34: bz. w0 f0. ; output operand:
jl. e3. ; outbyte(part 3(control word)); return;
c31: jl. w3 e2. ; inout 4:
al w0 x2 ;
jl. w3 e3. ; outbyte(inbyte);
c33: jl. w3 e2. ; inout 3:
al w0 x2 ;
jl. w3 e3. ; outbyte(inbyte);
c30: jl. w3 e2. ; inout 2:
al w0 x2 ;
jl. w3 e3. ; outbyte(inbyte);
c32: jl. w3 e2. ; inout 1:
al w0 x2 ;
jl. w3 e3. ; outbyte(inbyte);
jl. c0. ; goto inbyte;
c2: rl. w1 f1. ; parproc:
rs. w1 f3. ; pseudotop := operator stack pointer;
c3: am c30-c31 ; operand and word literal: set return(inout 2) else
c37: am c31-c32 ; double word literals: set return(inout 4) else
c44: al. w3 c32. ; boolean literal: set return(inout 1);
jl. a33. ; goto stack and output operand;
c4: al. w3 c31. ; string next: set return(inout 4);
jl. a34. ; goto output operand;
\f
; rc 21.1.1971 algol 6, pass 6, page ...9...
c11: al w0 h5 ; imply:
jl. w3 e3. ; outbyte(-,);
c5: rl. w1 (f2.) ; diadic input:
rl. w0 f0.-2 ; w1 := top(operand stack);
jl. w3 d3. ; w0 := first word(control word);
la. w1 f6. ; check operand;
wa. w1 f7. ; top(operand stack top) :=
rs. w1 (f2.) ; type bits + expression;
jl. c0. ; goto inbyte;
c54: rl. w1 f1. ; then expression:
bz w0 x1-1 ;
se w0 h6 ; if top(operator stack )= if
jl. c55. ; then
am h19 ;
dl. w3 g2. ; top(operator stack) :=
ds w3 x1 ; then-of-expression;
c55: rl. w0 f0.-2 ; monadic input:
rl. w1 (f2.) ; w0 := part 1(control word);
jl. w3 d3. ; w1 := top(operand stack);
bz. w0 f0. ; check operand;
jl. w3 e3. ; outbyte(part 3(control word));
jl. c28. ; goto decrease operand stack;
c6: rl. w0 (f2.) ; arith operator:
sn. w0 (f4.) ; if top(operand stack) = undef
jl. c1. ; then goto bit actions;
jl. w2 d7. ; arith pair;
lo. w1 f7. ; top(operand stack) :=
rs. w1 (f2.) ; arith pair result + expression;
jl. c1. ; goto bit actions;
c7: al w3 f33 ; extract:
wa. w3 f7. ; top(operand stack) :=
rs. w3 (f2.) ; integer + expression;
c19: al. w3 c1. ; round top: set return(bit actions);
d32: sz w1 f33 ; round: if operand = integer then return;
jl x3 ; byte := convert top(long to integer);
al w0 h41 ; if operand = real then
sz w1 f32 ; byte := convert top(real to integer);
al w0 h31 ; outbyte(byte);
jl. e3. ; return;
c20: al. w3 c1. ; float top: set return(bit actions);
d33: sz w1 f32 ; float: if operand = real then return;
jl x3 ; byte := convert top(long to real);
al w0 h39 ; if operand = integer then
sz w1 f33 ; byte := convert top(integer to real);
al w0 h35 ; outbyte(byte);
jl. e3. ; return;
\f
; rc 05.04.1971 algol 6, pass 6, page ...10...
c8: rl. w1 (f2.) ; divide-exponentiation:
rl. w0 f0.-2 ; w1 := operand; w0 := mask;
jl. w3 d3. ; check operand;
jl. w3 d33. ; float;
al w1 f32 ;
wa. w1 f7. ; top(operand stack) :=
rs. w1 (f2.) ; real + expression;
jl. c0. ; goto inbyte;
c13: la. w1 f6. ; abs-neg:
wa. w1 f7. ; top(operand stack):=
rs. w1 (f2.) ; type + expression;
c9: sz w1 f33 ; modify output:
jl. c1. ; if operand = integer then
bz. w3 (f1.) ; goto bit actions;
so w1 f31 ; if operand = long then
am 1 ; incr := 1 else incr := 2;
al w3 x3+1 ; part 3(operator stack top) :=
hs. w3 (f1.) ; part 3(operator stack top) + incr;
jl. c1. ; goto bit actions;
c10: rl. w0 (f2.) ; rel pair:
sn. w0 (f4.) ; if top(operand stack) = undef
jl. c1. ; then goto bit actions;
jl. w2 d7. ; arith pair;
al w1 f30 ;
wa. w1 f7. ; top(operand stack) :=
rs. w1 (f2.) ; boolean + expression;
bz. w0 f0.+1 ; get relation variant:
so w0 1<0 ; if (while elem,do) bit of control word = 0
jl. c1. ; then goto bit actions;
am. (f1.) ;
bz w1 -4 ;
al w0 6 ; relation variant := 6;
sn w1 h6 ; if nexttop(operator stack) = <if,else>
jl. a11. ; then goto store variant;
se w1 h7 ; if nexttop(operator stack) <> <while>
jl. c1. ; then goto bit actions;
al w0 12 ; relation variant := 12;
a11: ba. w0 (f1.) ; store variant:
se w1 h6 ; part 3(control word) :=
am -1 ; part 3(operator stack top) + relation variant;
hs. w0 f0. ;
al w1 0 ;
jl. a10. ; goto unstack operator;
\f
; rc 21.1.1971 algol 6, pass 6, page ...11...
c12: am f33-f32 ; entier: type := integer; goto set operand;
c15: am f32-f34 ; real: type := real; goto set operand;
c63: am f34-f31 ; string: type := string; goto set operand;
c64: al w1 f31 ; long: type := long;
wa. w1 f7. ; set operand: operand := type + expression;
jl. c14. ; goto store operand;
c16: rl. w1 (f2.) ; first assign:
sz w1 f46 ; if operand type = declarable
jl. a14. ; then goto variable check;
d9: jl. w2 d25. ; assign error:
rl. w1 f4. ; type error; operand := undef;
d8: rs. w1 (f2.) ; restore assign variable:
jl. c0. ; top(operand stack) := operand; goto inbyte;
a14: sz. w1 (f9.) ; variable check:
jl. c0. ; if operand kind = variable then goto inbyte;
jl. d9. ; goto assign error;
c17: am. (f2.) ; assign:
rl w1 2 ; w1 := nexttop(operand stack);
sn. w1 (f4.) ; if w1 = undef then
jl. d8. ; goto restore assign variable;
rl. w0 (f2.) ; w0 := top(operand stack);
sn w0 x1 ; if w0 = w1 then
jl. c0. ; goto inbyte;
jl. d9. ; goto assign error;
c18: bz. w2 f0. ; prep assign: index := prep assign boolean;
rl. w0 (f2.) ; operand := top(operand stack);
sz w0 f31+f33 ; if operand = long or operand = integer
al w2 x2+4 ; then index := index + 4;
sz w0 f31+f32 ; if operand = long or operand = real
al w2 x2+8 ; then index := index + 8;
sn. w0 (f4.) ; if operand = undef
al w2 x2+4 ; then index := index + 4;
dl. w0 x2+g2. ; check operator := operator table(index);
jl. w2 d35. ; stack operator(check operator);
jl. c0. ; goto inbyte;
c67: al w3 f31 ; extend:
wa. w3 f7. ; top(operand stack) :=
rs. w3 (f2.) ; long + expression;
c65: al. w3 c1. ; long top: set return(bit actions);
d34: sz w1 f31 ; long:
jl x3 ; if operand = long then return;
al w0 h33 ; byte := convert top(real to long);
sz w1 f33 ; if operand = integer then
al w0 h37 ; byte := convert top(integer to long);
jl. e3. ; outbyte(byte); return;
c47: al w3 f33 ; round:
wa. w3 f7. ; top(operandstack) :=
rs. w3 (f2.) ; integer + expression;
jl. c19. ; goto round top;
\f
; rc 17.3.1971 algol 6, pass 6, page ...12...
c21: rl. w1 f2. ; else ex - case comma:
al w1 x1+2 ; operand := top(operand stack);
rs. w1 f2. ; unstack operand;
rl w1 x1-2 ;
la. w1 f6. ; get check operator:
ns w1 3 ;
bl w1 3 ;
al w1 x1+22 ; index :=
ls w1 2 ; typebit*4;
dl. w0 x1+g3. ; check operator := operator table(index+checkbase);
jl. w2 d35. ; stack operator;
jl. c0. ; goto inbyte;
c23: jl. w3 d33. ; real check operator: float;
al w1 f32 ; operand := real;
jl. a31. ; goto add expr bit;
c66: so w1 f32 ; long check operator:
al w1 f31 ; if operand <> real then operand := long;
la. w1 f6. ; operand := operand and standard type mask;
a31: wa. w1 f7. ; add expr bit: operand := operand + expression;
jl. c14. ; goto store operand;
c24: rl. w2 (f2.) ; integer div - mod:
sn. w2 (f4.) ; if top(operand stack) = undef
jl. c1. ; then goto bitactions;
al w0 h38 ; byte := convert nexttop(integer to long);
sz w2 f33 ; if nexttop(operand stack) = integer
jl. w3 e3. ; then outbyte;
al w3 0 ; get variant: variant := 0;
sz w1 f31 ; if top(operand stack) <> long then
jl. a32. ; begin
so w2 f31 ; if nexttop(operand stack) = long then
am 1 ; variant := 1 else variant := 2;
al w3 1 ; end;
a32: al w1 f31 ; modify nexttop operand:
sn w3 2 ; operand := long;
al w1 f33 ; if variant = 2 then operand := integer;
ba. w3 (f1.) ; part 3(top(operator stack)) :=
hs. w3 (f1.) ; part 3(top(operator stack)) + variant;
jl. a31. ; goto add expr bit;
c25: rl. w1 f1. ; decrease operator stack:
al w1 x1-4 ; operator stack pointer :=
rs. w1 f1. ; operator stack pointer - 4;
jl. c0. ; goto inbyte;
c28: rl. w1 f2. ; decrease operand stack:
al w1 x1+2 ; operand stack pointer :=
rs. w1 f2. ; operand stack pointer + 2;
jl. c0. ; goto inbyte;
\f
; rc 1977.11.03 algol 6, pass 6, page ...13...
c27: rl. w0 (f2.) ; for pair:
sn. w0 (f4.) ; if operand = undef
jl. c1. ; then goto bit actions;
sz w0 f31 ; if top(operand stack) = long then
jl. c65. ; goto long top;
sz w0 f32 ; if top(operand stack) = real then
jl. c20. ; goto float top;
jl. c19. ; goto round top;
c29: rl. w1 (f2.) ; goto:
so w1 f35 ; if top(operand stack) <> label
jl. w2 d25. ; then type error;
jl. c28. ; goto decrease operand stack;
c34: am 2 ; vanished operand: increment := 1 else
c35: al w1 -1 ; internal operand: increment := -1;
a35: ; count operand:
ba. w1 f5. ; no.operands in line :=
hs. w1 f5. ; no.operands in line + increment;
jl. c0. ; goto inbyte;
c36: al w1 0 ; newline:
hs. w1 f5. ; no.operands in line := 0;
jl. w3 e1. ; carret;
jl. c0. ; goto inbyte;
c38: jl. w3 e2. ; dope description:
al w0 x2 ;
jl. w3 e3. ; outbyte(inbyte);
jl. w3 e2. ;
rs. w2 f3. ; no.array elements := inbyte;
al w0 x2 ;
jl. w3 e3. ; outbyte(no.array elements);
jl. c0. ; goto inbyte;
c39: rl. w1 f3. ; specifications input:
al w1 x1+4 ; pseudo top := pseudo top + 4;
sl. w1 (f2.) ; if pseudo top >= operand stack pointer
jl. d23. ; then goto stack overflow;
rs. w1 f3. ; stack spec operator:
bz. w2 f0. ; operator stack(pseudo top) :=
dl. w3 x2+g2. ; operator table(part 3(control word));
ds w3 x1 ;
jl. c0. ; goto inbyte;
c69: rl. w0 (f2.) ; until:
se. w0 (f4.) ; if operand <> undef
jl. w2 d7. ; then arith pair;
jl. c1. ; goto bit actions;
\f
; rc 05.04.1971 algol 6, pass 6, page ...14...
c22: al w1 h23 ; spec addr general:
rl. w0 (f2.) ; param := end addr param;
sz. w0 (f9.) ; if param = variable then
jl. a13. ; goto store end param;
al w1 h22 ; param := end name param;
so. w0 (f7.) ; if param <> expression then
jl. a13. ; goto store end param;
so w0 f34 ; if param <> string then
al w1 h21 ; param := end value param;
a13: hs. w1 (f1.) ; store end param: end param := param;
c41: bz. w0 f0.-1 ; spec general:
se w0 h10 ; if inbyte = end subscr one
sn w0 h11 ; or inbyte = end subscr more
jl. c40. ; then goto spec;
al. w0 d5. ; operand proc addr :=
rs. w0 b21. ; check name operand addr;
rl. w2 f1. ; w2 := operator stack pointer;
jl. d12. ; goto save end param;
c26: al. w0 d3. ; spec value:
jl. d10. ; operand proc addr := check operand addr else
c40: al. w0 d5. ; spec:
d10: rs. w0 b21. ; operand proc addr :=
rl. w2 f1. ; check name operand addr;
al w1 x2-4 ; operator stack pointer :=
rs. w1 f1. ; operator stack pointer-4;
d12: bz w0 x2 ; save end param:
rs. w0 b22. ; end param := part 3(oldtop(operator stack));
rl. w1 (f2.) ;
sn. w1 (f4.) ; if top(operand stack) = undef
jl. d6. ; then goto no type param;
rl w0 x2-2 ; w0 := first word(top(operator stack));
jl. w3 (b21.) ; operand proc;
la. w1 f6. ; type := w1 and all type mask;
sn. w1 (f6.) ; if type = undef then
d6: al w1 0 ; no type param: type := 0;
d11: rl. w0 b22. ; out end param:
jl. w3 e3. ; outbyte(end param);
sz w1 f36 ; if type = no type then
al w1 0 ; type := 0;
\f
; rc 2.1.1971 algol 6, pass 6, page ...15...
sh w1 4 ; if type <= 4 then
jl. a18. ; goto output parameter type;
ls w1 -2 ; type :=
al w1 x1+1 ; type//4 + 1;
a18: bz. w0 x1+b23. ; output parameter type:
jl. w3 e3. ; outbyte(newtype(type));
al w0 h8 ; output begin param or end call:
bz. w1 f0.-1 ; byte := begin param;
se w1 h10 ; if inbyte = end subscr one
sn w1 h11 ; or inbyte = end subscr more
al w0 h9 ; then byte := end call;
jl. w3 e3. ; outbyte(byte);
jl. c28. ; goto decrease operand stack;
b21: 0 ; operand proc addr
b22: 0 ; end param
; newtype table:
b23: 0<12 + 1<0 ; no type , boolean
4<12 + 2<0 ; long , integer
3<12 + 0 ; real , string
0<12 + 0 ; not used , not used
0<12 + 7<0 ; not used , label
d5: la w1 0 ; check name operand:
sh w1 f45 ; if kind incorrect then
jl. a22. ; goto param error;
la. w1 f6. ; type check:
sn. w1 (f6.) ; if type = undef then
jl. d6. ; goto no type param;
se w1 0 ; if type correct then
jl. d11. ; goto out end param;
a22: jl. w2 d25. ; param error: type error;
jl. d6. ; goto no type param;
c42: jl. w3 e2. ; begin list:
rl. w0 (f2.) ; w2 := no.elements;
rl w1 0 ; w0 := w1 := top(operand stack);
sn. w0 (f4.) ; if operand = undef then
jl. a23. ; goto output begin call;
la. w1 f11. ; operand kind := w1 and begin list mask;
la. w0 f6. ; operand type := w0 and all type mask;
sz. w1 (f41.) ; if kind = array then
jl. d13. ; goto array;
sz w1 f39 ; if kind = zone then
jl. d14. ; goto zone;
sz w1 f40 ; if kind = zone array then
jl. d15. ; goto zone array;
\f
; rc 15.3.1971 algol 6, pass 6, page ...16...
so w0 f36 ; procedure call: if type = no type
wa. w0 f7. ; then kind:=0 else kind := expr;
rs. w0 (f2.) ; top(operand stack) := kind + type;
a23: bz. w0 f0.-1 ; output begin call:
jl. w3 e3. ; outbyte(begin call);
al w0 x2 ;
jl. w3 e3. ; outbyte(no of parameters);
al w0 h8 ;
jl. w3 e3. ; outbyte(begin param);
sz. w1 (f48.) ; if kind = formal proc or undef
jl. d18. ; then goto begin call formal;
sn w1 0 ; if kind = 0 then
jl. d17. ; goto begin call error;
rl. w1 (f2.) ;
sz w1 f35 ; if top(operand stack) = label
jl. d16. ; then goto switch;
rl. w1 f3. ; check no of parameters:
rl w0 2 ; w1 := pseudo top;
ws. w0 f1. ;
ls w0 -2 ; no.specs := (pseudo top - top)//4;
sn w0 x2 ; if no.specs = no.parameters then
jl. a6. ; goto store pseudo top;
sl w0 x2 ; if no.specs >= no.parameters then
jl. d17. ; goto begin call error;
am. (f1.) ;
bl w0 5 ; w0 := part 4(top(operator stack));
sn w0 g7 ; if spec general then
jl. a6. ; goto store pseudo top;
se w0 g8 ; if -,spec addr general then
jl. d17. ; goto begin call error;
a6: rs. w1 f1. ; store pseudo top:
jl. c0. ; operator stack pointer := pseudo top;
; goto inbyte;
d13: wa. w0 f9. ; array:
rs. w0 (f2.) ; top(operand stack) := variable + type;
se. w2 (f3.) ; if no.elements <> no.subscripts
jl. w2 d27. ; then subscript error;
al w1 4 ; addr incr := 4;
jl. d19. ; goto stack begin element;
d14: wa. w0 f9. ; zone:
rs. w0 (f2.) ; top(operand stack) := variable+type;
se w2 1 ; if no.elements then
jl. w2 d28. ; zone error;
al w1 8 ; addr incr := 8;
jl. d19. ; goto stack begin element;
\f
; rc 5.1.1971 algol 6, pass 6, page ...17...
d15: rl. w1 f9. ; zone array: operand := variable;
sn w2 1 ; if no.elements = 1 then
al w1 f39 ; operand := zone;
al w1 x1+f32 ; operand := operand + real;
rs. w1 (f2.) ; top(operand stack) := operand;
sl w2 3 ; if no.elements >= 3 then
jl. w2 d28. ; zone error;
al w1 12 ; addr incr := 12;
jl. d19. ; goto stack begin element;
d16: al w1 16 ; switch: addr incr := 16;
sn w2 1 ; if no.elements = 1 then
jl. d19. ; goto stack begin element;
d17: jl. w2 d26. ; begin call error: call error;
d18: al w1 0 ; begin call formal: addr incr := 0;
d19: ba. w1 f0. ; stack begin element:
d31: dl. w0 x1+g2. ; index := addr incr + part 3(control word);
jl. w2 d35. ; stack operator(operator table(index));
jl. c0. ; goto inbyte;
c43: rl. w1 (f2.) ; zone subscripts:
am. (f1.) ; w1 := top(operand stack);
rl w0 -2 ; w0 := first word(top(operator stack));
jl. w3 d3. ; check operand;
jl. w3 d32. ; round;
bz. w1 f0.-1 ;
bz. w0 (f1.) ; w0 := part 3(operator stack top);
sn w1 h10 ; if list one
jl. a27. ; then goto unstack zone list;
sn w1 h18 ; if first comma then
jl. a28. ; goto out list delimiter;
al w0 h12 ; w0 := end record;
se w1 h11 ; if -,end list more then
jl. a28. ; goto out list delimiter;
a27: rl. w1 f1. ; unstack zone list:
al w1 x1-4 ; operator stack pointer :=
rs. w1 f1. ; operator stack pointer - 4;
a28: jl. w3 e3. ; out list delimiter:
jl. c28. ; outbyte(w0); goto decrease operand stack;
\f
; rc 2.1.1971 algol 6, pass 6, page ...18...
c45: jl. w3 e2. ; decl zone:
hs. w2 f5.+1 ; save no.commas := inbyte;
jl. w3 e2. ;
al w0 x2 ; no.zones := inbyte;
jl. w3 e3. ; outbyte(no.zones);
jl. w3 e2. ;
al w0 x2 ; bl.rel := inbyte;
jl. w3 e3. ; outbyte(bl.rel);
bz. w1 f5.+1 ;
sn w1 2 ; if no.commas = 2 then
jl. d21. ; goto stack pseudospecs 1;
jl. w2 d29. ; zone decl. error;
al w2 h14+4 ; w2 := first zone comma error spec addr;
a16: bz. w1 f5.+1 ; zone error:
sn w1 0 ; if no.commas = 0 then goto inbyte;
jl. c0. ; no.commas := 0;
al w0 0 ;
hs. w0 f5.+1 ;
jl. d22. ; goto stack pseudospecs 2;
c46: jl. w3 e2. ; decl zone array:
hs. w2 f5.+1 ; no.commas := inbyte;
jl. w3 e2. ;
al w0 x2 ; no.zones := inbyte;
jl. w3 e3. ; outbyte(no.zones);
bz. w1 f5.+1 ;
sn w1 3 ; if no.commas = 3 then
jl. d21. ; goto stack pseudospec 1;
jl. w2 d29. ; zone decl. error;
al w2 h14 ; w2 := no.zones error spec addr;
jl. a16. ; goto zone error;
d21: bz. w2 f0. ; stack pseudospecs 1: w2 := spec addr;
d22: ls w1 2 ; stack pseudospecs 2:
wa. w1 f1. ; pseudo top := stackref :=
sl. w1 (f2.) ; 4*(no.commas) + operatos stack pointer;
jl. d23. ; if pseudo top >= operand stack top then
rs. w1 f3. ; goto stack overflow;
a24: dl. w0 x2+g2. ; stack pseudospec:
ds w0 x1 ; operator stack(stack ref) := operator table(w2);
al w1 x1-4 ; stackref := stackref - 4;
sh w2 h14+8 ; if w2 <=error spec + 4 then
al w2 x2+4 ; w2 := w2 + 4;
se. w1 (f1.) ; if stackref <> operator stack pointer
jl. a24. ; then goto stack pseudo spec;
rl. w1 f3. ; reset top:
rs. w1 f1. ; operator stack pointer := pseudo top;
jl. c0. ; goto inbyte;
\f
; rc 2.1.1971 algol 6, pass 6, page ...19...
c48: bz. w0 f5.+1 ; zone block proc:
sn w0 0 ; if no.commas = 0
jl. c1. ; then goto bitactions;
rl. w0 (f2.) ;
sn. w0 (f4.) ; if top(operand stack) = undef
jl. c1. ; then goto bit actions;
am. (f1.) ; check kind and type:
la w0 -2 ; kind-type := operand and operator mask;
so w0 f36 ; if type <> no type then
jl. a15. ; goto block proc error;
sz. w0 (f42.) ; if kind = parameter procedure then
jl. a17. ; goto block proc spec check;
so. w0 (f44.) ; if kind <> formal proc then
a15: jl. w2 d30. ; block proc error: block proc;
jl. c1. ; goto bit actions;
a17: rl. w0 f3. ; block proc spec check:
ws. w0 f1. ;
se w0 12 ; if no.specs <> 3 then
jl. a15. ; goto block proc error;
rl. w1 f1. ;
bz w0 x1+3 ;
so w0 f33 ; if third param <> integer
jl. a15. ; then goto block proc error;
bz w0 x1+7 ;
so w0 f33 ; if second param <> integer
jl. a15. ; then goto block proc error;
bz w0 x1+11 ;
so. w0 (f49.) ; if first param <> real zone
jl. a15. ; then goto block proc error;
jl. c1. ; goto bit actions;
\f
; rc 11.1.1971 algol 6, pass 6, page ...20...
; field operands and operators:
b25 = k + 1 ; outside field
c56: rl. w0 f21. ; field operand: if outside field
rs. w0 f0.-2 ; then begin kind(control word) := variable;
jl. c3. ; type(control word) := integer;
; end; goto stack and output operand;
c58: jl. w3 e2. ; begin list field input: skip(no of list elements);
am f21-f0+2 ; outside field := true else
c57: al w3 f0-2-b25+1; first point input: outside field:=false;
hs. w3 b25. ; not first point input:
c59: rl. w1 (f2.) ; w1 := top(operand stack);
rl. w0 f0.-2 ; w0 := kind-type(control word);
jl. w3 d3. ; check operand;
jl. c0. ; goto inbyte;
c60: dl. w3 g9. ; begin list field:
am. (f1.) ; nexttop(operator stack) :=
ds w3 -4 ; check operator(array field subscr);
al w2 -1<5 ; remove bits from control word:
la. w2 f0. ;
bz. w3 f0.-1 ;
se w3 h10 ; if latest inbyte = end list one
sn w3 h11 ; or latest inbyte = end list more
rs. w2 f0. ; then bits(control word) := 0;
jl. c19. ; goto round top;
c61: al. w3 i6. ; array field subscript: field operator:=field subscr;
jl. a30. ; goto modify top operand;
c62: al. w3 i4. ; first point: field operator := field;
so w1 f38 ; if kind <> simple field then
am f41-f9 ; kind := array else
a30: rl. w0 f9. ; modify top operand:
la. w1 f47. ; kind := variable;
lo w0 2 ; type := operand and declarable type mask;
rs. w0 (f2.) ; top(operand stack) := kind + type;
; output field operator:
ns. w1 b26. ; type no := normalize(kind-type and all type mask);
so. w0 (f9.) ; if kind <> variable then
am b27 ; type index := type no
b26 = k + 1 ; type no ; else
al w3 x3 ; type index := type index + 22;
bz w0 x3+22 ; byte := field operator(type index);
jl. w3 e3. ; outbyte;
al w3 f21-b25+1 ;
hs. w3 b25. ; outside field := true;
jl. c1. ; goto bit actions;
h. ; field operators (output values):
i4: h43, h44, h45, h46; simple field: boolean, long, real, integer
i5: h47, h48, h49, h50; array field : boolean, long, real, integer
i6: h51, h52, h53, h54; field subscr: boolean, long, real, integer
b27 = i5 - i4 ; field arr incr
w.
; action on not first point is: c14 (store operand)
\f
; fgs.jz 1986.02.18 algol 8, pass 6, page ...21...
f13: <:.:>
f14: <: :>
d23: al. w1 e10. ; stack overflow:
jl. e5. ; goto pass 0 alarm (<:stack:>);
c50: al w0 h16 ; undeclared:
jl. w3 e3. ; outbyte(trouble);
jl. c3. ; goto stack and output operand;
c49: jl. w3 e2. ; error:
bl w1 5 ; increment := signed byte;
sh w1 0 ; if increment <=0 then
jl. a35. ; goto count operand;
ls w2 1 ;
rl. w1 x2+g4. ; w1 := error text address;
al. w1 x1+g11. ;
al. w2 c0. ; set return(inbyte);
sz w1 1 ; if bit(23,text addr table) = 1 then
jl. a19. ; goto output error messages;
d24: al w0 h16 ; trouble:
jl. w3 e3. ; outbyte(trouble);
a19: rs. w1 f16. ; output error messages:
al. w1 f13. ;
jl. w3 e4. ; message(<:operand:>);
bz. w0 f5. ;
jl. w3 e14. ; write integer(no.operands in line);
32<12 + 3 ;
al. w1 f14. ;
jl. w3 e13. ; writespace;
rl. w1 f16. ;
jl. w3 e13. ; writetext(error identification);
al w0 1<10 ; set warning bit:
lo. w0 e29. ; modebit(warning) := true;
rs. w0 e29. ; comment: pass 0 variable;
jl x2 ; return;
d25: jl. w1 d24. ; type error:
<:type:> ;
d26: jl. w1 d24. ; call error:
<:call:> ;
d27: jl. w1 d24. ; subscript error:
<:subscripts:> ;
d28: jl. w1 d24. ; zone error:
<:zone:> ;
d29: jl. w1 d24. ; zone decl. error:
<:zone declaration:>;
d30: jl. w1 d24. ; block proc:
<:block proc:> ;
\f
; jz 1979.09.27 algol 8, pass 6, page ...22...
b. a70, b16, i17, j26 ; begin block tables
w. ;
; types:
i0 = 1<0 ; boolean
i1 = 1<1 ; long
i2 = 1<2 ; real
i3 = 1<3 ; integer
i4 = 1<4 ; string
i5 = 1<5 ; label
i6 = 1<6 ; no type
i7 = 7<1 ; all arith types
i8 = 63 ; all except no type
i9 = 127 ; all types
i10= i9-i5 ; all types except label
i11= i1+i3 ; long and integer
i12= i9-i6-i5 ; all types except label and no type
i13= i0+i1+i2+i3 ; all declarable types
i14= i2+i4 ; real and string
i15= i1+i4 ; long and string
i16= i1+i2 ; long and real
i17= i2+i3 ; real and integer
; kinds:
j7 = 1<7 ; array field
j8 = 1<8 ; field
j9 = 1<9 ; zone
j10= 1<10 ; zone array
j11= 1<11 ; array
j12= 1<12 ; parameter procedure
j13= 1<13 ; no parameter procedure
j14= 1<14 ; formal procedure
j15= 1<15 ; variable
j16= 1<16 ; expression
j17= j13+j14+j15+j16 ; no param proc, formal proc, variable, expression
j18= j12+j14+j16 ; parameter procedure, formal procedure, expression
j19= j13+j14 ; no param proc, formal proc
j20= j18-j14 ; param procedure, expression
j21= j7+j8 ; array field, field
j22= j9+j11 ; zone, array
j23= 1023<7 ; all kinds
j24= j12+j13+j14 ; all procedures
j25= j12+j14 ; param proc, formal proc
j26= j12+j16 ; param proc, expression
\f
; rc 15.3.1971 algol 6, pass 6, page ...23...
; priority:
b0 = 0<18, b1 = 1<18, b2 = 2<18, b3 = 3<18, b4 = 4<18, b5 = 5<18
b6 = 6<18, b7 = 7<18, b8 = 8<18, b9 = 9<18, b10=10<18, b11=11<18
b12=12<18, b13=13<18, b14=14<18, b15=15<18, b16=16<18
; action:
a0 = 0<5, a1 = 1<5, a2 = 2<5, a3 = 3<5, a4 = 4<5
a5 = 5<5, a6 = 6<5, a7 = 7<5, a8 = 8<5, a9 = 9<5
a10=10<5, a11=11<5, a12=12<5, a13=13<5, a14=14<5
a15=15<5, a16=16<5, a17=17<5, a18=18<5, a19=19<5
a20=20<5, a21=21<5, a22=22<5, a23=23<5, a24=24<5
a25=25<5, a26=26<5, a27=27<5, a28=28<5, a29=29<5
a30=30<5, a31=31<5, a32=32<5, a33=33<5, a34=34<5
a35=35<5, a36=36<5, a37=37<5, a38=38<5, a39=39<5
a40=40<5, a41=41<5, a42=42<5, a43=43<5, a44=44<5
a45=45<5, a46=46<5, a47=47<5, a48=48<5, a49=49<5
a50=50<5, a51=51<5, a52=52<5, a53=53<5, a54=54<5
a55=55<5, a56=56<5, a57=57<5, a58=58<5, a59=59<5
a60=60<5, a61=61<5, a62=62<5, a63=63<5, a64=64<5
a65=65<5, a66=66<5, a67=67<5, a68=68<5, a69=69<5
a70=70<5
; action table:
h.
g10:
c0 - c0, c1 - c0, c2 - c0, c3 - c0, c4 - c0
c5 - c0, c6 - c0, c7 - c0, c8 - c0, c9 - c0
c10- c0, c11- c0, c12- c0, c13- c0, c14- c0
c15- c0, c16- c0, c17- c0, c18- c0, c19- c0
c20- c0, c21- c0, c22- c0, c23- c0, c24- c0
c25- c0, c26- c0, c27- c0, c28- c0, c29- c0
c30- c0, c31- c0, c32- c0, c33- c0, c34- c0
c35- c0, c36- c0, c37- c0, c38- c0, c39- c0
c40- c0, c41- c0, c42- c0, c43- c0, c44- c0
c45- c0, c46- c0, c47- c0, c48- c0, c49- c0
c50 -c0, c51- c0, c52- c0, c53- c0, c54- c0
c55- c0, c56- c0, c57- c0, c58- c0, c59- c0
c60- c0, c61- c0, c62- c0, c63- c0, c64- c0
c65- c0, c66- c0, c67- c0, c68- c0, c69- c0
c70- c0
\f
; rc 15.2.1971 algol 6, pass 6, page ...24...
; operator table (1):
; table format:
; 1. word: <18: priority
; <7 : kind
; <0 : type
; 2. word: <12: output value
; <5 : action no
; <0 : bits: typecheck<4 + (top+1 check)<3 + noresult<2
; + outputself<1 + terminateunstack<0
w.
g2 = k + 2
; <18 <7 <0 <12 <5 <0 ; table index
w. b11 + j17 + i7 ,h. h3+0 , a19 + 2.11010 ; 0 add
w. b11 + j17 + i7 ,h. h3+1 , a7 + 2.11010 ; 4 extract
w. b11 + j17 + i7 ,h. h3+2 , a19 + 2.11010 ; 8 shift
w. b9 + j17 + i7 ,h. h3+44 , a9 + 2.11010 ; 12 **
w. b7 + j17 + i7 ,h. h3+5 , a6 + 2.11010 ; 16 *
w. b7 + j17 + i7 ,h. h3+6 , a6 + 2.11010 ; 20 /
w. b7 + j17 + i11 ,h. h3+32 , a24 + 2.11010 ; 24 //
w. b7 + j17 + i11 ,h. h3+35 , a24 + 2.11010 ; 28 mod
w. b5 + j17 + i7 ,h. h3+9 , a6 + 2.11010 ; 32 +
w. b5 + j17 + i7 ,h. h3+10 , a6 + 2.11010 ; 36 -
w. b3 + j17 + i7 ,h. h3+11 , a10 + 2.11010 ; 40 <
w. b3 + j17 + i7 ,h. h3+12 , a10 + 2.11010 ; 44 <=
w. b3 + j17 + i7 ,h. h3+13 , a10 + 2.11010 ; 48 =
w. b3 + j17 + i7 ,h. h3+14 , a10 + 2.11010 ; 52 >=
w. b3 + j17 + i7 ,h. h3+15 , a10 + 2.11010 ; 56 >
w. b3 + j17 + i7 ,h. h3+16 , a10 + 2.11010 ; 60 <>
w. -b1 + j17 + i0 ,h. h3+29 , a1 + 2.11010 ; 64 and
w. -b3 + j17 + i0 ,h. h3+30 , a1 + 2.11010 ; 68 or
w. -b5 + j17 + i0 ,h. h3+31 , a1 + 2.11010 ; 72 ==
w. b11 + j17 + i2 ,h. h3+53 , a12 + 2.10010 ; 76 entier
w. b11 + j17 + i16 ,h. 0 , a47 + 2.10000 ; 80 round
w. b11 + j17 + i7 ,h. h3+50 , a13 + 2.10010 ; 84 abs
w. b5 + j17 + i7 ,h. h3+47 , a13 + 2.10010 ; 88 neg
w. b5 + j17 + i7 ,h. 0 , a14 + 2.10000 ; 92 pos
w. b1 + j17 + i0 ,h. h3+38 , a14 + 2.10010 ; 96 -,
w. b11 + j17 + i3 ,h. 0 , a67 + 2.10000 ; 100 extend
w. b11 + j17 + i14 ,h. h3+120 , a64 + 2.10010 ; 104 oplong
w. b11 + j17 + i15 ,h. h3+121 , a15 + 2.10010 ; 108 opreal
w. b11 + j17 + i16 ,h. h3+122 , a63 + 2.10010 ; 112 opstring
w. -b9 + 0 ,h. h3+40 , a1 + 2.00111 ; 116 first:=
w. -b9 + 0 ,h. h3+40 , a1 + 2.00110 ; 120 :=
w. -b9 + j17 + i0 ,h. h3+41 , a1 + 2.10110 ; 124 prep:=boolean
w. -b9 + j17 + i7 ,h. h3+41 , a19 + 2.10110 ; 128 prep:=integer
w. -b9 + j17 + i7 ,h. h3+41 , a20 + 2.10110 ; 132 prep:=real
w. -b9 + j17 + i7 ,h. h3+41 , a65 + 2.10110 ; 136 prep:=long
w. -b9 + 0 ,h. h3+41 , a1 + 2.00110 ; 140 prep:=notype
\f
; jz 1981.02.25 algol 8, pass 6, page ...25...
; operator table (2):
; table format:
; 1. word: <18: priority
; <7 : kind
; <0 : type
; 2. word: <12: output value
; <5 : action no
; <0 : bits: typecheck<4 + (top+1 check)<3 + noresult<2
; + outputself<1 + terminateunstack<0
; <18 <7 <0 <12 <5 <0 ; table index
w. -b9 + h6 ,h. h6 , a1 + 2.00001 ; 144 if; else st
w. -b9 + j17 + i8 ,h. 0 , a14 + 2.10001 ; 148 then ex; of ex
w. -b9 + j17 + i7 ,h. 0 , a19 + 2.10101 ; 152 case
w. -b9 + j20 + i5 ,h. 0 , a1 + 2.10001 ; 156 of switch
w. -b9 + j15 + i7 ,h. 0 , a1 + 2.10001 ; 160 for
w. -b9 + j17 + i7 ,h. 0 , a27 + 2.11001 ; 164 for elements
w. -b9 + j17 + i0 ,h. h7 , a1 + 2.11001 ; 168 while
w. -b9 + 0 ,h. 0 , a1 + 2.00001 ; 172 (subex
w. -b9 + j17 + i7 ,h. 0 , a19 + 2.10101 ; 176 bound elements
w. b13 + j21 + i13 ,h. 0 , a62 + 2.11000 ; 180 first point
w. b15 + j21 + i13 ,h. h3+9 , a14 + 2.11010 ; 184 not first point
w. -b9 + j17 + i7 ,h. 0 , a60 + 2.11001 ; 188 begin list field
w. -b9 + j17 + i3 ,h. h3+96 , a40 + 2.00000 ; 192 spec integer
w. -b9 + j17 + i2 ,h. h3+96 , a40 + 2.00000 ; 196 spec real
w. -b9 + j17 + i1 ,h. h3+96 , a40 + 2.00000 ; 200 spec long
w. -b9 + j17 + i0 ,h. h3+96 , a40 + 2.00000 ; 204 spec boolean
w. -b9 + j9 + i2 ,h. h3+96 , a40 + 2.00000 ; 208 spec zone
w. -b9 + j16 + i4 ,h. h3+96 , a40 + 2.00000 ; 212 spec string
w. -b9 + j16 + i5 ,h. h3+96 , a40 + 2.00000 ; 216 spec label
w. -b9 + j17 + i7 ,h. h3+97 , a26 + 2.00000 ; 220 spec value real, int, long
w. -b9 + j17 + i0 ,h. h3+97 , a26 + 2.00000 ; 224 spec value boolean
w. -b9 + j11 + i3 ,h. h3+96 , a40 + 2.00000 ; 228 spec array integer
w. -b9 + j22 + i2 ,h. h3+96 , a40 + 2.00000 ; 232 spec array real
w. -b9 + j11 + i1 ,h. h3+96 , a40 + 2.00000 ; 236 spec array long
w. -b9 + j11 + i0 ,h. h3+96 , a40 + 2.00000 ; 240 spec array boolean
w. -b9 + j10 + i2 ,h. h3+96 , a40 + 2.00000 ; 244 spec zone array
w. -b9 + j24 + i6 ,h. h3+96 , a40 + 2.00000 ; 248 spec proc no type
w. -b9 + j24 + i3 ,h. h3+96 , a40 + 2.00000 ; 252 spec proc integer
w. -b9 + j24 + i2 ,h. h3+96 , a40 + 2.00000 ; 256 spec proc real
w. -b9 + j24 + i1 ,h. h3+96 , a40 + 2.00000 ; 260 spec proc long
w. -b9 + j24 + i0 ,h. h3+96 , a40 + 2.00000 ; 264 spec proc boolean
w. -b9 + j12 + i5 ,h. h3+96 , a40 + 2.00000 ; 268 spec switch
w. -b9 + j23 + i9 ,h. h3+96 , a40 + 2.00000 ; 272 spec undef (one param)
w. -b9 + j23 + i9 ,h. h3+96 , a41 + 2.00000 ; 276 spec general
\f
; jz 1980.02.25 algol 8, pass 6, page ...26...
; operator table (3):
; table format:
; 1. word: <18: priority
; <7 : kind
; <0 : type
; 2. word: <12: output value
; <5 : action no
; <0 : bits: typecheck<4 + (top+1 check)<3 + noresult<2
; + outputself<1 + terminateunstack<0
; <18 <7 <0 <12 <5 <0 ; table index
w. -b9 + j17 + i3 ,h. h3+98 , a40 + 2.00000 ; 280 spec addr integer
w. -b9 + j17 + i2 ,h. h3+98 , a40 + 2.00000 ; 284 spec addr real
w. -b9 + j17 + i1 ,h. h3+98 , a40 + 2.00000 ; 288 spec addr long
w. -b9 + j17 + i0 ,h. h3+98 , a40 + 2.00000 ; 292 spec addr boolean
w. -b9 + j23 + i9 ,h. h3+98 , a22 + 2.00000 ; 296 spec addr general
w. -b9 + 0 ,h. h3+96 , a40 + 2.00000 ; 300 spec unacceptable
w. -b9 + j23 + i9 ,h. h3+96 , a41 + 2.00000 ; 304 spec repeat general
w. -b9 + j17 + i7 ,h. 0 , a19 + 2.10101 ; 308 begin list array
w. -b9 + j17 + i7 ,h. h3+105 , a43 + 2.00111 ; 312 begin list zone
w. -b9 + j17 + i7 ,h. h3+104 , a43 + 2.00111 ; 316 begin list zone array
w. -b9 + j17 + i7 ,h. h3+97 , a40 + 2.00000 ; 320 begin list switch
w. -b9 + j17 + i3 ,h. h3+110 , a1 + 2.10111 ; 324 no.zones pseudospec
w. -b9 + j17 + i3 ,h. h3+111 , a1 + 2.10111 ; 328 1st comma pseudospec
w. -b9 + j17 + i3 ,h. h3+112 , a1 + 2.10111 ; 332 2nd comma pseudospec
w. -b9 + 0 ,h. h3+110 , a1 + 2.00111 ; 336 no.zones error spec
w. -b9 + 0 ,h. h3+111 , a1 + 2.00111 ; 340 1st comma error spec
w. -b9 + 0 ,h. h3+112 , a1 + 2.00111 ; 344 2nd comma error spec
w. -b9 + j25 + i6 ,h. h3+113 , a48 + 2.00111 ; 348 end zone local
g3 = k + 2 ; check operators
w. -b9 + j17 + i0 ,h. h6 , a14 + 2.10001 ; 352 boolean
w. -b9 + j17 + i7 ,h. h6 , a66 + 2.10001 ; 356 long
w. -b9 + j17 + i7 ,h. h6 , a23 + 2.10001 ; 360 real
w. -b9 + j17 + i7 ,h. h6 , a14 + 2.10001 ; 364 integer
w. -b9 + j16 + i4 ,h. h6 , a1 + 2.10001 ; 368 string
w. -b9 + j26 + i5 ,h. h6 , a1 + 2.10001 ; 372 label
w. -b9 + 0 ,h. h6 , a53 + 2.00001 ; 376 no type
w. b13 + j21 + i13 ,h. 0 , a61 + 2.11000 ; 380 array field subscript
g9 = k - 2
w. -b9 + j17 + i7 ,h. 0 , a69 + 2.11001 ; 384 until
g7 = a41 + 2.00000
g8 = a22 + 2.00000
\f
; jz 1980.02.25 algol 6, pass 6, page ...27...
; input table: operators (1):
; table format:
; 1. word: <18: priority
; <7 : kind or empty
; <0 : type or output value or empty
; 2. word: <12: output value or operator table index or empty
; <5 : action no
; <0 : bits: stack<2 + output<1 + (then,while elem do)<0
g1 = k + 2
; <18 <7 <0 <12 <5 <0 ; input value
w. b14 + h17+31 ,h. 0 , a0 + 2.010 ; 198 disable
w. b14 + h17+32 ,h. 0 , a0 + 2.010 ; 199 enable
w. b14 + j19 + i9 ,h. h3+94 , a55 + 2.000 ; 200 proc;
w. b14 + h3+42 ,h. 144 , a0 + 2.110 ; 201 if
w. -b8 + j17 + i0 ,h. h3+43 , a54 + 2.001 ; 202 thenex
w. -b10 + h3+3 ,h. 0 , a21 + 2.010 ; 203 elseex
w. b14 + j18 + i10 ,h. h3+95 , a70 + 2.000 ; 204 delete call
w. -b10 + h3+4 ,h. 0 , a68 + 2.010 ; 205 end else ex
w. -b10 + h3+55 ,h. 0 , a0 + 2.010 ; 206 end else st
w. -b10 + h3+55 ,h. 0 , a0 + 2.010 ; 207 end then st
w. b14 + h3+74 ,h. 0 , a29 + 2.010 ; 208 end goto
w. b14 + h3+59 ,h. 160 , a0 + 2.110 ; 209 for
w. -b10 + h3+62 ,h. 164 , a0 + 2.110 ; 210 step
w. -b10 + h3+63 ,h. 384 , a0 + 2.110 ; 211 until
w. b6 + j17 + i11 ,h. 28 , a5 + 2.100 ; 212 mod
w. b4 + j17 + i7 ,h. 32 , a5 + 2.100 ; 213 +
w. b4 + j17 + i7 ,h. 36 , a5 + 2.100 ; 214 -
w. b6 + j17 + i7 ,h. 16 , a5 + 2.100 ; 215 *
w. b6 + j17 + i7 ,h. 20 , a8 + 2.100 ; 216 /
w. b6 + j17 + i11 ,h. 24 , a5 + 2.100 ; 217 //
w. b8 + j17 + i7 ,h. 12 , a8 + 2.100 ; 218 **
w. b10 + j17 + i12 ,h. 8 , a5 + 2.100 ; 219 shift
w. b10 + j17 + i12 ,h. 4 , a5 + 2.100 ; 220 extract
w. b10 + j17 + i12 ,h. 0 , a5 + 2.100 ; 221 add
w. -b10 + h3+88 ,h. 176 , a0 + 2.110 ; 222 first bound
w. -b10 + h3+89 ,h. 176 , a0 + 2.110 ; 223 not first bound
w. -b10 + h3+58 ,h. 156 , a0 + 2.110 ; 224 of switch
w. -b10 + h3+119 ,h. 0 , a28 + 2.010 ; 225 end switch
w. -b2 + j17 + i0 ,h. 64 , a5 + 2.100 ; 226 and
w. -b4 + j17 + i0 ,h. 68 , a5 + 2.100 ; 227 or
w. -b4 + j17 + i0 ,h. 68 , a11 + 2.100 ; 228 imply
w. -b6 + j17 + i0 ,h. 72 , a5 + 2.100 ; 229 ==
w. b14 + 0 ,h. 172 , a0 + 2.100 ; 230 (subex
w. -b10 + 0 ,h. 0 , a0 + 2.000 ; 231 )subex
w. -b10 + h3+67 ,h. 0 , a28 + 2.010 ; 232 simple for do
w. -b10 + h3+68 ,h. 0 , a28 + 2.010 ; 233 step elem do
w. -b10 + h3+69 ,h. 0 , a28 + 2.011 ; 234 while elem do
\f
; rc 22.1.1971 algol 6, pass 6, page ...28...
; input table: operators (2):
; table format:
; 1. word: <18: priority
; <7 : kind or empty
; <0 : type or output value or empty
; 2. word: <12: output value or operator table index or empty
; <5 : action no
; <0 : bits: stack<2 + output<1 + (then,while elem do)<0
; <18 <7 <0 <12 <5 <0 ; input value
w. b14 + h3+79 ,h. 152 , a0 + 2.110 ; 235 case
w. -b10 + h3+80 ,h. 148 , a0 + 2.110 ; 236 of ex
w. -b10 + h3+8 ,h. 0 , a68 + 2.010 ; 237 end case ex
w. -b10 + h3+7 ,h. 0 , a21 + 2.010 ; 238 case comma
w. b14 + h3+56 ,h. 0 , a0 + 2.010 ; 239 case semicolon
w. b14 + 0 ,h. 0 , a34 + 2.000 ; 240 vanished operand
w. b14 + 0 ,h. 0 , a35 + 2.000 ; 241 internal operand
w. b2 + j17 + i7 ,h. 40 , a5 + 2.100 ; 242 <
w. b2 + j17 + i7 ,h. 44 , a5 + 2.100 ; 243 <=
w. b2 + j17 + i7 ,h. 48 , a5 + 2.100 ; 244 =
w. b2 + j17 + i7 ,h. 52 , a5 + 2.100 ; 245 >=
w. b2 + j17 + i7 ,h. 56 , a5 + 2.100 ; 246 >
w. b2 + j17 + i7 ,h. 60 , a5 + 2.100 ; 247 <>
w. b0 + 0 ,h. 96 , a0 + 2.100 ; 248 -,
w. b12 + 0 ,h. 76 , a0 + 2.100 ; 249 entier
w. b4 + 0 ,h. 92 , a0 + 2.100 ; 250 pos
w. b4 + 0 ,h. 88 , a0 + 2.100 ; 251 neg
w. b12 + 0 ,h. 84 , a0 + 2.100 ; 252 abs
w. b12 + 0 ,h. 80 , a0 + 2.100 ; 253 round
w. b12 + 0 ,h. 100 , a0 + 2.100 ; 254 extend
w. b12 + 0 ,h. 104 , a0 + 2.100 ; 255 oplong
w. b12 + 0 ,h. 108 , a0 + 2.100 ; 256 opreal
w. b12 + 0 ,h. 112 , a0 + 2.100 ; 257 opstring
w. -b8 + j17 + i0 ,h. h3+43 , a55 + 2.001 ; 258 then st
w. -b10 + h3+54 ,h. 144 , a0 + 2.110 ; 259 else st
w. -b10 + h3+80 ,h. 0 , a0 + 2.010 ; 260 of st
w. b14 + h3+57 ,h. 0 , a0 + 2.010 ; 261 end case st
w. -b10 + h3+100 ,h. 0 , a0 + 2.010 ; 262 end list one
w. -b10 + h3+101 ,h. 0 , a0 + 2.010 ; 263 end list more
w. -b10 + h3+102 ,h. 308 , a0 + 2.110 ; 264 first comma
w. -b10 + h3+103 ,h. 308 , a0 + 2.110 ; 265 not first comma
w. b12 + j22 + i13 ,h. 180 , a57 + 2.100 ; 266 first point
w. b14 + j7 + i13 ,h. 184 , a59 + 2.100 ; 267 not first point
w. -b10 + 0 ,h. 0 , a0 + 2.000 ; 268 zone comma
w. -b10 + 0 ,h. 176 , a0 + 2.100 ; 269 bound colon
w. -b10 + h3+61 ,h. 164 , a0 + 2.110 ; 270 simple for elem
\f
; rc 1976.08.17 algol 6, pass 6, page ...29...
; input table: operators (3):
; table format:
; 1. word: <18: priority
; <7 : kind or empty
; <0 : type or output value or empty
; 2. word: <12: output value or operator table index or empty
; <5 : action no
; <0 : bits: stack<2 + output<1 + (then,while elem do)<0
; <18 <7 <0 <12 <5 <0 ; input value
w. -b10 + h3+60 ,h. 164 , a0 + 2.110 ; 271 :=for
w. -b10 + h3+64 ,h. 164 , a0 + 2.110 ; 272 step elem
w. -b10 + h3+66 ,h. 164 , a0 + 2.110 ; 273 while elem
w. -b10 + h3+65 ,h. 168 , a0 + 2.111 ; 274 while
w. -b10 + 0 ,h. 0 , a0 + 2.000 ; 275 end assign
w. b12 + h3+39 ,h. 120 , a17 + 2.110 ; 276 :=
w. b12 + h3+39 ,h. 116 , a16 + 2.110 ; 277 first:=
w. b14 + h3+83 ,h. 0 , a0 + 2.010 ; 278 end block
w. b14 + h3+93 ,h. 0 , a0 + 2.010 ; 279 end zone block
w. b14 + h3+116 ,h. 0 , a0 + 2.010 ; 280 while label
w. b14 + 0 ,h. 124 , a18 + 2.000 ; 281 prep assign
w. b14 + h3+72 ,h. 0 , a0 + 2.010 ; 282 goto bypass label
w. b14 + h3+73 ,h. 0 , a0 + 2.010 ; 283 bypass label
w. b14 + 0 ,h. 348 , a0 + 2.100 ; 284 end zone local
w. b14 + 0 ,h. 0 , a0 + 2.000 ; 285 do
w. b14 + h3+70 ,h. 0 , a0 + 2.010 ; 286 end do
w. b14 + h3+71 ,h. 0 , a0 + 2.010 ; 287 end single do
w. b16 + h3+117 ,h. 0 , a36 + 2.010 ; 288 new line
w. b14 + h3+81 ,h. 0 , a0 + 2.010 ; 289 beg external
w. b14 + h3+82 ,h. 0 , a32 + 2.010 ; 290 beg block
w. b14 + h3+92 ,h. 0 , a30 + 2.010 ; 291 beg proc
w. b14 + h3+76 ,h. 0 , a30 + 2.010 ; 292 take array
w. b14 + h3+77 ,h. 0 , a0 + 2.010 ; 293 take zone array
w. b14 + h3+78 ,h. 0 , a28 + 2.010 ; 294 take value
w. b14 + h3+90 ,h. 0 , a25 + 2.010 ; 295 end bounds
w. -b10 + 0 ,h. 0 , a0 + 2.000 ; 296 end zone decl
w. b14 + h3+84 ,h. 0 , a0 + 2.010 ; 297 exit block
w. b14 + h3+115 ,h. 0 , a51 + 2.010 ; 298 end external
w. b14 + h3+85 ,h. 0 , a0 + 2.010 ; 299 exit proc not
w. b14 + h3+86 ,h. 0 , a0 + 2.010 ; 300 exit type proc
w. b14 + h3+75 ,h. 0 , a32 + 2.010 ; 301 label colon
w. b14 + h3+91 ,h. 304 , a42 + 2.000 ; 302 begin list
w. b14 + j7 + i13 ,h. 188 , a58 + 2.100 ; 303 begin list field
w. b14 + h3+87 ,h. 176 , a33 + 2.110 ; 304 begin bounds
w. b14 + h3+108 ,h. 328 , a45 + 2.010 ; 305 begin zone
w. b14 + h3+109 ,h. 324 , a46 + 2.010 ; 306 begin zone array
w. b14 + 0 ,h. 0 , a49 + 2.000 ; 307 error
w. b14 + h3+114 ,h. 0 , a52 + 2.010 ; 308 end pass
\f
; rc 15.2.1971 algol 6, pass 6, page ...30...
; input table: operands (1):
; table format:
; 1. word: <18: priority
; <7 : kind
; <0 : type
; 2. word: <12: output value
; <5 : action no
; <18 <7 <0 <12 <5 ; input value
w. b16 + j23 + i9 ,h. h17+5 , a50 ; 309 undeclared
w. b16 + j16 + i5 ,h. h17+28 , a3 ; 310 label
w. b16 + j12 + i5 ,h. h17+18 , a3 ; 311 switch
w. b16 + j16 + i5 ,h. h17+10 , a3 ; 312 formal label
w. b16 + j12 + i5 ,h. h17+18 , a3 ; 313 formal switch
w. b16 + j13 + i3 ,h. h17+21 , a3 ; 314 proc no par integer
w. b16 + j13 + i2 ,h. h17+23 , a3 ; 315 proc no par real
w. b16 + j13 + i1 ,h. h17+22 , a3 ; 316 proc no par long
w. b16 + j13 + i0 ,h. h17+20 , a3 ; 317 proc no par boolean
w. b16 + j13 + i6 ,h. h17+24 , a3 ; 318 proc no par not
w. b16 + j12 + i3 ,h. h17+17 , a2 ; 319 proc par integer
w. b16 + j12 + i2 ,h. h17+19 , a2 ; 320 proc par real
w. b16 + j12 + i1 ,h. h17+18 , a2 ; 321 proc par long
w. b16 + j12 + i0 ,h. h17+16 , a2 ; 322 proc par boolean
w. b16 + j12 + i6 ,h. h17+24 , a2 ; 323 proc par not
w. b16 + j15 + i3 ,h. h17+5 , a3 ; 324 simple integer
w. b16 + j15 + i2 ,h. h17+7 , a3 ; 325 simple real
w. b16 + j15 + i1 ,h. h17+6 , a3 ; 326 simple long
w. b16 + j15 + i0 ,h. h17+4 , a3 ; 327 simple boolean
w. b16 + j8 + i3 ,h. h17+5 , a56 ; 328 integer field
w. b16 + j8 + i2 ,h. h17+5 , a56 ; 329 real field
w. b16 + j8 + i1 ,h. h17+5 , a56 ; 330 long field
w. b16 + j8 + i0 ,h. h17+5 , a56 ; 331 boolean field
w. b16 + j7 + i3 ,h. h17+5 , a56 ; 332 integer array field
w. b16 + j7 + i2 ,h. h17+5 , a56 ; 333 real array field
w. b16 + j7 + i1 ,h. h17+5 , a56 ; 334 long array field
w. b16 + j7 + i0 ,h. h17+5 , a56 ; 335 boolean array field
w. b16 + j9 + i2 ,h. h17+25 , a3 ; 336 zone
w. b16 + j11 + i3 ,h. h17+13 , a3 ; 337 integer array
w. b16 + j11 + i2 ,h. h17+15 , a3 ; 338 real array
w. b16 + j11 + i1 ,h. h17+14 , a3 ; 339 long array
w. b16 + j11 + i0 ,h. h17+12 , a3 ; 340 boolean array
w. b16 + 0 ,h. 0 , a38 ; 341 dope description
w. b16 + j10 + i2 ,h. h17+27 , a3 ; 342 zone array
\f
; rc 15.2.1971 algol 6, pass 6, page ...31...
; input table: operands (2):
; table format:
; 1. word: <18: priority
; <7 : kind
; <0 : type
; 2. word: <12: output value
; <5 : action no
; <18 <7 <0 <12 <5 ; input value
w. b16 + j14 + i3 ,h. h17+17 ,a3 ; 343 formal proc integer
w. b16 + j14 + i2 ,h. h17+19 ,a3 ; 344 formal proc real
w. b16 + j14 + i1 ,h. h17+18 ,a3 ; 345 formal proc long
w. b16 + j14 + i0 ,h. h17+16 ,a3 ; 346 formal proc boolean
w. b16 + j14 + i6 ,h. h17+24 ,a3 ; 347 formal proc not
w. b16 + j15 + i3 ,h. h17+9 ,a3 ; 348 formal simple integer
w. b16 + j15 + i2 ,h. h17+11 ,a3 ; 349 formal simple real
w. b16 + j15 + i1 ,h. h17+10 ,a3 ; 350 formal simple long
w. b16 + j15 + i0 ,h. h17+8 ,a3 ; 351 formal simple boolean
w. b16 + j8 + i3 ,h. h17+9 ,a56 ; 352 formal integer field
w. b16 + j8 + i2 ,h. h17+9 ,a56 ; 353 formal real field
w. b16 + j8 + i1 ,h. h17+9 ,a56 ; 354 formal long field
w. b16 + j8 + i0 ,h. h17+9 ,a56 ; 355 formal boolean field
w. b16 + j7 + i3 ,h. h17+9 ,a56 ; 356 formal int array field
w. b16 + j7 + i2 ,h. h17+9 ,a56 ; 357 formal real array field
w. b16 + j7 + i1 ,h. h17+9 ,a56 ; 358 formal long array field
w. b16 + j7 + i0 ,h. h17+9 ,a56 ; 359 formal boo array field
w. b16 + j16 + i4 ,h. h17+10 ,a3 ; 360 formal string
w. b16 + j11 + i3 ,h. h17+9 ,a3 ; 361 anonymous array integer
w. b16 + j11 + i2 ,h. h17+11 ,a3 ; 362 anonymous array real
w. b16 + j11 + i1 ,h. h17+10 ,a3 ; 363 anonymous array long
w. b16 + j11 + i0 ,h. h17+8 ,a3 ; 364 anonymous array boolean
w. b16 + j9 + i2 ,h. h17+26 ,a3 ; 365 formal zone
w. b16 + j16 + i3 ,h. h17+1 ,a3 ; 366 integer literal
w. b16 + j16 + i2 ,h. h17+3 ,a37 ; 367 real literal
w. b16 + j16 + i1 ,h. h17+2 ,a37 ; 368 long literal
w. b16 + j16 + i0 ,h. h17+0 ,a44 ; 369 boolean literal
w. b16 + j16 + i4 ,h. h17+29 ,a37 ; 370 string first
w. b16 + 0 ,h. h17+30 ,a4 ; 371 string next
\f
; jz 1980.02.15 algol 8, pass 6, page ...32...
; input table: specifications:
; table format:
; 1. word: <18: priority
; rest unused
; 2. word: <12: operator table index
; <5 : action no
; rest unused
; <18 <12 <5 ; input value
w. b16 ,h. 204 , a39; 372 spec simple boolean
w. b16 ,h. 192 , a39; 373 spec simple integer
w. b16 ,h. 196 , a39; 374 spec simple real
w. b16 ,h. 200 , a39; 375 spec simple long
w. b16 ,h. 300 , a39; 376 spec simple long real
w. b16 ,h. 300 , a39; 377 spec complex
w. b16 ,h. 208 , a39; 378 spec zone
w. b16 ,h. 212 , a39; 379 spec string
w. b16 ,h. 216 , a39; 380 spec label
w. 0 ,h. 0 , 0 ; 381 not possible
w. b16 ,h. 224 , a39; 382 spec value boolean
w. b16 ,h. 220 , a39; 383 spec value integer
w. b16 ,h. 220 , a39; 384 spec value real
w. b16 ,h. 220 , a39; 385 spec value long
w. b16 ,h. 300 , a39; 386 spec value long real
w. b16 ,h. 300 , a39; 387 spec value complex
w. b16 ,h. 292 , a39; 388 spec address boolean
w. b16 ,h. 280 , a39; 389 spec address integer
w. b16 ,h. 284 , a39; 390 spec address real
w. b16 ,h. 288 , a39; 391 spec address long
w. b16 ,h. 300 , a39; 392 spec address long real
w. b16 ,h. 300 , a39; 393 spec address complex
w. b16 ,h. 240 , a39; 394 spec array boolean
w. b16 ,h. 228 , a39; 395 spec array integer
w. b16 ,h. 232 , a39; 396 spec array real
w. b16 ,h. 236 , a39; 397 spec array long
w. b16 ,h. 300 , a39; 398 spec array long real
w. b16 ,h. 300 , a39; 399 spec array complex
w. b16 ,h. 244 , a39; 400 spec zone array
w. b16 ,h. 248 , a39; 401 spec proc no type
w. b16 ,h. 264 , a39; 402 spec proc boolean
w. b16 ,h. 252 , a39; 403 spec proc integer
w. b16 ,h. 256 , a39; 404 spec proc real
w. b16 ,h. 260 , a39; 405 spec proc long
w. b16 ,h. 300 , a39; 406 spec proc long real
w. b16 ,h. 300 , a39; 407 spec proc complex
w. b16 ,h. 268 , a39; 408 spec switch
w. b16 ,h. 276 , a39; 409 spec general
w. b16 ,h. 296 , a39; 410 spec address general
w. b16 ,h. 272 , a39; 411 spec undefined
i. ; id list
e. ; end block tables
\f
; jz.fgs.1981.03.02 algol 8, pass 6, page ...33...
b. b24 ; begin block error texts
w. ;
g11:
b0: <:-delimiter:>
b1: <:delimiter:>,0
b2: <:-operand:>
b3: <:operand:>
b4: <:termination:>
b5: <:head:>
b6: <:external:>
b7: <:char or illegal:>,0
b9: <:comment:>
b10: <:layout:>,0
b11: <:right par improper:>,0
b12: <:begin ends:>
b14: <:undeclared:>
b15: <:+declaration<0>:>
b16: <:for label:>,0
b17: <:local:>
b18: <:constant:>
b19: <:text:>
b20: <:context label<0>:>
b21: <:context zone<0>:>
b22: <:context proc<0>:>
b23: <:case elements<0>:>
b24: <:compiler directive syntax:>
; error text address table:
g4 = k - 2
b0-b0 , b1 -b0 , b2 -b0 , b3 -b0 , b4-b0 ; 1- 5
b5 -b0 , b6 -b0 , b7 -b0+1 , 0 , b9-b0 ; 6-10
b10-b0 , b11-b0 , b12-b0 , 0 , b14-b0+1 ; 11-15
b15-b0+1 , b16-b0 , b17-b0 , b18-b0 , b19-b0 ; 16-20
b20-b0 , b21-b0 , b22-b0 , b23-b0 , b24-b0 ; 21-25
g0 = k + 2 ; operator stack bottom:
-11<19 ;
g5 = (:k-j0:)
e30=e30+g5
g6 = (:g0-g2:)
i. ; id list
e. ; end block error texts
i. ; id list
e. ; end pass 6
m. jz 1986.02.27 algol 8, pass 6
\f
▶EOF◀