xiaozqh
[srcbox.git] / tbasic.pas
blobe0c232ef6155c201b43401ec68d628b1c29cd26d
1 var
2 a:array [0..100] of string;
3 v:array ['A'..'Z'] of longint;
4 b:array [0..100] of longint;
5 p,k:longint;
6 s:string;
8 function solve(s:string):longint;
9 var
10 i:longint;
12 begin
13 if s[1] in ['A'..'Z'] then
14 begin
15 if s[2]='+' then exit(v[s[1]]+v[s[3]]);
16 if s[2]='>' then
17 if v[s[1]]>v[s[3]] then exit(1) else exit(0);
18 exit;
19 end;
20 val(s,solve);
21 end;
23 procedure goto1(line:longint);
24 begin
25 if a[line]='STOP' then halt;
26 if b[line]=1 then
27 v[a[line][1]]:=solve(copy(a[line],pos('=',a[line])+1,length(a[line])))
28 else
29 if b[line]=2 then
30 writeln(a[line],'=',v[a[line][1]])
31 else
32 if b[line]=3 then
33 goto1(solve(a[line]))
34 else
35 if b[line]=4 then
36 if solve(a[line])=0 then goto1(line+2);
37 goto1(line+1);
38 end;
40 begin
41 assign(input,'tbasic.in'); reset(input);
42 while not eof do
43 begin
44 read(k);
45 readln(a[k]);
46 while a[k][1]=' ' do delete(a[k],1,1);
47 p:=pos(' ',a[k]);
48 s:=copy(a[k],1,p-1);
49 delete(a[k],1,p-1);
50 if s='LET' then b[k]:=1
51 else if s='PRINT' then b[k]:=2
52 else if s='GOTO' then b[k]:=3
53 else if s='IF' then b[k]:=4
54 else if s='STOP' then b[k]:=5;
55 while a[k][1]=' ' do delete(a[k],1,1);
56 end;
57 goto1(1);
58 end.