begin writeln(>start pl0>); t|=0; b|=1; p|=0; s[1]|=0; s[2]|=0; s[3]|=0; repeat i|=code[p]; p|=p+1; with i do case f of lit: begin t|=t+1; s[t]|=a end; opr: case a of(*operator*) 0: begin (*return*) t|=b-1; p|=s[t+3]; b|=s[t+2] end; 1: s[t]|=-s[t]; 2: begin t|=t-1; s[t]|=s[t]+s[t+1] end; 3: begin t|=t-1; s[t]|=s[t]-s[t+1] end; 4: begin t|=t-1; s[t]|=s[t]*s[t+1] end; 5: begin t|=t-1; s[t]|=s[t] div s[t+1] end; 6: s[t]|=ord(odd(s[t])); 8: begin t|=t-1; s[t]|=ord(s[t]=s[t+1]) end; 9: begin t|=t-1; s[t]|=ord(s[t]<>s[t+1]) end; 10: begin t|=t-1; s[t]|=ord(s[t]<s[t+1]) end; 11: begin t|=t-1; s[t]|=ord(s[t]>=s[t+1]) end; 12: begin t|=t-1; s[t]|=ord(s[t]>s[t+1]) end; 13: begin t|=t-1; s[t]|=ord(s[t]<=s[t+1]) end; 14: begin write(s[t]); write(fa2,s[t]); t|=t-1 end; 15: begin writeln; writeln(fa2) end; 16: begin t|=t+1; write(> ? >); write(fa2,>? >); readln(s[t]); writeln(fa2,s[t]) end; end; lod: begin t|=t+1; s[t]|=s[base(l)+a] end; sto: begin s[base(l)+a]|=s[t]; (*writeln(s[t])*) t|=t-1 end; cal: begin (*generat new block mark*) s[t+1]|=base(l); s[t+2]|=b; s[t+3]|=p; b|=t+1; p|=a end; int: t|=t+a; jmp: p|=a; jpc: begin if s[t]=0 then p|=a; t|=t-1 end; end (*with,case*) until p=0; closef(fa2) end (*interpret*); |