PROCEDURE GETSYM; VAR I,J,K:INTEGER; PROCEDURE GETCH; BEGIN END; (*GETCH*) BEGIN (*GETSYM*) WHILE CH=' ' OR CH='(' DO (*SKIP BLANKS & COMMENTS*) IF CH=' ' THEN GETCH ELSE IF CH='*' THEN BEGIN (*COMMENT*) GETCH; REPEAT VORCH:=CH; GETCH UNTIL VORCH='*' AND CH=')' END ELSE CC:=CC-1; IF CH>='A' AND CH<='Z' THEN BEGIN (*IDENTIFIER OR RESERVED WORD*) K:=0; ID:=' '; REPEAT IF K'Z') AND (CH<'0' OR CH>'9'); I:=1; J:=NORW; REPEAT K:=(I+J) DIV 2; IF ID>WORD[K] THEN I:=K+1 ELSE J:=K UNTIL I=J; IF ID=WORD[I] THEN SYM:=I+50 ELSE SYM:=1 END (*IDENTIFIER OR RESERVED WORD*) ELSE IF CH>='0' AND CH<='9' THEN BEGIN (*NUMBER*) INUM:=0; SYM:=2;K:=0;J:=0;I:=1; REPEAT K:=K+1; INUM:=INUM*10+ORD(CH)-ORD('0'); GETCH UNTIL CH<'0' OR CH>'9'; IF K>KMAX THEN BEGIN INUM:=0;ERROR END; RNUM:=INUM; IF CH='.'THEN BEGIN GETCH; IF CH<>'.' THEN BEGIN SYM:=3; K:=0; REPEAT IF CH<'0' OR CH>'9' THEN ERROR ELSE BEGIN RNUM:=RNUM*10+ORD(CH)-ORD('0'); GETCH END UNTIL CH<'0' OR CH>'9' END ELSE CC:=CC-1 END; IF CH='E' THEN BEGIN SYM:=3; GETCH; IF CH='-' THEN BEGIN I:=-1; GETCH END ELSE IF CH='+' THEN GETCH; REPEAT IF CH<'0' OR CH>'9' THEN ERROR ELSE BEGIN J:=J*10+ORD(CH)-ORD('0'); GETCH END UNTIL CH<'0' OR CH>'9'; J:=J*I-K; IF J>EMAX OR J