SPL,L,M,O,T,C ! 11/14/75 REV C NAME P.ARS(8) ! ! PARSING ALGORITHM LET STAK BE PSEUDO, EXTERNAL LET SEG,DRCT BE FUNCTION, EXTERNAL LET S,PTOP,GTOP,VTOP,DEF BE INTEGER LET CHAR BE INTEGER,EXTERNAL LET PUSH,POP BE SUBROUTINE ! P.ARS: SUBROUTINE(ROOT,AGNRT,AINCC,ADECC)\ FEXIT, GLOBAL ! GTOP_ROOT; S,PTOP,VTOP_0!INITIALIZATION CALL $(AINCC)() !GET FIRST CHARACTER ! B: WHILE [DEF_$(GTOP+1)]>0 DO \DEFINE LOOP [PUSH; PTOP_S; GTOP_DEF; VTOP_0] IFNOT CHAR THEN GOTO M IF DEF THEN[CALL $(SEG($GTOP))(CHAR) ?[GO TO M]],\P-TERM ELSE [IF CHAR#$GTOP THEN GO TO M] !MATCH ! VTOP_[IF CHAR<0 THEN CHAR, ELSE -CHAR] !SET V STACK CALL $(AINCC)() !GET NEXT CHARACTER G: DO [PUSH; GTOP_$(GTOP+3); VTOP_0] !SUCCESSOR H: IF GTOP>0 THEN GO TO B !GO TO DEFINE LOOP CALL $(AGNRT)(S,PTOP,GTOP,VTOP) !GENERATE IF S THEN GO TO G !GO AHEAD IFNOT CHAR THEN RETURN, ELSE FRETURN !DONE ! M: DO [GTOP_[IF GTOP THEN $(GTOP+2),ELSE 0]; \ VTOP_0] !GET ALTERNATE IF GTOP THEN GO TO H !GO TO DEF LOOP DO [POP; IFNOT S THEN FRETURN] !BACKTRACK IF VTOP>0 THEN FRETURN,\ DELETE ELSE [IF VTOP<0 THEN [CALL $(ADECC)()]] !DECC GO TO M !TRY AGAIN END ! PUSH: SUBROUTINE DO [STAK(S)_VTOP; STAK(S)_GTOP; STAK(S)_PTOP] RETURN END ! POP: SUBROUTINE DO [PTOP_STAK(S); GTOP_STAK(S); VTOP_STAK(S)] RETURN END END END$