|
|
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: 82176 (0x14100)
Types: TextFile
Names: »algpass33tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »algpass33tx «
;rc 11.1.1971 algol 6, pass 3, page 0
;pass 3 contents:
;page 1 : assignments and definition of initial values
;page 2 : interrupt action used from number packing actions
;page 2 : start of pass 3
;page 3 : end pass 3
;page 3 : error procedure
;page 4 : central input procedure
;page 5 : stack searching procedure
;page 6ff : actions
;page 8ff : procedure-head handling actions
;page 13ff : actions for reading and packing numbers
;page 16 : description of action table for numbers
;page 16 : action table for numbers
;page 17 : description of stack words
;page 17ff : stack words
;page 21ff : description of control tables
;page 23 : input conversion tables
;page 23 : control table for special delimiters
;page 24ff : main control table
\f
; jz.fgs 1982.07.02 algol 8, pass 3, page ...1...
k=e0
s. a46, b52, c71, d28, f43, g19, h99, j4
w.
j0: g0 ; number of words in pass 3
h. c0 ; entry address relative to first word
3<1 + 0 ; pass mode bits:pass no<1+no change of direction
;assignment of bases:
h0 = 114 ,h1 = 59 ; input byte bases for special delimiters,
h2 = 70 ,h3 = 512 ; numbers, normal delimiters, identifiers
h30= 7 ,h31= 200 ; output byte bases
h32= 242 ,h80= 0 ;
h81= 4 ,h82= 10 ;
;output byte values:
h4 = h80+ 3,h7 = h31+ 5; error, end else expr
h8 = h31+ 4,h9 = h31 ; delete call, proc;
h10= h82+ 28,h11= 512; exit proc no type, dummy identifier
h13= h82+ 29,h14= h82+ 33; exit type proc,do
h17= h30+ 53,h18= 15; beg list, value allowed= value-non value spec
h19= h30+ 67,h20= h30+106; declare undef proc, unspec
h21= h30+107,h22= h82+ 38; spec general, end spec
h23= h30+116,h24= h30+ 61; end block,decl switch
h25= h30+117,h26= h30+ 83; end zone block, spec value integer
h27= h30+123,h28= h30+121; case, of switch
h33= h81+ 5,h34= h82+ 24; string next, exit block
h35= h82+ 12,h36= h82+ 22; decl zone, decl zone array
h39= h81+ 0,h40= h81+ 1; integer literal, real literal
h91= h81+ 2,h88= h80+ 0; long literal, new line
h41= h80+ 1,h73= h80+ 2; vanished operand, internal operand
h83= h30+57-h82 ; decl par proc - decl simple
h97= 519,h98= 520; exit ident, continue ident
;input byte value:
h5 = h2 + 33,h78= h0 + 22; trouble, new line
;stack representations:
h6 = 4,h12= 48,h15= 4,h16=108; else ex,beg block,do-singledo,(proc subs
h29= 76,h37= 56,h42= 8,h43= 12; :=switch,beg ext,then ex,trouble
h44= 16,h45= 20,h46= 28,h47= 32; then st,goto,assign, single do
h48= 36,h49= 40,h50= 44,h51= 60; do,else st,beg clean,beg body
h52= 64,h53= 68,h54= 80,h55= 84; of st,beg proc,single comma,:=for
h56= 88,h57= 92,h58= 96,h59= 100; until,while,(zone,next colon,
h60=104,h61=112,h62=120,h63=124; first colon,(left, ,proc subs, ,left
h64=132,h65=148,h66=152,h67=156; of ex,(subex,if ex,if st
h68=160,h69=164,h70=168,h71=172; step, (arr,array comma,case ex
h72=176,h74= 52,h75= 72,h76=116; case st,beg zonbl,beg extpr,(left or ex
h77=128,h79=180,h92=136,h93=140; ,left or ex, prel.ofstat,fieldpar,fieldpar
h94=144,h99=24 ; fieldpar, disable
;others:
h38=0 ; interrupt number
h96=h92/4 - (:h64-11+43:) ; used at c68. (11, 43 == states)
;iso-values for special test output:
h84=100; d-delimiter
h85=124; ø-operand
h86=115; s-state
h87= 99; c-content of stack
\f
;jz.fgs 1981.03.20 algol 8, pass 3, page ...2...
w.
b0: 0 ; introuble=false
b1: 0 ; first after trouble = false
b3: 0 ; operand
b4: 0 ; delimbase, work
b7: 0 ; decl
b8: 0 ; for comma count
b9: 0 ; stack entry
h.
b23: -7, -4, -1, 2; no of shifts(1:4)
w.
b24: 2.11100; mask 28
h.
b25: 0 , al w0 ; <al w0> in right byte
w.
; interrupt address: intialize mod 1:
b26: bz. w0 b10. ; <w0>, factor modifier 1:=
b27: lx. w0 b25. ; <w1>, input digit (al w0) exor
hs. w0 b10. ; <w2>, - - (double word) (jl w3 x3);
b28: jl. c3. ; <w3>, exponent goto next;
b30: 0 ; <ex>, exponent sign
0 ; <return address>
0 ; <interrupt cause>
c.e100-16
jl. 2 , r.(:b26.+e100+2:)>1
z.
al. w2 b26. ; monitor in:
rl. w0 b30.+4 ; if interrupt cause<>integer overflow and
se w0 0 ; interrupt cause<>floating point overflow
sl w0 5 ; then
jl. e36. ; goto pass 0 interrupt;
al. w0 d24. ;
sl. w0 (b30.+2); if return address < pack real then
jl. c49. ; goto error 1 else
jl. d23. ; goto error 2;
b31: 10 ; integer 10
b32: 2.111111; mask 63
b33: 0, 1<10; round const
b34: 0 ;bool: exp < -512, true=0
b36: 0 ; maxds
b40: 0 ; store for w1 in numbers
838 860 ; first word of maxlong//2
b44: -3 355 444 ; sec word of maxlong//2
c0=k-j0 ; start pass 3:
al w0 -1 ; set interrupt mask;
al. w3 b26. ; set interrupt address to b26;
jd 1<11+h38; call monitor(set interrupt);
xl. 0 ; ex(21):= ex(22):= ex(23):= 0;
rl. w1 j0. ; ds:= 0; comment w1 = stack pointer
al. w1 x1+j0.-4 ; w1:= addr of pass-end = lower stack limit
rl. w0 e9.+4 ; w0:= last work for pass= upper stack limit;
rs. w0 b36. ; maxds:=w0;
jl. b26. ; output identifier:= true;
; introuble:= first after trouble:= false;
; state:= 27;
; goto initialize mod 1;
\f
;rc 06.05.1971 algol 6, pass 3, page 3
c1: jl. w3 e3. ; endpass: output(outpart);
jl. w3 e2. ; input(identifier limit);
hs. w2 a42. ;
a4: jl. w3 e2. ; new st proc: input(byte);
sn w2 0 ; if byte=0 then
jl. a43. ; goto finish pass 3;
hs. w2 a36. ; id:= byte;
al w1 0 ; for i:=1 step 1 until 16 do
a35: jl. w3 e2. ; begin
al w0 x2 ; input(byte);
jl. w3 e3. ; output(byte);
al w1 x1+1 ; end;
se w1 16 ;
jl. a35. ;
a36=k+1; id
al w0 ;
jl. w3 e3. ; output(id);
jl. a4. ; goto new st proc;
a43: ; finish pass 3
a42=k+1; identifier limit
al w0 ; output(identifier limit);
jl. w3 e3. ; goto new pass;
jl. e7. ;
d0: al. w1 e10. ; error:
jl. e5. ; e0: goto alarm(<:stack:>;
al w0 1 ; e4: error ident:= <-delimiter>;
jl. a0. ; goto on;
al w0 2 ; e8: error ident:=<delimiter>;
jl. a0. ; goto on;
al w0 3 ; e12: error ident:= <-operand>;
jl. a0. ; goto on;
al w0 4 ; e16: error ident:= <operand>;
jl. a0. ; goto on;
al w0 5 ; e20: error ident:= <termination>;
jl. a0. ; goto on;
al w0 19 ; e24: error ident:= <constant>;
a0: rl. w2 b0. ; on: if introuble then
so w2 1 ; begin
jl. a37. ; if error ident<><-delimiter> then
se w0 1 ; goto after operand else
jl. d4. ; goto trouble out
jl. a38. ; end;
a37: jl. w3 e3. ; output(error ident);
al w0 h4 ; output(<error>);
jl. w3 e3. ;
jl. w3 e11. ; repeat input byte:= true;
al w2 1 ;
rs. w2 b0. ; introuble:=
rs. w2 b1. ; first after trouble:= true;
rs. w2 b3. ; operand:=0;
al w2 h5 ; byte:= <trouble>;
jl. d5. ; goto not operand;
d25: bz. w0 b21. ; literal trouble out:
sn w0 h33 ; if kind=<string next> then
jl. d4. ; goto after operand;
a38: al w0 h41 ; trouble out:
jl. w3 e3. ; output(<vanished operand>);
jl. d4. ; goto after operand;\f
;rc 11.1.1971 algol 6, pass 3, page 4
d27: rs. w3 b4. ; procedure error out(byte);integer byte;
jl. w3 e3. ; begin
al w0 h4 ; output(byte);
rl. w3 b4. ; output(<error>);
jl. e3. ; end;
d1: al w3 0 ; after trouble:
se. w3 (b1.) ; if first after trouble then
am b1-b0 ; first after trouble:= false else
rs. w3 b0. ; introuble:= false;
jl. d3. ; goto next1;
;d2: see page 5
c67: bz. w3 b43. ; reset out:
hs. w3 b5. ; state := oldstate;
c2: jl. w3 e3. ; out: output(outpart);
c3: al w3 1 ; next:
rs. w3 b3. ; operand:= 0;
sn. w3 (b0.) ; if introuble then
jl. d1. ; goto after trouble;
d3: jl. w3 e2. ; next 1: input(byte);
sh w2 h3-1 ; if byte<identifier base then
jl. d5. ; goto not operand;
al w0 x2 ; outpart:= byte;
rl. w2 b0. ;
se w2 0 ; if introuble then
al w0 h41 ; outpart:= <vanished operand>;
j3: jl. w3 e3. ; if output identifier then output(outpart) else keep;
al w3 2 ; comment output identifier:true e3,false d8;
se w2 1 ; if -,introuble then
rs. w3 b3. ; operand:= 1;
d4: jl. w3 e2. ; after operand: input(byte);
sl w2 h3 ; if byte>=identifier base then
jl. d0.+4 ; error(-delimiter);
d5: ; not operand:
c.(:e15 a. 1<3:) - 1<3 ; if special test output pass 3 then
al w0 x2 ; begin
jl. w3 e16. ; printbyte(delimiterbyte);
al w0 h84 ; writechar(d);
jl. w3 e12. ;
rl. w0 b3. ;
jl. w3 e16. ; printbyte(operand value);
al w0 h85 ; writechar(ø);
jl. w3 e12. ;
bz. w0 b5. ;
jl. w3 e16. ; printbyte(state);
al w0 h86 ; writechar(s);
jl. w3 e12. ;
z. ; end;
sh w2 h2-1 ; if byte<normaldelimbase then
jl. d19. ; goto initialize number;
sh w2 h0-1 ; if byte < specialdelimbase then
jl. a6. ; goto go on;
bl. w2 x2+g1. ; control word:= special conversion table(byte)
al. w3 x2+g3. ; +control table base;
jl. d7. ; goto special;\f
;rc 1977.11.16 algol 6, pass 3, page ...4a...
a6: bz. w2 x2+g2. ; go on:
al. w2 x2+g3. ; delim base:= normal conversion table(byte)
rs. w2 b4. ; +control table base;
b5= k+1; state
al w3 27 ;
hs. w3 b43. ; oldstate:= state;
ld w0 -2 ;
am. (b4.) ; byte:= delimbase + state//4;
bz w2 x3 ;
al w3 0 ;
ld w0 2 ;
bl. w3 x3+b23. ; s:= no of shifts(state mod 4);
ls w2 x3 ; delimiter meaning word number:= byte shift s
la. w2 b24. ; & mask28;
sn w2 0 ; if delimiter meaning word number = 0 then
jl. d0.+8 ; error(delimiter);
ac w3 x2 ;
wa. w3 b4. ; control word:= delim base - delimiter meaning word
; number; comment control word now points at the first
; byte of the found delimiter word;
d6: bl w2 x3 ; controlword found:
sh w2 -1 ; if byte1(control word)<0 then
jl. d9. ; goto search;
al w0 0 ; if -, bit(operand, allowed operand part(control word))
so. w2 (b3.) ; & -, introuble then
se. w0 (b0.) ; error(operand)
jl. a3. ;
jl. d0.+16 ;
a3: ls w2 -4 ; w2:= new state;
c4: hs. w2 b5. ; normal action: state:= w2;
d7: bl w0 x3+3 ; special: outpart:= byte4(control word);
bz w2 x3+2 ; stack part:= byte3(control word);
bl w3 x3+1 ; switch part:= byte2(control word);
j1: jl. x3 ; goto action(switch part);
; comment w0=out part, w2=stack part;
d8: hs. w0 a7. ; procedure keep;
al w0 h41 ; begin ident:= outpart;
jl. w3 e3. ; output(<vanished operand>);
jl. j3.+2 ; end;
; allowed states:
2.0000 0000 1100 0000 0000 0000; 8, 9
b51: 2.0001 1011 0100 0000 0000 0000; 27,28,30,31,33
c70: hs. w0 b52. ; exit: continue: save output;
bz. w0 b5. ; w0 := state;
dl. w3 b51. ; (w2,w3) := allowed states;
ld w3 (0) ;
sl w2 0 ; if allowed state shift state < 0
jl. d0.+8 ; then error(<:delimiter:>);
b52=k+1; save output;
al w0 0 ; w0 := output;
rl. w2 b0. ; w2 := introuble;
jl. j3. ; goto output operand
j4:
a7=k+1; ident ; comment
sn w0 0 ; ident word no 1
jl w3 x3 ; ident word no 2;\f
c68: ba. w2 b43. ; special par:
rl. w3 b3. ;
sn w2 h64 ; stackpart := stackpart + oldstate;
jl. c69. ; if oldstate <> 11 then
se w3 1<1 ; begin
jl. d0.+12 ; if operand <> 1 then error(-operand);
al w2 x2+h96 ; stackpart := fieldpar(oldstate);
ls w2 2 ; goto ent out;
jl. c11. ; end
c69: se w3 1<0 ; else
jl. d0.+16 ; if operand <> 0 then error(operand);
jl. c14. ; goto ent;
;rc 11.1.1971 algol 6, pass 3, page 5
d9: bz w2 x3+3 ; search:
hs. w2 a8. ; upper:= byte4(control word);
bz w2 x3+2 ;
hs. w2 a9. ; lower-1:= byte3(control word);
bz w2 x3+1 ;
hs. w2 a10. ; base:= byte2(control word);
bz w2 x3 ;
sz w2 1<10 ; if search statement then
jl. a11. ; goto test procarr;
rl. w2 b3. ;
sz w2 1 ; if operand=0 then
jl. d0.+12 ; error(-operand);
bz w2 x1 ; st:= stack(ds);
c.(:e15 a. 1<3:) - 1<3 ; if special test output pass 3 then
al w0 x2 ; begin
jl. w3 e16. ; printbyte(stack content);
al w0 h87 ;
jl. w3 e12. ; writechar(c);
z. ; end;
se w2 h6 ; if st <> <else expr>
jl. a19. ; then goto test top;
al w0 h7 ; outpart:= <end else expr>;
d10: jl. w3 e3. ; outstack: output(outpart);
d2: al w1 x1-4 ; next elem: ds:= ds-1;
a12: bz w2 x1 ; take top: st:= stack(ds);
c.(:e15 a. 1<3:) - 1<3 ; if special test output pass 3 then
al w0 x2 ; begin
jl. w3 e16. ; printbyte(stack content);
al w0 h87 ;
jl. w3 e12. ; writechar(c);
z. ; end;
a19: ; test top:
a8=k+1 ;upper
sh w2 0 ;
a9=k+1 ;lower-1
sh w2 0 ; if st>upper ! st<lower-1 then
jl. d0.+20 ; error(termination);
j2: ;
a10=k+1 ;base
al. w3 x2 ; stackword:= stacktable(base+st);
bl w2 x3 ; w2:= byte1(stack word);
sl w2 0 ; if repeat search bit(stackword) = 0 then
jl. c4. ; goto normal action;
a13: sz w2 1<10 ; if output bit(stackword) = 0 then
jl. d2. ; begin outpart:= byte4(stack word);
bz w0 x3+3 ; goto outstack end;
jl. d10. ; goto next elem;
\f
;rc 11.1.1971 algol 6, pass 3, page 6
a11: rl. w2 b3. ; test procarr:
sz w2 1 ; if operand=0 then
jl. a12. ; goto take top;
sz w2 8 ; if operand=3 then
jl. d0.+16 ; error(operand);
al w0 h8 ; if operand=1 then
sz w2 2 ; outpart:= <proc;> else
al w0 h9 ; outpart:= <delete call>;
jl. w3 e3. ; output(outpart);
jl. a12. ; goto take top;
c61: am h75-h53; set ext proc:
c5: al w3 h53 ; begproc:= <beg ext proc>; goto a;
hs. w3 b41. ; set block proc:
al w3 h23 ; begproc:= <beg proc>;
hs. w3 b42. ; a:endprocblock:= <end block>;
al w3 h10 ;
hs. w3 b2. ; exitproc:= <exit proc no type>;
al w3 d8-j3 ; output identifier:=
hs. w3 j3.+1 ; head alarm:= false;
al w3 0 ; ident:= dummy identifier;
hs. w3 b6. ;
al w3 h11 ;
hs. w3 a7. ;
c6: bz w3 x1 ; setblock:
sn w3 x2 ; if stack(ds)=stack part then
al w3 h12 ; stack(ds):= <begin block>;
hs w3 x1 ;
c7: rs. w0 b7. ; set decl: decl:= outpart;
jl. c3. ; goto next;
c62: am h75-h53; add decl ext:
c8: al w3 h53 ; begproc:= <beg ext proc>; goto b;
hs. w3 b41. ; add decl proc:
al w3 h23 ; begproc:= <beg proc>;
hs. w3 b42. ; b:end proc block:= <end block>;
al w3 h13 ; exitproc:= <exit type proc>;
hs. w3 b2. ;
al w3 d8-j3 ; output identifier:=
hs. w3 j3.+1 ; head alarm:= false;
hs. w2 b6. ; ident:= dummy identifier;
al w3 h11 ;
hs. w3 a7. ;
c9: wa. w0 b7. ; add decl:
rs. w0 b7. ; decl:= decl+outpart;
jl. c3. ; goto next;
c10: rl. w0 b7. ; decl ent: outpart:= decl;
c11: al w1 x1+4 ; ent out:
sl. w1 (b36.) ; ds:= ds+1;
jl. d0. ; if ds>maxds then error(stack);
c12: hs w2 x1 ; ch out:
jl. c2. ; stack(ds):= stack part; goto out;
c13: rl. w0 b7. ; decl:
jl. c2. ; outpart:= decl; goto out;
c46: rl. w3 b7. ; set state:
sn w3 h35 ; if decl=<decl zone> then
hs. w2 b5. ; state:= stack part; comment 35;
sn w3 h36 ; if decl=<decl zone array> then
hs. w0 b5. ; state:= outpart; comment 36;
jl. c3. ; goto next;
\f
;rc 11.1.1971 algol 6, pass 3, page 7
c14: al w1 x1+4 ; ent:
sl. w1 (b36.) ; ds:= ds+1;
jl. d0. ; if ds>maxds then error(stack);
c15: hs w2 x1 ; ch:
jl. c3. ; stack(ds):= stack part; goto next;
c16: jl. w3 e3. ; trouble proc end: output(outpart);
c17: bz w0 x1+1 ; proc end: output(byte2(stack(ds)));
jl. w3 e3. ; comment end block proc;
bz w0 x1+3 ; outpart:= byte4(stack(ds)); comment exit proc;
c18: rl. w3 e9. ; block count:
al w3 x3+1 ; information1:= information1+1;
rs. w3 e9. ;
c19: al w1 x1-4 ; an out:
jl. c2. ; ds:= ds-1; goto out;
c64: jl. w3 e3. ; an block: output(outpart);
al w0 h34 ; outpart:= <exit block>;
jl. c18. ; goto block count;
c20: al w1 x1-4 ; an:
jl. c3. ; ds:= ds-1; goto next;
c21: jl. w3 e3. ; do:
al w0 h14 ; output(outpart);
rl. w3 b8. ; outpart:= <do>;
se w3 0 ; if for comma count <> 0 then
al w2 x2+h15 ; stack part:= stack part + do difference;
jl. c12. ; goto ch out;
c45: ;
b22=k+1; no of ext proc; ext proc check:
al w3 0 ; if no of ext proc <>1 then
sn w3 1 ; begin
jl. c18. ; a24:= outpart;
hs. w0 a24. ;
al w0 7 ; error out(<external>);
jl. w3 d27. ; outpart:= a24
a24=k+1 ; end;
al w0 0 ; goto block count;
jl. c18. ;
c22: rl. w3 b3. ; left parent:
sn w3 1 ; if operand <> 0 then
jl. c11. ; begin
al w2 h16 ; stack part:=
b43=k+1; oldstate
al w3 ; if oldstate=4 then <(left or ex>
sn w3 4 ; else <(proc subs>
al w2 h76 ; outpart:= <begin list>
al w0 h17 ; end;
jl. c11. ; goto ent out;
c23: al w1 x1-4 ; right: ds:= ds-1;
rs. w2 b3. ; operand:= stack part;
jl. w3 e3. ; output(outpart);
jl. d4. ; goto after operand;
c24: jl. w3 e3. ; bounds: output(outpart);
al w0 x2 ; outpart:= stack part;
al w2 0 ; stack par.:= 0;
jl. c23. ; goto right;
c25: rl. w3 b3. ; plusminus:
sz w3 1 ; if operand=0 then
rl w0 5 ; outpart:= stack part; comment monadic operator;
jl. c2. ; goto out;
c65: bz. w3 b22. ; count ext proc:
al w3 x3+1 ; no of ext proc:=
hs. w3 b22. ; no of ext proc + 1;
jl. c17. ; goto proc end;
\f
;jz.fgs 1981.03.20 algol 8, pass 3, page ...8...
c26: bz. w3 b5. ; binary:
sh w3 7 ; if(state > 7
jl. 8 ; ! operand = 0
sh w3 44 ; ! state > 44
sh w3 42 ; ! state <= 42
jl. d0.+8 ;
al w3 1 ; ! introuble)
se. w3 (b0.) ; then error(delimiter);
sn. w3 (b3.) ; state:= stackpart;
jl. d0.+8 ; goto out;
hs. w2 b5. ;
jl. c2. ;
c27: al w3 1 ; an trouble:
rs. w3 b0. ; introuble:= true;
al w1 x1-4 ; ds:= ds-1;
jl. d4. ; goto after operand;
c28: jl. w3 e3. ; nl:
jl. w3 e1. ; output(outpart);
d28: rl. w3 b3. ; nlcounter:= nlcounter+1;
sn w3 1 ; return from nl: goto if operand=0 then
jl. d3. ; next1 else
jl. d4. ; after operand;
c29: al w1 x1+4 ; formal list:
rs. w1 b9. ; ds:= stack entry:= ds+1;
rl. w2 j4. ; stack(ds):=
rl. w3 a15. ; instructions(sn w0 <ident>,al w0 <decl>);
wa. w3 b7. ; goto set stop;
jl. d26. ;
c30: bl. w0 a7. ; formal: w0:= ident;
a39: jl. w3 (b9.) ; goto stack(stack entry);comment search in
; stack for ident (in w0),see note at bottom of page 8;
a16: al w3 6 ; return a:
hs. w3 b6. ; head alarm:= true;comment ident already in stack;
jl. c3. ; goto next;
a15: al w0 0 ; instruction modifier used c29+6
a40=k+2; return b ;
a17: jl w3 x3+a40-a16; stop instruction used set stop+6
sl w0 0 ; return b: if w0>=0 and
sl w0 h3+1 ; w0<min.ident
jl. 4 ; then
jl. a16. ; goto return a;comment ident= procedure identifier;
dl. w3 j4.+2 ; w23:= ident words1-2;comment ident not found;
d26: ds w3 x1+2 ; into stack: stack(ds):= w23;
al w1 x1+4 ; set stop:
sl. w1 (b36.) ; ds:= ds+1; if ds>maxds then error(stack);
jl. d0. ; stack(ds):= instruction(jl w3 x3+a40-a16);
rl. w3 a17. ; goto next;
rs w3 x1 ;
jl. c3. ;
;when we enter formal the top of the stack has the following form:
;
; stack entry: sn w0 <procedure ident> , al w0 <decl>
; sn w0 <formal ident 1 > , jl w3 x3
; sn w0 <formal ident 2 > , jl w3 x3
; . . . . .
; w1: jl w3 x3+a40-a16
;
;not two identifiers are the same.
\f
;rc 1976.03.10 algol 6, pass 3, page ...9...
c31: al w3 b16 ; value:
hs. w3 b12. ; mod:= addr(modifier2);
jl. d12. ; goto setspec;
c32: al w3 b17 ; first spec:
hs. w3 b12. ; mod:= addr(modifier1);
d12: al w3 0 ; set spec:
hs. w3 a18. ; specpart(modifier1):= 0;
c33: hs. w2 b13. ; second spec:
ba. w0 a18. ; value allowed:= stack part;
hs. w0 a18. ; specpart(modifier1):= specpart(modifier1)+outpart;
jl. c3. ; goto next;
;the current form of the top part of the stack is:
;
; stack entry: sn w0 <proc ident> , al w0 <decl>
;for each formal identifier there is a double word in one of the
;following three formats:
;
; 1: no value, no spec before: sn w0 <formal ident> , jl w3 x3
; 2: value, no spec yet: sn w0 <formal ident> , jl w3 x3+d15-d13-2
; 3: already specified: sn w0 <formal ident> , al w0 <spec>
; at the end of the list: jl w3 x3+a40-a16
; no two identifiers are the same
c34: rl. w2 j4.+2 ; spec comma:
bl. w0 a7. ; goto stack(stack entry);comment search for ident in
d13: jl. w3 (b9.) ; stack, w2= ident word 2, w0=ident;
al w2 0 ; return aa: val:= 0; comment type 1 found in stack;
d14: ; modify:
b12=k+1; mod ; stack(return addr):= stack(return addr)+val+mod;
wa. w2 0 ; goto next;
lx w2 x3-2 ;
rs w2 x3-2 ;
jl. c3. ;
a41: al w3 6 ; return bb:
hs. w3 b6. ; head alarm:= true;
sl w0 0 ; if ident>=0 and ident<min.ident
sl w0 h3+1 ; then goto next;
jl. 4 ; comment the identifier
jl. c3. ; has already been specified, type 3;
dl. w3 j4.+2 ; w2:= ident word 1;
lx. w3 b10. ; w3:= ident word 2 + modifier 1;
jl. d26. ; goto into stack; comment no match in stack;
d15: rs w2 x3-2 ; return cc: comment type 2 found in stack(return addr);
al w2 h18 ; stack(return addr,right word):= ident word 2;
b13=k+1; value allowed ;
sn w2 0 ; if -, value allowed then
jl. d14. ; begin
al w2 6 ; head alarm := true;
hs. w2 b6. ; val:= 0
al w2 0 ; end; comment value allowed: yes=h18, no=0;
jl. d14. ; goto modify;
\f
;rc 1976.03.10 algol 6, pass 3, page ...10...
h.
b10: jl w3 x3; modifier 1,specification:(al w0) exor (jl w3 x3),
a18: 0; spec
w. ; modifier 1 is initialized in b26,page 2;
b11: d15-d13-2; modifier 2,value
b16=b11-d14 ; addr of modifier2 relative to d14
b17=b10-d14 ; addr of modifier1 relative to d14
c.(:a40-a16-a41+d13+2-1:)a.(:a41-d13-2-1-a40+a16:);
m. pass 3: a40-a16<>a41-d13-2
;if a40-a16<>a41-d13-2 then output warning message during assembly
z.
c35: hs. w2 b14. ; compl head:
al w0 x1-4 ; no spec:= stack part;
ws. w0 b9. ; no of par:= ds-1-stackentry;
ls w0 -2 ;
rl. w2 b9. ;
bz w3 x2+3 ; decl byte:= byte4(stack(stack entry));
sn w0 0 ; if no of par=0 then
al w3 x3+6 ; decl byte:= decl byte+6;
bz. w0 b6. ;
se w0 0 ; if head alarm then
al w3 h19 ; decl byte:= <decl undef proc>;
hs w3 x2+3 ; stack(stack entry):= decl byte;
al w3 0 ; introuble:= false;
rs. w3 b0. ;
a20: al w0 h73 ; for i:= stack entry step 1 until ds-1 do
jl. w3 e3. ; begin output(<internal operand>);
bz w0 x2+1 ; output(byte2(stack(i)));
jl. w3 e3. ; spec:= byte4(stack(i));
bz w0 x2+3 ; if byte3(stack(i)) <> (al w0) then
bz w3 x2+2 ; spec:= no spec;
se. w3 (b25.) ; if spec=<unspec> then
b14=k+1; no spec ; head alarm:= true;
al w0 0 ; output(spec)
al w3 6 ; end;
sn w0 h20 ;
hs. w3 b6. ;
jl. w3 e3. ;
al w2 x2+4 ;
se w2 x1 ;
jl. a20. ;
al w3 e3-j3 ;
hs. w3 j3.+1 ; output identifier:= true;
rl. w1 b9. ; ds:= stack entry;
dl. w0 b15. ; stack(ds):= <beg proc><end proc block>
ds w0 x1+2 ; <0><exit proc>;
al w0 h22 ; output(<end spec>);
jl. w3 e3. ; \f
;rc 11.1.1971 algol 6, pass 3, page 11
jl. w3 e11. ; repeat input byte:= true;
al w0 6 ;
b6=k+1; head alarm
sn w0 ; if head alarm then
jl. w3 d27. ; error out(<head>);
al w3 2 ; if operand=1 then
se. w3 (b3.) ; begin
jl. d4. ; output(<internal operand>);
al w0 h73 ; output(ident);
jl. w3 e3. ; end;
bz. w0 a7. ; goto after operand;
jl. w3 e3. ;
jl. d4. ;
h. ; proc end bytes to be placed in stack:
b41: 0 ; begproc
b42: 0 ; end proc block
b15: 0 ; 0
b2: 0 ; exit proc
w.
c36: bz. w0 j3.+1 ; semicolon:
sn w0 d8-j3 ; if -, output identifier then
jl. c35. ; goto compl head;
al. w3 b37. ; control word:= addr of semicolon7a words in table;
jl. d6. ; goto control word found;
c37: rs. w2 b8. ; for:
jl. c2. ; for comma count:= 0; goto out;
c38: am -2 ; while count:
c39: al w3 1 ; for comma count:= for comma count-1;
am. (b8.) ; goto chout;
al w3 x3 ; count ch out:
rs. w3 b8. ; for comma count:= for comma count+1;
jl. c12. ; goto ch out;
h. ; label proc word to be placed in stack by switch:
b18: 0 , h23 ; <0><end block>
0 , h13 ; <0><exit type proc>
w.
c40: bz w3 x1 ; switch:
sn w3 x2 ; if stack(ds)=stack part then
al w3 h12 ; stack(ds):= <begin block>;
hs w3 x1 ;
dl. w3 b18.+2 ; stack(ds+1):= begin label proc;
ds w3 x1+6 ; stack part := outpart;
bz w2 1 ; goto ent;
jl. c14. ;
c41: al w0 h24 ; switch assign:
jl. w3 e3. ; output(<decl label proc with par>);
al w0 h73 ;
jl. w3 e3. ; output(<internal operand>);
al w0 h11 ;
jl. w3 e3. ; output(<dummy identifier>);
al w0 h26 ;
jl. w3 e3. ; output(<spec value integer>);
al w0 h22 ;
jl. w3 e3. ; output(<end spec>);
\f
;rc 11.1.1971 algol 6, pass 3, page 12
al w0 h27 ;
jl. w3 e3. ; output(<case expr>);
al w0 h73 ;
jl. w3 e3. ; output(<internal operand>);
al w0 h11 ;
jl. w3 e3. ; output(<dummy identifier>);
al w0 h28 ; outpart:= <of switch>;
jl. c11. ; goto ent out;
c63: bz w3 x1 ; set zone:
se w3 h50 ; if stack(ds)= <beg block>
sn w3 h12 ; ! stack(ds)= <beg clean>
jl. a44. ; then
al w2 h25 ; stack(ds):= stack part;
am -3 ; else
a44: hs w2 x1 ; byte2(stack(ds-1)):= <end zone block>;
jl. c7. ; goto set decl;
c42: jl. w3 e2. ; transmit error: input(byte);
al w0 x2 ; comment error identification byte;
al. w3 d28. ; error out(byte);
jl. d27. ; goto return from nl;
b19: 0, 0 ; litbyte(1:4);
c43: hs. w0 b21. ; string: kind:= outpart;
hs. w2 b20. ; no of litbytes:= stack part;
al. w0 b19. ; for i:= 1 step 1 until 4 do
a22: jl. w3 e2. ; begin
hs w2 (1) ; input(byte);
ba. w0 1 ; litbyte(i):= byte;
se. w0 b19.+4 ; end;
jl. a22. ; goto output literal;
jl. d17. ;
c44: hs. w0 b21. ; logic value:
hs. w2 b19. ; kind:= outpart;
al w2 1 ; litbyte(1):= stack part;
hs. w2 b20. ; no of litbytes:= 1;
jl. d17. ; goto output literal;
;c45: see page 7
;c46: see page 6
d16: rl. w1 b40. ; output number: restore(w1);comment stack pointer;
jl. w3 e11. ; repeat input byte:= true;
d17: rl. w0 b0. ; output literal:
sz w0 1 ; if introuble then
jl. d25. ; goto literal trouble out;
bz. w2 b5. ; if state>7 then
al w0 h41 ; begin
al. w3 a45. ; output(<vanished operand>);
sl w2 8 ; goto const err;
jl. e3. ; end;
al w2 0 ;
a23: bz. w0 x2+b19. ; for i:= 1 step 1 until no of litbyte do
jl. w3 e3. ; output(litbyte(i));
al w2 x2+1 ;
b20=k+1 ; no of litbytes
se w2 4 ;
jl. a23. ;
b21=k+1 ; kind
al w0 ;
jl. w3 e3. ; output(kind);
\f
;jz.fgs 1981.03.20 algol 8, pass 3, page ...13...
rl. w3 b3. ; after const out:
se w0 h33 ; if kind <> <string next> then
al w3 x3+7 ; operand:= operand+3;
rs. w3 b3. ; if operand=3 then
sn w3 8 ; goto after operand;
jl. d4. ; const err:
a45: jl. w3 e2. ; input(byte);
jl. d0.+16 ; error(operand);
c66: rl. w3 b3. ; ifnum out:
se w3 1 ; if operand <> 0 then
jl. c2. ; goto out;
bz. w3 b43. ; state := oldstate;
hs. w3 b5. ;
d19: rs. w1 b40. ; initialize number: save(w1);comment stack pointer;
jl. w3 e11. ; repeat input byte:= true;
ld w1 64 ; comment w01 is used to build numbers;
ds. w1 b19.+2 ; nstate:= number:= digit:= factor:= 0;
ds. w1 b27. ;
al w2 0 ;
d18: hs. w2 b29. ; next of number:
d20: jl. w3 e2. ; nstate:=w2; input(byte);
sl w2 h1 ; if byte< h1
sl w2 h1+10 ; or byte>=h1+10 then
jl. a1. ; goto other_then_digit else
jl. a14. ; goto digit;
a1: sl w2 h1+10 ; other_than_digit:
sl w2 h1+14 ; if byte< h1+10 or byte>=h1+14 then
jl. a2. ; goto other_than_number_constituent else
jl. a21. ; goto number_constituent;
a2: se w2 h78 ; other_than_number_constituent:
jl. a5. ; if byte<>new line then goto terminator;
jl. w3 e1. ; new_line:
rs. w0 a34. ; carret; save w0;
al w0 h88 ; byte:=new line;
jl. w3 e3. ; output(byte);
rl. w0 a34. ;
jl. d20. ; goto next_of_number;
a34: 0 ; saved w0:
a5: al w3 0 ; terminator:
jl. a25. ; class:=0; goto central_action;
a21: al w3 x2-h1-8 ; number_constituent: ('.+-)
ls w3 2 ; class:=(byte-h1-8)*4;
jl. a25. ; goto central_action;
a14: al w3 4 ; digit:
al w2 x2-h1 ; class:=4; byte:=byte-h1;
rs. w2 b27.+2 ; digit:=byte;
a25: dl. w3 x3+g4. ; central action:
b29=k+1; nstate
ld w3 ;
la. w3 b32. ;
jl. x3+c47. ; goto instruction(number action);
\f
; jz.fgs 1981.03.20 algol 8, pass 3, page ...13a...
d21: ss. w1 b44. ; build_number:
sh w0 -1 ; if f.w.(number)<f.w.(maxlong//10) then
jl. d11. ; goto number_ok;
sn w0 0 ; maybe_error1:
se w1 0 ; if number>maxlong//10 then
jl. c49. ; goto error1;
rl. w0 b27.+2 ; number=maxlong:
sl w0 8 ; if digit>=8 then
jl. c49. ; goto error1;
d11: dl. w1 b19.+2 ; number_ok:
ad w1 2 ;
aa. w1 b19.+2 ;
ad w1 1 ; number:= number*10 + digit;
aa. w1 b27.+2 ;
ds. w1 b19.+2 ;
jl. d18. ; goto next of number;
d22: wm. w1 b31. ; build exponent:
sn w0 0 ; exp:= exp*10;
sh w1 -1 ; comment exp is build in w1;
jl. c49. ; if overflow then goto error1;
wa. w1 b27.+2 ; exp:= exp + digit;
jl. d18. ; goto next of number;
\f
;jz.fgs 1981.03.20 algol 8, pass 3, page ..14...
c50:
c47: rl. w2 b26. ; digit after point:
al w2 x2+1 ;
rs. w2 b26. ; factor:= factor+1;
al w2 -18 ; nstate:= -18;
jl. d21. ; goto build number;
c48: al w2 -6 ; digit before point: nstate:= -6;
jl. d21. ; goto build number;
c49: al w2 -42 ; error 1: nstate:= -42;
jl. d18. ; goto next of number;
c51: al w2 -36 ; digit in exp: nstate:= -36;
jl. d22. ; goto build exponent;
c52: al w0 0 ; ten 1:
al w1 1 ; number:= 1;
ds. w1 b19.+2 ;
c53: al w2 1 ; ten2:
rs. w2 b30. ; expsign:= 1;
al w2 -24 ; nstate:= -24;
al w1 0 ; exp:= 0;
jl. d18. ; goto next of number;
c54: al w2 -12 ; point: nstate:= -12;
jl. d18. ; goto next of number;
c55: al w2 -1 ; expminus:
rs. w2 b30. ; expsign:= -1;
c56: al w2 -30 ; expplus: nstate:= -30;
jl. d18. ; goto next of number;
c57: jl. d23. ; goto error 2;
c58: jl. a26. ; goto finish 1;
c59: jl. a27. ; goto finish 2;
c60: jl. a28. ; goto finish 3;
;c61 see page 6
;c62 see page 6
;c63 see page 6
;c64 see page 6
;c65 see page 7
c. c60-c47-64 ; if c60-c47>64 then output warning
m. pass3: c60-c47>64
z. ; message during assembling;
d23: rl. w1 b40. ; error 2:
rl. w3 b0. ; if introuble
se w3 0 ; then repeat input byte:= true;
jl. w3 e11. ;
al w0 h41 ; restore(stack pointer);
jl. w3 e3. ; output(<vanished operand>);
jl. d0.+24 ; error(constant);
a26: sn w0 0 ; finish 1: comment integer;
sh w1 -1 ; if integer overflow (number) then
jl. a46. ; goto finish 4;
rs. w1 b19. ; litbyte(1:2):= right part of number;
al w3 2 ; no of litbytes:= 2;
hs. w3 b20. ; kind:= <integer literal>;
al w3 h39 ; goto output number;
hs. w3 b21. ;
jl. d16. ;
\f
;jz.fgs 1981.03.20 algol 8, pass 3, page ...15...
a46: al w3 h91 ; finish 4: comment long;
hs. w3 b21. ; kind := <long literal>;
al w3 4 ; no of litbytes := 4;
hs. w3 b20. ;
jl. a30. ; goto store out;
a27: al w1 1 ; finish 2: comment real without exponent;
rs. w1 b30. ; exp:= 0;
al w1 0 ; expsign:= 1;
a28: rs. w1 b28. ;
al w3 4 ; finish 3: comment real with exponent;
hs. w3 b20. ; no of litbytes:= 4;
al w3 h40 ; kind:= <real literal>;
hs. w3 b21. ;
d24: dl. w1 b19.+2 ; pack real:
nd. w1 b38. ; convert:
b38=k+1; exp ; normalize(number);
al w3 ; exp:= - no of shifts;
sn w3 -2048 ; if exp= -2048 then
jl. a29. ; goto set exp;
al w3 x3+48 ; exp:= exp + 48;
ld w1 -1 ; round:
aa. w1 b33.+2 ; number:= number + round const;
nd w1 3 ; exp1 := normalize(number);
ba w3 3 ; exp := exp+exp1;
a29: hs w3 3 ; set exp: exp part. number:= exp;
rl. w2 b30. ; make float exp:
rl. w3 b28. ; if expsign=-1 then
se w2 1 ; exp:= -exp;
ac w3 x3 ;
ws. w3 b26. ; exp:= exp - factor; comment this is final exponent;
sn w3 0 ; if exp=0 then
jl. a30. ; goto store out;
sh w3 999 ; if exp>=1000
sh w3 -1000 ; or exp<=-1000
jl. d23. ; then goto error2;
ns w3 5 ;
bl w2 5 ; n:= no of significant bits.abs(exp);
al w2 x2+14 ; l:= 14;
ls w2 2 ; comment w2 uneven if positive exp so
al w2 x2+1 ; boolean exp<-512 only true for neg exp;
sl w3 0 ; if exp < 0 then
jl. a31. ; begin
ls w3 1 ; l:= 23 - (n - 2);
al w2 x2-5 ; number:= number/10**(2**n)
sn w2 0 ; end;
am -4 ;
fd. w1 x2+g19. ;
a31: rs. w2 b34. ;
a32: ls w3 1 ; for j:= l step 1 until 23 do
al w2 x2-4 ; if bit(j).exp = 1
sn w3 0 ; then number:= number*10**(2**(23-j));
jl. a33. ;
sh w3 0 ;
fm. w1 x2+g18. ;
jl. a32. ;
a33: am. (b34.) ; if exp < -512
sn w1 x1 ; then number:= number/10**(2**9);
fd. w1 g18. ;
a30: ds. w1 b19.+2 ; store out: litbyte(1:4):= number;
jl. d16. ; goto output number;
;d25:see page 3
;d26:see page 8
;d27:see page 3
;d28:see page 8
\f
; jz.fgs 1982.07.02 algol 8, pass 3, page ...15a...
c71: jl. w3 e3. ; prelim of stat:
; outbyte(trouble);
al w0 h82+37 ; outpart := <end case stat>;
jl. c19. ; goto an out;
\f
;jz.fgs 1981.03.20 algol 8, pass 3, page ...16...
;numbers:
;input byte values in the range from h1(base of numbers) to h2(base
;of normal delimiters) call for a certain logic which reads, analyzes
;and packs the numbers using the following table. this is an action-
;table which is accessed by 1: the class of current input byte and
;2: the current number state. the action is given in the table as an
;address relative to c47=digit after point.
;max. real number:
;when a number of type real is assembled, it is first packed as an
;48 bits integer which later is converted. Allmost the whole range
;allowed by this double word is utilized, and consistency is
;maintained with the read standard procedures which are not allowed
;to cause an integer overflow. a test is performed before
;number:=number*10+digit. The test is carried out by first test-
;ing the double word against maxlong//10. If less there are no
;troubles. If greater, troubles will come. If equal, digit is
;tested against 7 (number*10+digit<=(maxlong//10)*10+7).
;In short, the full range of positive longs becomes available
;to number:
; 140 737 488 355 327
;the number states (nstate) are:
; 0 before number
; -6 following digit before point
; -12 following point
; -18 following digit after point
; -24 following exponent base
; -30 following exponent sign
; -36 following digit after exponent base
; -42 in erroneous number
c48=c48-c47, c49=c49-c47, c50=c50-c47, c51=c51-c47, c52=c52-c47
c53=c53-c47, c54=c54-c47, c55=c55-c47, c56=c56-c47, c57=c57-c47
c58=c58-c47, c59=c59-c47, c60=c60-c47,
h.
; numberstate:
; -42 -36 -30 -24 -18 -12 -6 0
g4=k+2
c57 <6+ c60 , c57 <6+ c57 , c59 <6+ c57 , c58 <6+ c57; terminator
c49 <6+ c51 , c51 <6+ c51 , c50 <6+ c50 , c48 <6+ c48; digit
c49 <6+ c49 , c49 <6+ c49 , c53 <6+ c49 , c53 <6+ c52; '
c49 <6+ c49 , c49 <6+ c49 , c49 <6+ c49 , c54 <6+ c54; .
c57 <6+ c60 , c57 <6+ c56 , c59 <6+ c57 , c58 <6+ c57; +
c57 <6+ c60 , c57 <6+ c55 , c59 <6+ c57 , c58 <6+ c57; -
w.h.
;exponent table for generating real numbers
1280, 0, 0, 4 ; 10**(2**0)
1600, 0, 0, 7 ; 10**(2**1)
1250, 0, 0, 14 ; 10**(2**2)
1525, 3600, 0, 27 ; 10**(2**3)
1136, 3556, 3576, 54 ; 10**(2**4)
1262, 726, 3393, 107 ; 10**(2**5)
1555, 3087, 2640, 213 ; 10**(2**6)
1181, 3363, 3660, 426 ; 10**(2**7)
1363, 3957, 4061, 851 ; 10**(2**8)
1816, 3280, 1397, 1701 ; 10**(2**9)
g18=k-2, g19=g18+4
\f
; jz 1979.09.27 algol 8, pass 3, page 17
;stack words
;there are two types of stack words, repeat words and terminating words,
;each consisting of four bytes:
; 1. repeat words cause the search in the stack to be repeated. they
; are identified by a one in the leftmost position. there again
; are two types of repeat words:
; 1.1 repeat words with output identified by a zero in the second position
; from left. the output part is in byte no. 4.
; 1.2 repeat words without output identified by a one in the second
; position from left.
; 2. terminating words are identified by a zero in the leftmost position.
; they stop the search in the stack. the format is the same as for
; normal action words (see comment to control table) and they are
; treated by the same mechanism - allowed operand part however is
; not used.
;stack words.
;new state, switching part, stack part, output part
h.
;semicolon 4 and semicolon 7:
g5=k-h43
3<10, 0, 0, 0;h43 trouble :-,-,-
2<10, 0, 0,h31+ 7;h44 thenst :-,-,end thenst
2<10, 0, 0,h31+ 8;h45 goto :-,-,end goto
2<10, 0, 0,h31- 1;h99 disable :-,-,enable
2<10, 0, 0,h30+113;h46 assign :-,-,end assign
2<10, 0, 0,h30+ 44;h47 single do:-,-,end single do
2<10, 0, 0,h30+ 43;h48 do :-,-,end do
2<10, 0, 0,h31+ 6;h49 else stat:-,-,end elsest
27,c2 -j1, 0,h82+ 32;h50 beg clean:out,-,semicolon
27,c2 -j1, 0,h82+ 32;h12 beg block:out,-,semicolon
27,c2 -j1, 0,h82+ 32;h74 beg zonbl:out,-,semicolon
27,c2 -j1, 0,h82+ 32;h37 beg ext :out,-,semicolon
27,c2 -j1, 0,h82+ 32;h51 beg body :out,-,semicolon
27,c2 -j1, 0,h30+ 42;h52 of stat :out,-,case semicolon
28,c17-j1, 0, 0;h53 beg proc :procend,-,-
37,c65-j1, 0, 0;h75 beg extpr:count ext proc,-,-
2<10, 0, 0,h30+122;h29 :=switch :-,-,end switch
;end 1 and end 2:
g6=k-h43
3<10, 0, 0, 0;h43 trouble :-,-,-
2<10, 0, 0,h31+ 7;h44 thenst :-,-,end thenst
2<10, 0, 0,h31+ 8;h45 goto :-,-,end goto
2<10, 0, 0,h31- 1;h99 disable :-,-,enable
2<10, 0, 0,h30+113;h46 assign :-,-,end assign
2<10, 0, 0,h30+ 44;h47 single do:-,-,end single do
2<10, 0, 0,h30+ 43;h48 do :-,-,end do
2<10, 0, 0,h31+ 6;h49 else st :-,-,end elsest
20,c19-j1, 0,h82+ 23;h50 beg clean:an out,-,end clean
20,c64-j1, 0,h23 ;h12 beg block:an block,-,end block
20,c64-j1, 0,h25 ;h74 beg zonbl:an block,-,end zone block
20,c45-j1, 0,h82+ 25;h37 beg ext :ext proc check,-,end external
10,c20-j1, 0, 0;h51 beg body :an,-,-
20,c19-j1, 0,h82+ 37;h52 of stat :an out,-,end casest
\f
; jz 1979.09.27 algol 8, pass 3, page 18
;stack words: new state, switching part, stack part, output part;
;else 1 and else2:
g7=k-h42
3,c12-j1, h6,h31+ 3;h42 thenex :ch out,else ex,else ex
34,c27-j1, 0, 0;h43 trouble :an trouble,-,-
9,c12-j1, h49,h82+ 35;h44 thenst :ch out,else st,else st
2<10, 0, 0,h31+ 8;h45 goto :-,-,end goto
2<10, 0, 0,h31- 1;h99 disable :-,-,enable
2<10, 0, 0,h30+113;h46 assign :-,-,end assign
;comma 7:
g8=k-h29
2,c2 -j1, 0,h30+120;h29 :=switch :out,-,case comma
2,c39-j1, h55,h30+108;h54 single comma:countchout,:=for,simp for
2,c39-j1, h54,h30+108;h55 :=for: countchout,single comma,simp for
2,c39-j1, h55,h30+110;h56 until: countchout,:=for,stepelem
2,c39-j1, h55,h30+111;h57 while: countchout,:=for,while elem
2,c2 -j1, 0,h30+ 51;h58 (zone :out,-,zone comma
2,c12-j1, h70,h31+ 23;h59 next colon:chout,arrcomma,not first bound
2,c12-j1, h70,h31+ 22;h60 firstcolon:chout,arrcomma,first bound
2,c12-j1, h62,h30+ 47;h16 (proc subs:chout,,proc subs,first comma
2,c12-j1, h63,h30+ 47;h61 (left :chout,,left,first comma
2,c12-j1, h77,h30+ 47;h76 (left orex:chout,,left or ex,first comma
2,c2 -j1, 0,h30+ 48;h62 ,proc subs:out,-, not first comma
2,c2 -j1, 0,h30+ 48;h63 ,left :out,-, not first comma
2,c2 -j1, 0,h30+ 48;h77 ,left orex:out,-,not first comma
2,c2 -j1, 0,h30+120;h64 of exp :out,-, case comma
;right parenthesis 2:
g9=k-h58
13,c19-j1, 0,h82+ 27;h58 (zone :an out,-,end zone decl
13,c24-j1,h82+26,h31+ 23;h59 next colon:bounds,end bounds,not first bound
13,c24-j1,h82+26,h31+ 22;h60 firstcolon:bounds,end bounds,first bound
1,c23-j1, 1<2,h30+ 45;h16 (proc subs:right,new op,end list one
27,c23-j1, 1<2,h30+ 45;h61 (left :right,new op,end list one
4,c23-j1, 1<2,h30+ 45;h76 (left orex:right,new op,end list one
1,c23-j1, 1<2,h30+ 46;h62 ,proc subs:right,new op,end list more
27,c23-j1, 1<2,h30+ 46;h63 ,left :right,new op,end list more
4,c23-j1, 1<2,h30+ 46;h77 ,left orex:right,new op,end list more
1,c23-j1, 1<3,h30+119;h64 of exp :right,new op,end case exp
43,c23-j1, 1<2,h30+ 45;h92 fieldpar :right,new op,end list one
44,c23-j1, 1<2,h30+ 45;h93 fieldpar :right,new op,end list one
45,c23-j1, 1<2,h30+ 45;h94 fieldpar :right,new op,end list one
1,c23-j1, 1<3,h31+ 31;h65 (subex :right,new op,)
;do 1:
g10=k-h54
27,c21-j1, h47,h31+ 32;h54 singlecomma:do,single do,simple for do
27,c21-j1, h47,h31+ 32;h55 :=for :do,single do,simple for do
27,c21-j1, h47,h31+ 33;h56 until :do,single do,step elem do
27,c21-j1, h47,h31+ 34;h57 while :do,single do,while elem do
;then 1:
g11=k-h66
5,c12-j1, h42,h31+ 2;h66 if ex :ch out,thenex,thenex
8,c12-j1, h44,h82+ 34;h67 if st :ch out,thenst,thenst
\f
; jz.fgs 1982.07.02 algol 8, pass 3, page 19
;stack words: new state, switching part, stack part, output part;
;step 1:
g12=k-h54
2,c12-j1, h68,h31+ 10;h54 singlecomma:ch out,step,step
2,c12-j1, h68,h31+ 10;h55 :=for :ch out,step,step
;until 1:
g13=k-h68
2,c12-j1, h56,h31+ 11;h68 step :ch out, until,until
;while 1:
g14=k-h54
2,c38-j1, h57,h30+112;h54 singlecomma:while count,while,while
2,c12-j1, h57,h30+112;h55 :=for :ch out,while,while
;colon 3:
g15=k-h69
2,c12-j1, h60,h30+ 52;h69 (arr :ch out,first colon,boundcol
2,c12-j1, h59,h30+ 52;h70 array comma:ch out,next colon,boundcol
;of 1:
g16=k-h71
11,c19-j1, 0,h30+118;h71 case ex :an out,-,of expr
26,c12-j1, h79,h82+ 36;h72 case st :ch out,-,of stat
\f
; jz.fgs 1982.07.02 algol 8, pass 3, page 20
;stack words: new state, switching part, stack part, output part;
;trouble 1:
g17=k-h6
3<10, 0, 0, 0;h6 else ex :-,-,-
3<10, 0, 0, 0;h42 then ex :-,-,-
3<10, 0, 0, 0;h43 trouble :-,-,-
34,c11-j1, h43,h30+ 55;h44 thenst :ent out,trouble,trouble
34,c12-j1, h43,h30+ 55;h45 goto :ch out, trouble,trouble
3<10, 0, 0, 0;h99 disable :-,-,-
34,c12-j1, h43,h30+ 55;h46 assign :ch out,trouble,trouble
34,c11-j1, h43,h30+ 55;h47 single do:ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h48 do :ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h49 else stat:ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h50 beg clean:ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h12 beg block:ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h74 beg zonbl:ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h37 beg ext :ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h51 beg body :ent out,trouble,trouble
34,c11-j1, h43,h30+ 55;h52 of stat :ent out,trouble,trouble
32,c16-j1, 0,h30+ 55;h53 beg proc :trprocend, - ,trouble
32,c16-j1, 0,h30+ 55;h75 beg extpr:trprocend, - ,trouble
3<10, 0, 0, 0;h29 := switch:-,-,-
3<10, 0, 0, 0;h54 singlecomma:-,-,-
3<10, 0, 0, 0;h55 :=for :-,-,-
3<10, 0, 0, 0;h56 until :-,-,-
3<10, 0, 0, 0;h57 while :-,-,-
32,c19-j1, 0,h30+ 55;h58 (zone :an out,-,trouble
32,c19-j1, 0,h30+ 55;h59 next colon :an out,-,trouble
32,c19-j1, 0,h30+ 55;h60 first colon:an out,-,trouble
3<10, 0, 0, 0;h16 (proc subs :-,-,-
3<10, 0, 0, 0;h61 (left :-,-,-
3<10, 0, 0, 0;h76 (left or ex:-,-,-
3<10, 0, 0, 0;h62 ,proc subs :-,-,-
3<10, 0, 0, 0;h63 ,left :-,-,-
3<10, 0, 0, 0;h77 ,left or ex:-,-,-
3<10, 0, 0, 0;h64 of expr :-,-,-
3<10, 0, 0, 0;h92 fieldpar :-,-,-
3<10, 0, 0, 0;h93 fieldpar :-,-,-
3<10, 0, 0, 0;h94 fieldpar :-,-,-
3<10, 0, 0, 0;h65 (subexpr :-,-,-
3<10, 0, 0, 0;h66 if expr :-,-,-
3<10, 0, 0, 0;h67 if stat :-,-,-
3<10, 0, 0, 0;h68 step :-,-,-
32,c19-j1, 0,h30+ 55;h69 (array :an out,-,trouble
32,c19-j1, 0,h30+ 55;h70 arr comma :an out,-,trouble
3<10, 0, 0, 0;h71 case expr :-,-,-
3<10, 0, 0, 0;h72 case stat :-,-,-
20,c71-j1, 0,h30+ 55;h79 prelim of stat: prelim of stat,-,trouble
\f
;rc 5.3.1968 algol 5, pass 3, page 21
;control tables
;there are two types of control tables: main control table and control
;table for specials, one of which is accessed by the delimiter input bytes.
;
;1. main control table.
; for each entry the table is arranged as follows:
;
; delimiter action word p
; - - p-1
; . . . . . .
; - - - 1
; entry: 40 delimiter meaning groups
;
;the delimiter meaning groups consist of 3 bits each,thus making 10
;bytes: each group corresponds to a possible state, group no. 0 to state
;no. 0 and so on. a group corresponding to a certain state contains the
;number of the delimiter action word which is relevant for this state.
;there are two types af delimiter action words:
;
;1.1 normal action words identified by zeroes in the two leftmost
; positions. they consist of four bytes and have the following format:
; byte no. 0:action word identification bits (2 bits=zero pos.0-1)
; new state part (6 bits pos.2-7)
; allowed operand part (4 bits pos.8-11)
; byte no. 1: switch part (12 bits)
; byte no. 2: stack part (12 bits)
; byte no. 3: output part (12 bits)
; when the action indicated by the switch part is entered we have:
; w0= output part, right justified.
; w2= stack part, - -
;
;1.2 search words identified by a one in the leftmost position. they
; consist of four bytes and have the following format:
; byte no. 0: search word identification bit (a one in pos.0) a one in
; pos.1 indicates that test for procedure call is performed
; (search statement);a zero in pos.1 indicates that test for
; else expression is performed (search in expression).the
; remaining bits are irrelevant.
; byte no. 1: base address (12 bits) which points into the relevant
; table for stack words.
; byte no. 2: low-1
; byte no. 3: up
; low and up indicates the limits for allowed delimiters in the stack.
; when the search action is entered we have:
; w2= low-1 (pos.0-11)+ up (pos.12-23)
;
;2. control table for special delimiters contains three bytes for each
; special delimiter:
; byte no. 0: switch part (12 bits)
; byte no. 1: parameter part (12 bits)
; byte no. 2: output part (12 bits)
; when the action indicated by the switch part is entered we have:
; w0= output part,right justified
; w2= parameter part,right justified
\f
;rc 5.3.1968 algol 5, pass 3, page 22
;meaning of states:
;no. name preceding symbols
; 0 forbidden
; 1 in expression < <= = >= > <> & ! == => )
; 2 expecting expression , step until while : goto if ( := case
; 3 after else expression else expression
; 4 expection left or expression := )
; 5 after then expression then
; 6 in expression + - * / ** //real string abs round
; mod entier add extract shift
; 7 after not -,
; 8 after then statement then :
; 9 after else statement else :
; 10 after end body end
; 11 after of expression of
; 12 in value part value ,
; 13 aft.array,zone,zone array segm. )
; 14 in specification list procedure field switch string label ,
; 15 after type specification integer real boolean long
; 16 in heading procedure
; 17 in declaration list integer real boolean long field ,
; 18 after formals )
; 19 after type declaration integer real boolean long
; 20 after compound statement end
; 21 in formal list ( , parameter-delimiter
; 22 in for clause for
; 23 in switch declaration switch
; 24 in array declaration ,
; 25 after own own
; 26 after of statement of
; 27 expecting statement ; do : begin (after head:) goto for if :
; case ( := )
; 28 ecpecting statement or decl. ; begin
; 29 begin after head begin
; 30 expect. value or specification ;
; 31 expect. body or specification ;
; 32 trouble in declarations
; 33 trouble in head
; 34 trouble in statement
; 35 in zone declaration ,
; 36 in zone array declaration array ,
; 37 after external external
; 38 after external type integer real boolean
; 39 after declaration zone zone
; 40 after declaration array array
; 41 after specification zone zone
; 42 after specification array array
; 43 in expression after point . )
; 44 exp. left or expr. after . . )
; 45 exp. statement after point . )
; 46
; 47
;possible operand situations:
; 0: no operand
; 1: identifier
; 2: subscripted variable or procedure call
; 3: the rest: literals,subexpressions.
\f
; jz 1979.06.22 algol 8, pass 3, page ...23...
;input conversion table for special delimiters to special control table
h.
g1=k-h0
-1, 2, 5, 8, 11; true false * / **
14, 17, 20, 23, 26; // < =< = >=
29, 32, 35, 38, 41; > =, & ! ==
44, 47, 50, 53, 56; => mod shift extract add
59, 62, 65, 68, 71; endpass error newline stringfirst stringnext
74, 77 ; exit continue
;input conversion table for normal delimiters to main control table
w. g2=k-h2, h.
f0 , f1 , f2 , f3 , f4 ; . + - : goto
f5 , f6 , f7 , f8 , f9 ; begin external for if own
f10, f11, f12, f13, f14 ; integer long real boolean zone
f15, f16, f17, f18, f19 ; field procedure array switch string
f20, f21, f22, f23, f24 ; label value ; end else
f25, f26, f27, f28, f29 ; ( -, step until while
f30, f31, f32, f33, f34 ; , := then trouble do
f35, f36, f37, f38, f39 ; abs case of round entier
f40, f41, f42, f43 ; extend paramdelim ) disable
w. h.
;control table for special delimiters
;switch part, parameter part, output part
g3:
c44 -j1,-1,h81+ 3 ; 0 true :logic value,true ,bool literal
c44 -j1, 0,h81+ 3 ; 3 false :logic value,false,bool literal
c26 -j1, 6,h31+ 15 ; 6 * :binary,new state, *
c26 -j1, 6,h31+ 16 ; 9 / :binary,new state, /
c26 -j1, 6,h31+ 18 ; 12 ** :binary,new state, **
c26 -j1, 6,h31+ 17 ; 15 // :binary,new state, //
c26 -j1, 1,h32+ 0 ; 18 < :binary,new state, <
c26 -j1, 1,h32+ 1 ; 21 =< :binary,new state, =<
c26 -j1, 1,h32+ 2 ; 24 = :binary,new state, =
c26 -j1, 1,h32+ 3 ; 27 >= :binary,new state, >=
c26 -j1, 1,h32+ 4 ; 30 > :binary,new state, >
c26 -j1, 1,h32+ 5 ; 33 =, :binary,new state, =,
c26 -j1, 1,h31+ 26 ; 36 & :binary,new state, &
c26 -j1, 1,h31+ 27 ; 39 ! :binary,new state, !
c26 -j1, 1,h31+ 29 ; 42 == :binary,new state, ==
c26 -j1, 1,h31+ 28 ; 45 => :binary,new state, =>
c26 -j1, 6,h31+ 12 ; 48 mod :binary,new state, mod
c26 -j1, 6,h31+ 19 ; 51 shift :binary,new state, shift
c26 -j1, 6,h31+ 20 ; 54 extract:binary,new state, extract
c26 -j1, 6,h31+ 21 ; 57 add :binary,new state, add
c1 -j1, 0, 0 ; 60 endpass:endpass,-,0
c42 -j1, 0, 0 ; 63 error :transmit error,-,-
c28 -j1, 0,h80+ 0 ; 66 newline:newline,-,newline
c43 -j1, 4,h81+ 4 ; 69 stringfirst:string,4 bytes,stringfirst
c43 -j1, 4, h33 ; 72 stringnext :string,4 bytes,stringnext
c70 -j1, 0,h97+0 ; 75 exit : - , exit ident
c70 -j1, 0,h98+0 ; 78 continue : - , continue ident
\f
; jz.fgs 1982.07.02 algol 8, pass 3, page 24
;main control table
;new state <4+ allowed operand,switch part,stack part,output part
w. k=k-g3-4, h.
2, c67-j1, 0, h82+47; .6: reset out,-,not first point
27 <4+ 2, c35-j1, h20 , 0; .5: compl head,unspec,-
45 <4+ 6, c2 -j1, 0, h82+46; .4: out,-,first point
45 <4+ 7, c66-j1, 0, h82+46; .3: ifnum out,-,first point
44 <4+ 7, c66-j1, 0, h82+46; .2: ifnum out,-,first point
43 <4+ 7, c66-j1, 0, h82+46; .1: ifnum out,-,first point
8.0111, 8.2111, 8.3300, 8.0000, f0 : ; st.0-15
8.0000, 8.0000, 8.0004, 8.4055; 16-31
8.0000, 8.0000, 8.0006, 8.6600; 32-47
6 <4+ 14, c2 -j1, 0, h31+13; +2: out,,+
6 <4+ 15, c25-j1, h32+ 8, h31+13; +1: plusminus,pos,+
8.0111, 8.1121, 8.0000, 8.0000, f1 : ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000;
8.0000, 8.0000, 8.0001, 8.1000; 32-47
6 <4+ 14, c2 -j1, 0, h31+14; -2: out,,-
6 <4+ 15, c25-j1, h32+ 9, h31+14; -1: plusminus,neg,-
8.0111, 8.1121, 8.0000, 8.0000, f2 : ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.1000; 32-47
27 <4+ 2, c35-j1, h20 , 0; :5: compl head,unspec,-
9 <4+ 2, c2 -j1, 0, h82+13; :4: out,-,decl label
2<10, g15-j2, h69- 1, h70 ; :3: search in expression
8 <4+ 2, c2 -j1, 0, h82+13; :2: out,-,decl label
27 <4+ 2, c2 -j1, 0, h82+13; :1: out,-,decl label
8.0333, 8.0030, 8.2400, 8.0000, f3 : ; st.0-15
8.0000, 8.0000, 8.0001, 8.1055; 16-31
8.0000, 8.0000, 8.0003, 8.0000; 32-47
27 <4+ 1, c35-j1, h20 , 0; goto 2: compl head,unspec,-
2 <4+ 1, c14-j1, h45 , 0; goto 1: ent,goto,-
8.0000, 8.0000, 8.1100, 8.0000, f4 : ; st.0-15
8.0000, 8.0000, 8.0001, 8.1022; 16-31
8.0200, 8.0000, 8.0000, 8.0000; 32-47
27 <4+ 1, c15-j1, h52 , 0; begin 4: ch,of stat,-
29 <4+ 1, c35-j1, h20 , 0; begin 3: compl head,unspec,-
28 <4+ 1, c14-j1, h51 , 0; begin 2: ent,beg body,-
28 <4+ 1, c11-j1, h50 , h82+30; begin 1: ent out,beg clean, begin
8.0000, 8.0000, 8.1100, 8.0000, f5 : ; st.0-15
8.0000, 8.0000, 8.0041, 8.1233; 16-31
8.1310, 8.0000, 8.0000, 8.0000; 32-47
37 <4+ 1, c11-j1, h37 , h82+31; external 1: ent out,beg ext,beg ext
8.0000, 8.0000, 8.0000, 8.0000, f6 : ; st.0-15
8.0000, 8.0000, 8.0001, 8.0000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
27 <4+ 1, c35-j1, h20 , 0; for 2: compl head,unspec,-
22 <4+ 1, c37-j1, 0, h31+ 9; for 1: for,-,for
8.0000, 8.0000, 8.1100, 8.0000, f7 : ; st.0-15
8.0000, 8.0000, 8.0001, 8.1022; 16-31
8.0200, 8.0000, 8.0000, 8.0000; 32-47
\f
;rc 12.12.1970 algol 6, pass 3, page 25
;main control table
;new state <4+ allowed operand,switch part,stack part, output part
27 <4+ 1, c35-j1, h20 , 0; if 5: compl head,unspec
2 <4+ 1, c15-j1, h66 , 0; if 4: ch,if ex,-
2 <4+ 1, c11-j1, h66 , h31+ 1; if 3: ent out,if ex,if
2 <4+ 1, c15-j1, h67 , 0; if 2: ch,if st,-
2 <4+ 1, c11-j1, h67 , h31+ 1; if 1: ent out,if st,if
8.0034, 8.3000, 8.0200, 8.0000, f8 : ; st.0-15
8.0000, 8.0000, 8.0001, 8.1055; 16-31
8.0500, 8.0000, 8.0000, 8.0000; 32-47
25 <4+ 1, c6 -j1, h50 , 0; own 1: set block,beg clean
8.0000, 8.0000, 8.0000, 8.0000, f9 : ; st.0-15
8.0000, 8.0000, 8.0000, 8.1000; 16-31
8.1000, 8.0000, 8.0000, 8.0000; 32-47
38 <4+ 1, c7 -j1, 0, h82+ 0;integer4:set decl,-,decl int
15 <4+ 1, c32-j1, h18 , h30+68;integer3:firstspec,value yes,specint
17 <4+ 1, c7 -j1, 0, h82+14;integer2:set decl,-,own int
19 <4+ 1, c6 -j1, h50 , h82+ 0;integer1:set block,beg clean,decl int
8.0000, 8.0000, 8.0000, 8.0000, f10: ; st.0-15
8.0000, 8.0000, 8.0200, 8.1033; 16-31
8.1300, 8.0400, 8.0000, 8.0000; 32-47
\f
;rc 12.12.1970 algol 6, pass 3, page 25a
;main control table
;new state <4+ allowed operand,switch part,stack part, output part
38 <4+ 1, c7 -j1, 0, h82+ 2;long 5: set decl,-,decl long
6 <4+ 1, c2 -j1, 0, h32+13;long 4: out,-,oplong
15 <4+ 1, c32-j1, h18 , h30+70;long 3: firstspec,value yes,speclong
17 <4+ 1, c7 -j1, 0, h82+16;long 2: set decl,-,own long
19 <4+ 1, c6 -j1, h50 , h82+ 2;long 1: set block,beg clean,decl long
8.0444, 8.4444, 8.0000, 8.0000, f11: ; st.0-15
8.0000, 8.0000, 8.0200, 8.1033; 16-31
8.1300, 8.0500, 8.0000, 8.0000; 32-47
38 <4+ 1, c7 -j1, 0, h82+ 1;real 5: set decl,-,decl real
6 <4+ 1, c2 -j1, 0, h32+14;real 4: out,-,opreal
15 <4+ 1, c32-j1, h18 , h30+69;real 3: firstspec,value yes,specreal
17 <4+ 1, c7 -j1, 0, h82+15;real 2: set decl,-,own real
19 <4+ 1, c6 -j1, h50 , h82+ 1;real 1: set block,beg clean,decl real
8.0444, 8.4444, 8.0000, 8.0000, f12: ; st.0-15
8.0000, 8.0000, 8.0200, 8.1033; 16-31
8.1300, 8.0500, 8.0000, 8.0000; 32-47
38 <4+ 1, c7 -j1, 0, h82+ 3;boolean4:set decl,-,decl bool
15 <4+ 1, c32-j1, h18 , h30+71;boolean3:firstspec,value yes,specbool
17 <4+ 1, c7 -j1, 0, h82+17;boolean2:set decl,-,own bool
19 <4+ 1, c6 -j1, h50 , h82+ 3;boolean1:set block,beg clean,decl bool
8.0000, 8.0000, 8.0000, 8.0000, f13: ; st.0-15
8.0000, 8.0000, 8.0200, 8.1033; 16-31
8.1300, 8.0400, 8.0000, 8.0000; 32-47
41 <4+ 1, c32-j1, 0, h30+80; zone 2:first spec,value no,spec zone
39 <4+ 1, c63-j1, h74 , h35 ; zone 1:set zone,beg zone block,decl zone
8.0000, 8.0000, 8.0000, 8.0000, f14: ; st.0-15
8.0000, 8.0000, 8.0000, 8.1022; 16-31
8.1200, 8.0000, 8.0000, 8.0000; 32-47
14 <4+ 1, c33-j1, h18 , 4; field 4: sec spec,value yes, spec(field-simp)
14 <4+ 1, c33-j1, h18 , -19; field 3: sec spec,value yes, spec(arfield-array)
17 <4+ 1, c9 -j1, 0, 4; field 2: add decl,-,simple field-simple
17 <4+ 1, c9 -j1, 0, -10; field 1: add decl,-,array field-array
8.0000, 8.0000, 8.0000, 8.0004, f15: ; st.0-15
8.0002, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.1030, 8.0000; 32-47
16 <4+ 1, c62-j1, 0, h83;procedure6:add decl ext,0,proc-simple
16 <4+ 1, c61-j1,h50 , h30+56;procedure5:set ext proc,beg clean,proc
14 <4+ 1, c33-j1, 0, 33;procedure4:secspec,valno,proc-simp spec
14 <4+ 1, c32-j1, 0,h30+100;procedure3:firstspec,val no,spec proc
16 <4+ 1, c8 -j1, 0, h83;procedure2:add decl proc,0,proc-simple
16 <4+ 1, c5 -j1, h50 , h30+56;procedure1:set bloc proc,beg clean,proc
8.0000, 8.0000, 8.0000, 8.0004, f16: ; st.0-15
8.0002, 8.0000, 8.0000, 8.1033; 16-31
8.1300, 8.0560, 8.0000, 8.0000; 32-47
\f
;rc 12.12.1970 algol 6, pass 3, page 26
;main control table
;new state <4+ allowed operand,switch part,stack part, output part
14 <4+ 1, c33-j1, 0, 19;array6:sec spec,value no,spec(zonearr-zonedecl)
36 <4+ 1, c9 -j1, 0, 10;array5:add decl,-,zonearray-zone decl
42 <4+ 1, c33-j1, 0, 27;array4:sec spec,value no,array-simp spec
42 <4+ 1, c32-j1, 0, h30+96;array3:firstspec,value no,spec array
40 <4+ 1, c9 -j1, 0, 18;array2:add decl,-,array-simple decl
40 <4+ 1, c6 -j1, h50 , h82+19;array1:set block,beg clean,realarraydecl
8.0000, 8.0000, 8.0000, 8.0004, f17: ; st.0-15
8.0002, 8.0000, 8.0000, 8.1033; 16-31
8.1300, 8.0005, 8.0600, 8.0000; 32-47
14 <4+ 1, c32-j1, 0,h30+105;switch2:firstspec,value no,spec switch
23 <4+ 1, c40-j1, h50 , h53 ;switch1:switch,beg clean,beg proc
8.0000, 8.0000, 8.0000, 8.0000, f18: ; st.0-15
8.0000, 8.0000, 8.0000, 8.1022; 16-31
8.1200, 8.0000, 8.0000, 8.0000; 32-47
6 <4+ 1, c2 -j1, 0, h32+15;string2:out,-,opstring
14 <4+ 1, c32-j1, 0, h30+81;string1:firstspec,value no,spec string
8.0222, 8.2222, 8.0000, 8.0000, f19: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0011; 16-31
8.0100, 8.0000, 8.0000, 8.0000; 32-47
14 <4+ 1, c32-j1, 0, h30+82;label 1:firstspec,value no,spec label
8.0000, 8.0000, 8.0000, 8.0000, f20: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0011; 16-31
8.0100, 8.0000, 8.0000, 8.0000; 32-47
12 <4+ 1, c31-j1, 0, h20 ; value 1: value, value no,undecl spec
8.0000, 8.0000, 8.0000, 8.0000, f21: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0010; 16-31
8.0100, 8.0000, 8.0000, 8.0000; 32-47
b37 = k + g3 + 4
3<10, g5 -j2, h43- 1, h29 ; semicolon 7a: search statement
27 <4+ 7, c36-j1, h20 , 0; ;7: semicolon,unspec,-
31 <4+ 2, c34-j1, 0, 0; ;6: spec comma,-,-
28 <4+ 1, c3 -j1, 0, 0; ;5: next,-,-
2<10, g5 -j2, h43- 1, h29 ; ;4: search in expression
30 <4+ 1, c3 -j1, 0, 0; ;3: next,-,-
31 <4+ 2, c29-j1, 0, 0; ;2: formal list,-,-
28 <4+ 2, c13-j1, 0, 0; ;1: decl,-,-
8.0444, 8.4044, 8.7770, 8.6566, f22: ; st.0-15
8.2131, 8.7000, 8.0007, 8.7077; 16-31
8.5370, 8.0000, 8.0664, 8.4000; 32-47
28 <4+ 1, c35-j1, h21 , 0; end 3: compl head,spec general,-
2<10, g6 -j2, h43- 1, h52 ; end 2: search in expression
3<10, g6 -j2, h43- 1, h52 ; end 1: search statement
8.0222, 8.2022, 8.1100, 8.0000, f23: ; st.0-15
8.0000, 8.1000, 8.0001, 8.1000; 16-31
8.1310, 8.0100, 8.0002, 8.2000; 32-47
\f
;rc 12.12.1970 algol 6, pass 3, page 27
;main control table
;new state <4+ allowed operand,switch part,stack part,output part
2<10, g7 -j2, h42- 1, h46 ; else 2: search in expression
3<10, g7 -j2, h42- 1, h46 ; else 1: search statement
8.0222, 8.2222, 8.1000, 8.0000, f24: ; st.0-15
8.0000, 8.1000, 8.0001, 8.0000; 16-31
8.0000, 8.0000, 8.0002, 8.2000; 32-47
27 <4+ 2, c35-j1, h20 , 0; (7: compl head,unspec,-
2 <4+ 3, c68-j1, h64-11, h30+54; (6: special par,of ex,begin list field
2 <4+ 3, c22-j1, h65 , h31+30; (5: left parent,(subex,(
2 <4+ 2, c11-j1, h61 , h17 ; (4: ent out,(left,beg list
21 <4+ 2, c29-j1, 0, 0; (3: formal list,-,-
2 <4+ 2, c10-j1, h69 , 0; (2: decl ent,(arr,-
2 <4+ 2, c10-j1, h58 , 0; (1: decl ent,(zone,-
8.0555, 8.5555, 8.4406, 8.0000, f25: ; st.0-15
8.3000, 8.0000, 8.2004, 8.4077; 16-31
8.0001, 8.1001, 8.2006, 8.6600; 32-47
7 <4+ 1, c2 -j1, 0, h32+ 6; -,1: out,-,not
8.0111, 8.1100, 8.0000, 8.0000, f26: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
2<10, g12-j2, h54- 1, h55 ; step 1: search in expression
8.0111, 8.0010, 8.0000, 8.0000, f27: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
2<10, g13-j2, h68- 1, h68 ; until 1: search in expression
8.0111, 8.0010, 8.0000, 8.0000, f28: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
2<10, g14-j2, h54- 1, h55 ; while 1: search in expression
8.0111, 8.0010, 8.0000, 8.0000, f29: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
2<10, g8 -j2, h29- 1, h64 ; ,7: search in expression
24 <4+ 1, c46-j1, 35, 36; ,6: set state,new state 35,new state 36
14 <4+ 2, c34-j1, 0, 0; ,5: spec comma,-,-
24 <4+ 2, c46-j1, 35, 36; ,4: set state,new state 35,new state 36
21 <4+ 2, c30-j1, 0, 0; ,3: formal,-,-
12 <4+ 2, c34-j1, 0, 0; ,2: spec comma,-,-
17 <4+ 2, c3 -j1, 0, 0; ,1: next,-,-
8.0777, 8.0077, 8.0000, 8.2655, f30: ; st.0-15
8.0101, 8.0300, 8.4000, 8.0000; 16-31
8.0004, 8.0004, 8.4557, 8.0000; 32-47
\f
; jz.fgs 1982.07.02 algol 8, pass 3, page 28
;main control table
;new state <4+ allowed operand,switch part,stack part,output part
27 <4+ 2, c35-j1, h20 , 0; := 5: compl head,unspec,-
2 <4+ 2, c11-j1, h55 ,h30+109; := 4: ent out, :=for, :=for
4 <4+ 6, c2 -j1, 0,h30+114; := 3: out,-,:=
4 <4+ 6, c11-j1, h46 ,h30+115; := 2: ent out,assign,first:=
2 <4+ 2, c41-j1, h29 , 0; := 1: switch assign,:=switch,-
8.0000, 8.3000, 8.2200, 8.0000, f31: ; st.0-15
8.0000, 8.0041, 8.0002, 8.2055; 16-31
8.0000, 8.0000, 8.0000, 8.3200; 32-47
2<10, g11-j2, h66- 1, h67 ; then 1: search in expression
8.0111, 8.0011, 8.0000, 8.0000, f32: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
32 <4+ 1, c17-j1, 0, 0; trouble 7: proc end,-,-
33 <4+ 1, c29-j1, 0, 0; trouble 6: formal list,-,-
32 <4+ 1, c19-j1, 0, h30+55; trouble 5: an out,-,trouble
32 <4+ 1, c13-j1, 0, 0; trouble 4: decl,-,-
33 <4+ 1, c3 -j1, 0, 0; trouble 3: next,-,-
32 <4+ 1, c2 -j1, 0, h30+55; trouble 2: out,-,trouble
3<10, g17-j2, h6- 1, h79 ; trouble 1: search statement
8.0111, 8.1111, 8.1171, 8.3233, f33: ; st.0-15
8.6434, 8.1315, 8.4211, 8.1233; 16-31
8.0004, 8.4144, 8.4331, 8.1100; 32-47
2<10, g10-j2, h54- 1, h57 ; do 1: search in expression
8.0111, 8.0011, 8.0000, 8.0000, f34: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
6 <4+ 1, c2 -j1, 0, h32+10; abs 1: out,-,abs
8.0111, 8.1111, 8.0000, 8.0000, f35: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
27 <4+ 1, c35-j1, h20 , 0; case 3: compl head,unspec,-
2 <4+ 1, c11-j1, h72 , h27 ; case 2: ent out,case st,case
2 <4+ 1, c11-j1, h71 , h27 ; case 1: ent out,case exp,case
8.0011, 8.1000, 8.0200, 8.0000, f36: ; st.0-15
8.0000, 8.0000, 8.0002, 8.2033; 16-31
8.0300, 8.0000, 8.0000, 8.0000; 32-47
2<10, g16-j2, h71- 1, h72 ; of 1: search in expression
8.0111, 8.0011, 8.0000, 8.0000, f37: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
6 <4+ 1, c2 -j1, 0, h32+11; round 1: out,-, round
8.0111, 8.1111, 8.0000, 8.0000, f38: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
\f
; jz 1979.06.22 algol 8, pass 3, page 29
;main control table
;new state <4+ allowed operand,switch part,stack part,output part
6 <4+ 1, c2 -j1, 0, h32+ 7; entier 1: out,-,entier
8.0111, 8.1111, 8.0000, 8.0000, f39: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
6 <4+ 1, c2 -j1, 0, h32+12; extend 1: out,-,extend
8.0111, 8.1111, 8.0000, 8.0000, f40: ; st.0-15
8.0000, 8.0000, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
21 <4+ 2, c30-j1, 0, 0; param delim 2: formal,-,-
2<10, g8 -j2, h16- 1, h77 ; param delim 1: search in expression
8.0111, 8.0011, 8.0000, 8.0000, f41: ; st.0-15
8.0000, 8.0200, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0001, 8.0000; 32-47
2<10, g9 -j2, h58- 1, h65 ; ) 2: search in expression
18 <4+ 2, c30-j1, 0, 0; ) 1: formal,-,-
8.0222, 8.0022, 8.0000, 8.0000, f42: ; st.0-15
8.0000, 8.0100, 8.0000, 8.0000; 16-31
8.0000, 8.0000, 8.0002, 8.2200; 32-47
27 <4+ 1, c11-j1, h99,h31- 2; 1: ent out, disable, disable
8.0000, 8.0000, 8.1100, 8.0000, f43: ; st.0-15
8.0000, 8.0000, 8.0001, 8.1000; 16-31
8.0000, 8.0000, 8.0000, 8.0000; 32-47
w. k = k+g3+4
g0= k - j0
e30=e30+g0
i.
e.
m. jz 1982.07.82 algol 8, pass 3
\f
▶EOF◀