File PARSE1.DT

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;
      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;
      NCMAX = 100;

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

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..KMAX,1..4] OF INTEGER;
    NZEIGER: POINTER;
    NIDEK: ARRAY [1..NCMAX,1..2] OF INTEGER;


PROCEDURE GETSYM; BEGIN READ(SYM) END; PROCEDURE ERROR; BEGIN WRITE ("FEHLER") END; PROCEDURE FATAL(I:INTEGER); BEGIN WRITELN; WRITELN("FATALER FEHLER # ",I:2); STOP END; PROCEDURE EINKELLERN(KELLER,OBJEKT: INTEGER); VAR I,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(1) 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 + 1); FOR I:=0 TO NOS DO BEGIN TOP[I] := I*K; BOTTOM[I] := TOP[I] END END; FUNCTION DD(NAME:INTEGER): BOOLEAN; VAR I: INTEGER; BEGIN DD:=FALSE; FOR I:=KZEIGER-1 DOWNTO PUNKT(0) 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; FUNCTION PUNKT(KELLER: INTEGER): INTEGER; BEGIN PUNKT := STACK[TOP[KELLER]] END; FUNCTION NPUNKT(KELLER,N: INTEGER): INTEGER; BEGIN IF TOP[KELLER] - N < BOTTOM[KELLER] THEN FATAL(0) ELSE NPUNKT := STACK[TOP[KELLER]-N+1] END; PROCEDURE NEWLEVEL; BEGIN EINKELLERN(0,KZEIGER) END; PROCEDURE OUTLEVEL; BEGIN KZEIGER := TOP[0]; AUSKELLERN(0) 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