?? btpc.dpr
字號:
PROGRAM BTPC;{$IFDEF WIN32}{$APPTYPE CONSOLE}{$ENDIF}CONST MCC=65536;MIC=512
;MTC=32;MLC=10;MAS=20;TYPE TA=ARRAY[1..MAS]OF CHAR;TI=RECORD I0:TA;I1:INTEGER;I2:
INTEGER;I3:INTEGER;I4:INTEGER;I5:INTEGER;I6:INTEGER;I7:BOOLEAN;I8:INTEGER;I9:INTEGER
;I10:INTEGER;I11:INTEGER;I12:INTEGER;I13:BOOLEAN;END;TT=RECORD T0:INTEGER;I3:INTEGER
;T1:INTEGER;T2:INTEGER;T3:INTEGER;T4:INTEGER;END;VAR G0:CHAR;G1:INTEGER;G2:INTEGER
;G3:INTEGER;G4:TA;G5:INTEGER;G6:ARRAY[1..255]OF CHAR;G7:INTEGER;G8:INTEGER;G9:ARRAY
[21..50]OF TA;G10:INTEGER;G11:INTEGER;G12:BOOLEAN;G13:ARRAY[-1..MLC]OF INTEGER;G14
:INTEGER;G15:INTEGER;G16:ARRAY[0..MIC]OF TI;G17:ARRAY[1..MTC]OF TT;G18:ARRAY[0..MCC
]OF INTEGER;G19:INTEGER;G20:INTEGER;FUNCTION U0(VAR S1,S2:TA):BOOLEAN;VAR F:BOOLEAN
;I:INTEGER;BEGIN F:=TRUE;I:=1;WHILE F AND(I<=MAS)DO BEGIN F:=(S1[I]=S2[I]);I:=I+1
;END;U0:=F;END;PROCEDURE U1(VAR A:TA;B:TA);BEGIN A:=B;END;PROCEDURE U2(N:INTEGER)
;BEGIN WRITELN('Error ',N:1,' detected at line ',G2:1,' at column ',G1:1);HALT;END;PROCEDURE
U3;BEGIN IF NOT EOF THEN BEGIN READ(G0);G1:=G1+1;IF G0=CHR(10)THEN BEGIN G2:=G2+1
;G1:=0;END;END ELSE BEGIN G0:=CHR(0);END;END;FUNCTION U4:INTEGER;VAR NUM:INTEGER;
BEGIN NUM:=0;IF('0'<=G0)AND(G0<='9')THEN BEGIN WHILE('0'<=G0)AND(G0<='9')DO BEGIN
NUM:=(NUM*10)+(ORD(G0)-ORD('0'));U3;END;END ELSE IF G0='$'THEN BEGIN U3;WHILE(('0'
<=G0)AND(G0<='9'))OR (('A'<=G0)AND(G0<='F'))DO BEGIN IF('0'<=G0)AND(G0<='9')THEN
BEGIN NUM:=(NUM*16)+(ORD(G0)-ORD('0'));END ELSE IF('A'<=G0)AND(G0<='F')THEN BEGIN
NUM:=(NUM*16)+(ORD(G0)-ORD('A')+10);END;U3;END;END;U4:=NUM;END;PROCEDURE U5;VAR K
,S:INTEGER;H,Z:BOOLEAN;LC:CHAR;BEGIN WHILE(G0>CHR(0))AND(G0<=' ')DO U3;IF(('a'<=G0
)AND(G0<='z'))OR(('A'<=G0)AND(G0<='Z'))THEN BEGIN K:=0;WHILE((('a'<=G0)AND(G0<='z'
))OR(('A'<=G0)AND(G0<='Z'))OR(('0'<=G0)AND(G0<='9')))OR(G0='_')DO BEGIN IF K<>MAS THEN BEGIN
K:=K+1;IF('a'<=G0)AND(G0<='z')THEN G0:=CHR(ORD(G0)-32);G4[K]:=G0;END;U3;END;WHILE
K<>MAS DO BEGIN K:=K+1;G4[K]:=' ';END;G3:=0;S:=21;WHILE S<=50 DO BEGIN IF U0(G9[S
],G4)THEN G3:=S;S:=S+1;END;END ELSE IF(('0'<=G0)AND(G0<='9'))OR(G0='$')THEN BEGIN
G3:=1;G5:=U4;END ELSE IF G0=':'THEN BEGIN U3;IF G0='='THEN BEGIN U3;G3:=20;END ELSE
BEGIN G3:=8;END;END ELSE IF G0='>'THEN BEGIN U3;IF G0='='THEN BEGIN U3;G3:=14;END
ELSE BEGIN G3:=13;END;END ELSE IF G0='<'THEN BEGIN U3;IF G0='='THEN BEGIN U3;G3:=
12;END ELSE IF G0='>'THEN BEGIN U3;G3:=10;END ELSE BEGIN G3:=11;END;END ELSE IF G0
='.'THEN BEGIN U3;IF G0='.'THEN BEGIN U3;G3:=8;END ELSE BEGIN G3:=19 END;END ELSE
IF(G0='''')OR(G0='#')THEN BEGIN G7:=0;H:=FALSE;Z:=FALSE;G3:=2;WHILE NOT H DO BEGIN
IF Z THEN BEGIN IF G0=''''THEN BEGIN U3;IF G0=''''THEN BEGIN G7:=G7+1;G6[G7]:=G0;
U3;END ELSE BEGIN Z:=FALSE;END;END ELSE IF(G0=CHR(13))OR(G0=CHR(10))THEN BEGIN U2
(100);H:=TRUE;END ELSE BEGIN G7:=G7+1;G6[G7]:=G0;U3;END;END ELSE BEGIN IF G0=''''
THEN BEGIN Z:=TRUE;U3;END ELSE IF G0='#'THEN BEGIN U3;G7:=G7+1;G6[G7]:=CHR(U4);END
ELSE BEGIN H:=TRUE;END;END;END;IF G7=0 THEN U2(101);END ELSE IF G0='+'THEN BEGIN
U3;G3:=3;END ELSE IF G0='-'THEN BEGIN U3;G3:=4;END ELSE IF G0='*'THEN BEGIN U3;G3
:=5;END ELSE IF G0='('THEN BEGIN U3;IF G0='*'THEN BEGIN U3;LC:='-';WHILE NOT((G0=
')')AND(LC='*'))DO BEGIN LC:=G0;U3;END;U3;U5;END ELSE BEGIN G3:=15;END;END ELSE IF
G0=')'THEN BEGIN U3;G3:=16;END ELSE IF G0='['THEN BEGIN U3;G3:=6;END ELSE IF G0=']'
THEN BEGIN U3;G3:=7;END ELSE IF G0='='THEN BEGIN U3;G3:=9;END ELSE IF G0=','THEN
BEGIN U3;G3:=17;END ELSE IF G0=';'THEN BEGIN U3;G3:=18;END ELSE IF G0='{'THEN BEGIN
WHILE G0<>'}'DO U3;U3;U5;END ELSE BEGIN U2(102);END;END;PROCEDURE U6(S:INTEGER);BEGIN
IF G3<>S THEN U2(S);END;PROCEDURE U7(S:INTEGER);BEGIN U6(S);U5;END;PROCEDURE U8(G4
:TA;K,T:INTEGER);VAR J:INTEGER;BEGIN IF G14=MIC THEN U2(103);G14:=G14+1;G16[0].I0
:=G4;J:=G13[G11];WHILE NOT U0(G16[J].I0,G4)DO J:=G16[J].I1;IF J<>0 THEN BEGIN IF
G16[J].I3<>4 THEN U2(104);IF(G18[G16[J].I10]<>39)OR(G18[G16[J].I10+1]>0)THEN U2(105
);G16[J].I0[1]:='$';G18[G16[J].I10+1]:=G19;G8:=J;END;G16[G14].I0:=G4;G16[G14].I1:=
G13[G11];G16[G14].I2:=T;G16[G14].I3:=K;G13[G11]:=G14;END;FUNCTION U9:INTEGER;VAR
I,J:INTEGER;BEGIN G16[0].I0:=G4;I:=G11;REPEAT J:=G13[I];WHILE NOT U0(G16[J].I0,G4
)DO J:=G16[J].I1;I:=I-1;UNTIL(I<-1)OR(J<>0);IF J=0 THEN U2(106);U9:=J;END;PROCEDURE
U10(OY,A:INTEGER);BEGIN CASE OY OF 13,26,27,28,29,30,31,32:G20:=G20-4;1,5,6,14,17
,19,22,25,37,38,39,41,43:BEGIN END;0,2,3,4,7,8,9,10,11,12,15,16,21,23,24,33,34,40
:G20:=G20+4;18,20,35:G20:=G20+8;36:G20:=G20-(A-4);42:G20:=G20+A;END;IF NOT((((OY=
37)OR(OY=42))AND(A=0))OR((OY=38)AND(A=1)))THEN BEGIN IF G12 THEN BEGIN G18[G19]:=
OY;G19:=G19+1;IF OY>=28 THEN BEGIN G18[G19]:=A;G19:=G19+1;END;G12:=FALSE;END ELSE
IF(G10=28)AND(OY=0)THEN BEGIN G18[G19-2]:=37;END ELSE IF(G10=28)AND(OY=2)THEN BEGIN
G18[G19-2]:=38;END ELSE IF(G10=28)AND(OY=1)THEN BEGIN G18[G19-1]:=-G18[G19-1];OY:=
G10;END ELSE IF(G10=28)AND(G18[G19-1]=2)AND(OY=3)THEN BEGIN G18[G19-2]:=5;G19:=G19
-1;END ELSE IF(G10=28)AND(G18[G19-1]=2)AND(OY=4)THEN BEGIN G18[G19-2]:=6;G19:=G19
-1;END ELSE IF(G10=29)AND(OY=18)THEN BEGIN G18[G19-2]:=34;END ELSE IF(G10=29)AND(
OY=17)THEN BEGIN G18[G19-2]:=32;END ELSE IF(G10=30)AND(OY=18)THEN BEGIN G18[G19-2
]:=33;END ELSE IF(G10=30)AND(OY=17)THEN BEGIN G18[G19-2]:=31;END ELSE BEGIN G18[G19
]:=OY;G19:=G19+1;IF OY>=28 THEN BEGIN G18[G19]:=A;G19:=G19+1;END;END;G10:=OY;END;
END;PROCEDURE U11(OY:INTEGER);BEGIN U10(OY,0);END;FUNCTION U12:INTEGER;BEGIN U12:=
G19;G12:=TRUE;END;PROCEDURE U13(L,A:INTEGER);BEGIN IF L=0 THEN BEGIN U10(29,A);END
ELSE IF L=G11 THEN BEGIN U10(30,A-G20);END ELSE BEGIN U10(31,-G20);WHILE(L+1)<>G11
DO BEGIN U11(17);L:=L+1;END;U10(37,A);END;END;PROCEDURE U14(IZ:INTEGER);BEGIN U13
(G16[IZ].I5,G16[IZ].I6);IF G16[IZ].I7 THEN U11(17);END;PROCEDURE MB(X,Y:INTEGER);
BEGIN IF X<>Y THEN BEGIN IF(G17[X].I3=1)AND(G17[Y].I3=1)AND(G17[X].T1=G17[Y].T1)AND
(G17[X].T2=G17[Y].T2)THEN BEGIN MB(G17[X].T3,G17[Y].T3);END ELSE BEGIN U2(107);END
;END;END;PROCEDURE U15(VAR X:INTEGER);FORWARD;PROCEDURE U16(VAR T,IZ:INTEGER);VAR
J,X:INTEGER;BEGIN T:=G16[IZ].I2;U5;IF(G3=19)OR(G3=6)THEN BEGIN U14(IZ);IZ:=0;WHILE
(G3=19)OR(G3=6)DO BEGIN CASE G3 OF 19:BEGIN IF G17[T].I3<>2 THEN U2(108);U5;U6(0)
;J:=G17[T].T4;G16[0].I0:=G4;WHILE NOT U0(G16[J].I0,G4)DO J:=G16[J].I1;IF J=0 THEN
U2(109);U10(37,G16[J].I8);T:=G16[J].I2;U5;END;6:BEGIN REPEAT IF G17[T].I3<>1 THEN
U2(110);U5;U15(X);MB(1,X);U10(37,-G17[T].T1);T:=G17[T].T3;U10(38,G17[T].T0);U11(0
);UNTIL G3<>17;U7(7)END;END;END;END;END;PROCEDURE U17(VAR T:INTEGER);VAR J:INTEGER
;BEGIN U6(0);J:=U9;U16(T,J);IF J<>0 THEN U14(J);END;PROCEDURE U18(N:INTEGER);VAR
X:INTEGER;BEGIN CASE N OF 0:BEGIN U7(15);U15(X);MB(1,X);U7(16)END;1:BEGIN U7(15);
U15(X);IF X<>2 THEN MB(3,X);U7(16);END;2,3:BEGIN IF N=2 THEN U6(15);IF G3=15 THEN
BEGIN REPEAT U5;IF G3=2 THEN BEGIN X:=1;WHILE X<=G7 DO BEGIN U10(28,ORD(G6[X]));U11
(21);X:=X+1;END;U5;END ELSE BEGIN U15(X);IF G3=8 THEN BEGIN MB(1,X);U5;U15(X);MB(
1,X);U11(20);END ELSE IF X=1 THEN BEGIN U10(28,1);U11(20);END ELSE IF X=3 THEN BEGIN
U11(21);END ELSE BEGIN U2(111);END;END;UNTIL G3<>17;U7(16)END;IF N=3 THEN U11(22)
;END;4,5:BEGIN IF N=4 THEN U6(15);IF G3=15 THEN BEGIN REPEAT U5;U17(X);IF X=1 THEN
BEGIN U11(23);END ELSE IF X=3 THEN BEGIN U11(24);END ELSE BEGIN U2(112);END;UNTIL
G3<>17;U7(16);END;IF N=5 THEN U11(25);END;6:U11(26);7:U11(27);END;END;PROCEDURE U19
(I:INTEGER);VAR QX,P,X:INTEGER;BEGIN U5;IF G16[I].I9<0 THEN BEGIN U18(G16[I].I10)
;END ELSE BEGIN IF G16[I].I2<>0 THEN U10(28,0);P:=I;QX:=G20;IF G3=15 THEN BEGIN REPEAT
U5;IF P=G16[I].I11 THEN U2(113);P:=P+1;IF G16[P].I7 THEN BEGIN U17(X);END ELSE BEGIN
U15(X);IF G17[X].I3<>0 THEN U10(36,G17[X].T0);END;IF X=4 THEN BEGIN IF G16[P].I7
THEN U2(114);IF G17[G16[P].I2].I3<>1 THEN U2(115);IF G17[G16[P].I2].T3<>3 THEN U2
(116);IF((G17[G16[P].I2].T2-G17[G16[P].I2].T1)+1)<>G7 THEN U2(117);END ELSE BEGIN
MB(G16[P].I2,X);END;UNTIL G3<>17;U7(16);END;IF P<>G16[I].I11 THEN U2(118);IF G16[
I].I9<>0 THEN U13(G16[I].I9,0);U10(41,G16[I].I10);G20:=QX;END;END;PROCEDURE U20(VAR
T:INTEGER);VAR I:INTEGER;BEGIN IF G3=0 THEN BEGIN I:=U9;T:=G16[I].I2;CASE G16[I].
I3 OF 0:BEGIN U5;U10(28,G16[I].I4);END;1:BEGIN U16(T,I);IF I<>0 THEN U14(I);IF G17
[T].I3=0 THEN U11(17);END;4:BEGIN IF T=0 THEN BEGIN U2(119);END ELSE BEGIN U19(I)
;END;END;3:U2(120);END;END ELSE IF G3=1 THEN BEGIN U10(28,G5);T:=1;U5;END ELSE IF
G3=2 THEN BEGIN I:=G7;WHILE I>=1 DO BEGIN U10(28,ORD(G6[I]));I:=I-1;END;T:=3;IF G7
<>1 THEN T:=4;U5;END ELSE IF G3=15 THEN BEGIN U5;U15(T);U7(16);END ELSE IF G3=34
THEN BEGIN U5;U20(T);MB(2,T);U11(1);U10(37,1);END ELSE BEGIN U2(121);END;END;PROCEDURE
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -