|
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◀