File PAR2.PS

Directory of image this file is from
This file as a plain text file

PROGRAM PARSER(INPUT,OUTPUT);
CONST NUL=0;
      IDENTIFIER=1;
      INTEGERCONSTANT=2;
      REALCONSTANT=3;
      CHARACTER=4;
      STRING=5;

      PLUS=6;
      MINUS=7;
      TIMES=8;
      SLASH=9;
      EQUAL=10;
      NOTEQUAL=11;
      LESS=12;
      LESSOREQUAL=13;
      GREATER=14;
      GREATEROREQUAL=15;
      LPARENT=16;
      RPARENT=17;
      LBRACKET=18;
      RBRACKET=19;
      BECOMES=20;
      PERIOD=21;
      COMMA=22;
      SEMICOLON=23;
      COLON=24;
      UPTO=25;

      ANDSYM=51;
      ARRAYSYM=52;
      BEGINSYM=53;
      CASESYM=54;
      CONSTSYM=55;
      DIVSYM=56;
      DOWNTOSYM=57;
      DOSYM=58;
      ELSESYM=59;
      ENDSYM=60;
      FORSYM=61;
      FUNKTIONSYM=62;
      IFSYM=63;
      MODSYM=64;
      NILSYM=65;
      NOTSYM=66;
      OFSYM=67;
      ORSYM=68;
      OTHERSSYM=69;
      PROZEDURESYM=70;
      PROGRAMSYM=71;
      RECORDSYM=72;
      REPEATSYM=73;
      THENSYM=74;
      TOSYM=75;
      TYPESYM=76;
      UNTILSYM=77;
      VARSYM=78;
      WHILESYM=79;

      NORW = 28;
      AL = 10;
      LLENG = 120;
      EMAX = 322;
      EMIN = -292;
      INTMAX = 15;
      SMAX = 600;
      LMAX = 10;
      ERRMAX = 60;
      XMAX = 2046;
      NMAX = 1000000;
      NOS = 10;
      STACKSIZE = 2000;

      CMAX = 200;
      CZMAX = 100;
      PMAX = 200;
      PZMAX = 50;
      IMAX = 100;
      IZMAX = 50;
      TMAX = 200;
      TZMAX = 50;
      KMAX = 1000;

      GAMMA = 1;
      ZETA = 2;
      EPSILON = 3;
      MY = 4;
      TAU = 5;
      LAMBDA = 6;

TYPE SYMBOL = INTEGER;  (*WERTE DER OBEN DEF. SYMBOLE*)
     POINTER = INTEGER;
     ALFA = ARRAY[1..AL] OF CHAR;

VAR EXIT:REAL;
    SYM:SYMBOL;
    ID:ALFA;
    INUM:INTEGER;
    RNUM:REAL;
    SLENG:INTEGER;
    CH:CHAR;
    LINE: ARRAY[1..LLENG] OF CHAR;
    CC: INTEGER;
    LC: INTEGER;
    LL: INTEGER;
    ERRS: ARRAY [1..ERRMAX]  OF BOOLEAN;
    ERRPOS: INTEGER;
    WORD: ARRAY[1..NORW] OF ALFA;
    STAB: ARRAY [1..SMAX] OF CHAR;
    BOTTOM: ARRAY [1..NOS] OF POINTER;
    TOP: ARRAY [1..NOS] OF POINTER;
    STACK: ARRAY [1..STACKSIZE] OF INTEGER;

    C0,P0,I0,T0: POINTER;
    CZEIGER,PZEIGER,IZEIGER,TZEIGER: POINTER;
    CTAB: ARRAY [1..CMAX] OF INTEGER;
    CZ: ARRAY [1..CZMAX] OF POINTER;
    PTAB: ARRAY [1..PMAX] OF INTEGER;
    PZ: ARRAY [1..PZMAX] OF POINTER;
    ITAB:  ARRAY [1..IMAX] OF INTEGER;
    IZ: ARRAY [1..IZMAX] OF POINTER;
    TTAB: ARRAY [1..TMAX] OF INTEGER;
    TZ: ARRAY [1..TZMAX] OF POINTER;

    KZEIGER: POINTER;
    KITUM: ARRAY [0..TMAX,1..4] OF INTEGER;
    LZEIGER: POINTER;
    L: ARRAY [1..LMAX] OF POINTER;


PROCEDURE GETSYM; BEGIN READ(SYM) END; PROCEDURE ERROR; BEGIN WRITE ("FEHLER") END; PROCEDURE FATAL(I:INTEGER); BEGIN WRITELN; WRITELN("FATALER FEHLER # ",I:2); EXIT:=1/0 END; PROCEDURE EINKELLERN(KELLER,OBJEKT: INTEGER); VAR K: INTEGER; BEGIN TOP[KELLER]:= TOP[KELLER] + 1; STACK[TOP[KELLER]] := OBJEKT; IF TOP[KELLER] = BOTTOM[KELLER+1] THEN BEGIN FOR I:=1 TO 10 DO BEGIN BOTTOM[KELLER] := BOTTOM[KELLER] - TOP[KELLER]; K:=K+1 END END END; PROCEDURE AUSKELLERN(KELLER:INTEGER); BEGIN TOP[KELLER] := TOP[KELLER] - 1; IF TOP[KELLER] < BOTTOM[KELLER] THEN FATAL END; PROCEDURE ERSETZEN(KELLER,OBJEKT: INTEGER); BEGIN STACK[TOP[KELLER]] := OBJEKT END; PROCEDURE LEEREN(KELLER: INTEGER); BEGIN TOP[KELLER] := BOTTOM[KELLER] END; PROCEDURE INITIALIZE; VAR K,I:INTEGER; BEGIN K:= STACKSIZE DIV NOS; FOR I:=2 TO NOS DO BEGIN TOP[I] := I*K; BOTTOM[I] := TOP[I] END; TOP[1]:=0; BOTTOM[1] :=0 END; FUNCTION DD(NAME:INTEGER): BOOLEAN; VAR I: INTEGER; BEGIN DD:=FALSE; FOR I:=KZEIGER-1 DOWNTO L[LZEIGER] DO IF NAME = KITUM[I,1] THEN DD:=TRUE END; PROCEDURE AUFADDIEREN(ZAHL:INTEGER; KELLER: INTEGER); BEGIN STACK[TOP[KELLER]] := STACK[TOP[KELLER]] + ZAHL END; FUNCTION LEER(KELLER:INTEGER):BOOLEAN; BEGIN LEER := TOP[KELLER] = BOTTOM[KELLER] END;
BEGIN EINKELLERN(10,GAMMA); WHILE LEER(GAMMA) DO CASE PUNKT(GAMMA)OF 10:BEGIN GETSYM; IF SYM=LPARENT THEN BEGIN GETSYM; AUSDRUCK; WHILE SYM=COMMA DO BEGIN GETSYM; AUSDRUCK END; IF SYM<>RPARENT THEN ERROR ELSE GETSYM END; AUSKELLERN(GAMMA) END; 11:BEGIN GETSYM; ERSETZEN(19,GAMMA); EINKELLERN(10,GAMMA) END; 12:BEGIN GETSYM; AUSDRUCK; IF SYM<>THENSYM THEN ERROR ELSE BEGIN GETSYM; ERSETZEN(20,GAMMA); EINKELLERN(10,GAMMA) END END; 13:BEGIN GETSYM; AUSDRUCK; IF SYM<>DOSYM THEN ERROR ELSE GETSYM END; 14:BEGIN GETSYM; AUSDRUCK; IF SYM<>OFSYM THEN ERROR ELSE BEGIN GETSYM; ERSETZEN(22,GAMMA) END END; 15:BEGIN GETSYM; IF SYM<>IDENTIFIER THEN ERROR ELSE BEGIN GETSYM; IF SYM<>BECOMES THEN ERROR ELSE BEGIN GETSYM; AUSDRUCK; IF SYM<>TOSYM THEN IF SYM<>DOWNTOSYM THEN ERROR; GETSYM; AUSDRUCK; IF SYM<>DOSYM THEN ERROR ELSE GETSYM END END END; 17:BEGIN GETSYM; EINKELLERN(25,GAMMA) END; 18:BEGIN GETSYM; ERSETZEN(25,GAMMA); EINKELLERN(VAR1,GAMMA) END; 19:BEGIN GETSYM; ERSETZEN(26,GAMMA); EINKELLERN(27,GAMMA) END; 20:BEGIN IF SYM=SEMICOLON THEN GETSYM ELSE IF SYM=ENDSYM THEN BEGIN GETSYM;AUSKELLERN(GAMMA) END ELSE ERROR END; 21:BEGIN IF SYM=ELSESYM THEN BEGIN GETSYM;ERSETZEN(10,GAMMA) END ELSE AUSKELLERN(GAMMA) END; 22:BEGIN KONSTANTE; WHILE SYM=COMMA DO BEGIN GETSYM; KONSTANTE END; IF SYM<>COLON THEN ERROR ELSE BEGIN GETSYM;ERSETZEN(22,GAMMA) END END; 23:BEGIN IF SYM = SEMICOLON THEN BEGIN GETSYM; ERSETZEN(22,GAMMA) END ELSE IF SYM<>OTHERSSYM THEN IF SYM<>ENDSYM THEN ERROR ELSE AUSKELLERN(GAMMA) ELSE BEGIN GETSYM; IF SYM<>COLON THEN ERROR ELSE BEGIN GETSYM; ERSETZEN(24,GAMMA); EINKELLERN(10,GAMMA) END END END; 24:BEGIN IF SYM<>ENDSYM THEN ERROR ELSE BEGIN GETSYM; AUSKELLERN(GAMMA) END END; 25:BEGIN IF SYM=SEMICOLON THEN BEGIN GETSYM; EINKELLERN(10,GAMMA) END ELSE IF SYM<>UNTILSYM THEN ERROR ELSE BEGIN GETSYM; AUSDRUCK; AUSKELLERN(GAMMA) END END; 26:BEGIN IF SYM<>BECOMES THEN ERROR ELSE BEGIN GETSYM; AUSDRUCK; AUSKELLERN(GAMMA) END END END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search