First Page Previous Page   Next Page Last Page
@ .PROCEDURE BACKPLUG; .INTEGER INSTADD; .BEGIN      INSTADD := @;   .WHEN LA > '777 .THEN .GOTO IGNORE;   @ := INSTADD;   AGAIN: INDEX := @ + LSTART;   INSTADD := CODE[#];   CODE[#] := @ .AND '177000 + LA;   @ := INSTADD .AND '777;   .WHEN @ .NE '777 .THEN .GOTO AGAIN;      IGNORE: .END; @ .CONDITIONAL .PROCEDURE BASIC; .INTEGER COMPARE; .BEGIN   COMPARE := @;   .WHEN BS = COMPARE .THEN .EXITTRUE; .END; .CONDITIONAL .PROCEDURE BSCOMMA; .BEGIN   .WHEN BASIC(COMMASYMBOL) .THEN .EXITTRUE; .END; @ .CONDITIONAL .PROCEDURE BSIS; .BEGIN INDEX := @;   .WHEN LETTER .THEN .EXITFALSE;   MORE: .WHEN .CLEFT OPTABLE[#] = BS .THEN   .BEGIN %STX,ADDBS; .EXITTRUE;   .END;   .WHEN @ .NZ .THEN   .BEGIN INDEX := .INC .ICLEFT OPTABLE[#] + INDEX;     .GOTO MORE;   .END; .END; .PROCEDURE CELL; .SWITCH STYPE = LNOTDEC, LCONST, LCONST, LARRAY, LCOMPCONST, LARRAY, LLABEL, LTABLE; .BEGIN   ENTER;   .WHEN ID .LZ .THEN .GOTO OK;   .IF LETTER .THEN   .BEGIN IDENTIFIER;     OK:     INDEX := TYPE - 8;     .WHEN @ .LZ .THEN .GOTO STYPE[#];     FAIL(CELLTYPE);     .GOTO FIN;     LNOTDEC:     FAIL(IDNOTDEC); .GOTO FIN;     LCONST: VADD := ADD; .GOTO FIN;     LARRAY: @ := ADD; .GOTO ARRTAB;     LTABLE: @ := .INC ADD;     ARRTAB: STACK(.SSM @);     SUBSCRIPT; VADD := UNSTACK;     .GOTO FIN;     LCOMPCONST: VALUE := ADD;     EXPLICITCONST := -1;     .GOTO FIN;     LLABEL: FAIL(RHSLABEL);     FIN: ID := .Z;   .END   .ELSE .IF BASIC(STARSYMBOL) .THEN   .BEGIN NBS; IDENTIFIER;     .WHEN TYPE .NE INT .THEN FAIL (PTRNOTINT);     VADD := ADD + '100000;   .END   .ELSE .IF BASIC(CODEWORDSYMBOL) .THEN   .BEGIN     NBS;     TYPEIDENT;     VADD := ADD;   .END   .ELSE .BEGIN CONSTANT;     EXPLICITCONST := -1;   .END;   LEAVE; .END; .PROCEDURE CLEARPOOL; .INTEGER I; .BEGIN .WHEN CPPT .Z .THEN .GOTO EXIT;   .FOR I := CPPT .DO   .BEGIN K := CPOOL[I]; %IRS,I;     BACKPLUG(CPOOL[I]);     GENERATE(K);   .END;   CPPT := .Z;   EXIT:.END; .PROCEDURE CODESTATEMENT; .BEGIN NBS;    .IF LETTER .THEN   .BEGIN IDNBS;     .WHEN IDENT2 .Z .THEN     .FOR # := MCODESIZE .DO     .IF MCODE[#] = IDENT1 .THEN .GOTO FOUND     .ELSE %IRS,0;     FAIL(INVMCODE);     FOUND: %IRS,0; INST := MCODE[#];     J := @ .SHDRL 14;     .IF .Z .SHDLL 4 .Z .THEN     .IF J .NE 1 .THEN GENERATE(INST)     .ELSE .BEGIN FAILIFNOT(COMMASYMBOL);       CONSTANT;       GENERATE(.NEG VALUE .AND '77 + INST);     .END     .ELSE .IF @ - '14 .Z .THEN     .BEGIN FAILIFNOT(COMMASYMBOL);       CONSTANT;       GENERATE(INST + VALUE);     .END     .ELSE .BEGIN       .IF BASIC(STARSYMBOL) .THEN       .BEGIN NBS; I := '100000;       .END .ELSE I := .Z;       .WHEN BASIC(COLONSYMBOL) .THEN       .BEGIN I := I + '40000; NBS;       .END;       .WHEN I .Z .THEN FAILIFNOT(COMMASYMBOL);       INST := INST + I;       .IF BASIC(STARSYMBOL) .THEN       .BEGIN NBS;         .WHEN BASIC(PLUSSYMBOL) .THEN NBS;         NUMBER;         GENERATE(INST + LA + '1000 + VALUE);       .END .ELSE       .IF NUMERICAL .THEN       .BEGIN NUMBER; GENERATE(INST+VALUE);       .END .ELSE       .BEGIN TYPEIDENT;         GENERATE(INST + ADD);       .END;     .END   .END   .ELSE .IF NUMERICAL .THEN   .BEGIN     NUMBER;     GENERATE(VALUE);   .END   .ELSE FAIL(INVMCODE); .END; .PROCEDURE CLEARWORKSPACE; .BEGIN   .WHEN MAXWORK .LZ .THEN   .FOR WORKING := @ .DO   .BEGIN BACKPLUG(WORKSPACE[WORKING]);     GENERATE(.Z);   .END;   MAXWORK := .Z; .END; .ORIGIN 0; .SET BASICS[NOFBASICS] (INTSYMBOL, DBLSYMBOL,   TABLESYMBOL, TRIANGLE,   ARRAYSYMBOL,   CONSTSYMBOL, CCONSTSYMBOL,   LABELSYMBOL, ACSYMBOL,   CONDSYMBOL, PROCSYMBOL,   FORWARDSYMBOL, LISTSYMBOL,   SWITCHSYMBOL, NEXTSECTORSYMBOL,   ORIGINSYMBOL, STRINGSYMBOL,   GLOBALSYMBOL, SETSYMBOL); .ORIGIN 0; .PROCEDURE COMPSTATEMENT;  .BEGIN   ENTER;   FAILIFNOT(BEGINSYMBOL);    AGAIN :   STATEMENT;    .IF BASIC(SEMICOLONSYMBOL) .THEN    .BEGIN     NBS;      .GOTO AGAIN   .END           .ELSE .IF BS .NE  ENDSYMBOL .THEN    .BEGIN     FAIL(ENDMISSING);      NBS;     .GOTO AGAIN;    .END           .ELSE   NBS;    LEAVE; .END; .PROCEDURE CONDITION; .BEGIN   ENTER;   CONSIMPLE;   ANOTHER:   .WHEN BASIC(ANDSYMBOL) .THEN   .BEGIN     .WHEN INVERT .NZ .THEN .GOTO ORDEMORGAN;     ANDDEMORGAN:     STACK(FJADD);     NBS;     CONSIMPLE;     PLUGJUMP(FJADD);     .GOTO ANOTHER;   .END;   .WHEN BASIC(ORSYMBOL) .THEN   .BEGIN     .WHEN INVERT .NZ .THEN .GOTO ANDDEMORGAN;     ORDEMORGAN:     STACK(LA);     %IRS,LA;     INDEX := FJADD + LSTART;     CODE[#] := JMPSO + LA;     NBS;     CONSIMPLE;     PLUGJUMP(LA);     .GOTO ANOTHER;   .END;   LEAVE; .END; .PROCEDURE CONSIMPLE; .SWITCH REL = LE, LT, GE, GT, NE, EQ, GT, GE, LT, LE, EQ, NE; .INTEGER RELOPCASE; .BEGIN   ENTER;   .IF BSIS(COND) .THEN   .BEGIN NBS; INDEX := .INC ADDBS;     GENERATE(OPTABLE[#] .NEV INVERT);     SETFJADD;   .END   .ELSE .IF LETTER .THEN   .BEGIN IDENTIFIER;     .IF TYPE .AND '177776 = '12 .THEN     .BEGIN       PROCCALL;       .WHEN INVERT .NZ .THEN GENERATE(SKP);       SETFJADD;     .END .ELSE     .BEGIN ID := -1; .GOTO EXPR;     .END;   .END .ELSE   .BEGIN     EXPR:     STACK(INVERT);     EXPRESSION;     INVERT := UNSTACK;     .IF BSIS(ACCOND) .THEN     .BEGIN NBS; INDEX := .INC ADDBS;       GENERATE(OPTABLE[#] .NEV INVERT);       SETFJADD;     .END .ELSE     .IF BSIS(RELOP) .THEN          .BEGIN INDEX := .INC ADDBS;       RELOPCASE := OPTABLE[#];       NBS; CELL;       GENVADDINST(CAS);              .WHEN INVERT .NZ .THEN RELOPCASE := RELOPCASE - 6;       .GOTO REL[RELOPCASE];       GT:GENERATE(JMPSO + LA + 3);       GENERATE(NOP); SETFJADD;       .GOTO EXIT;       GE:GENERATE(NOP); GENERATE(SKP);       SETFJADD; .GOTO EXIT;       LT:GENERATE(NOP);       SETFJADD; .GOTO EXIT;       LE:SETFJADD;       GENERATE(NOP); .GOTO EXIT;       EQ:GENERATE(SKP); GENERATE(SKP);       SETFJADD; .GOTO EXIT;       NE:GENERATE(SKP); SETFJADD;       EXIT:.END     .ELSE FAIL(FCONDITION);   .END;   LEAVE; .END; .PROCEDURE CONSTEXPRESSION; .INTEGER SUM,SIGN; .BEGIN   ENTER;   SUM := .Z;   MORE:   SIGN := @;   .IF BASIC(GLOBALSYMBOL) .THEN   .BEGIN     @ := GA;     GLORIG:     VALUE := @;     NBS;   .END .ELSE   .IF BASIC(ORIGINSYMBOL) .THEN   .BEGIN     @ := LOCAL;     .GOTO GLORIG;   .END   .ELSE CONSTANT;   @ := SIGN .SHSRL 1 .NEV VALUE;   %SRC; %TCA;   SUM := @ + SUM;   .WHEN BASIC(PLUSSYMBOL) .THEN   .BEGIN     NBS;     @ := .Z;     .GOTO MORE;   .END;   .WHEN BASIC(MINUSSYMBOL) .THEN   .BEGIN     NBS;     @ := 1;     .GOTO MORE;   .END;   VALUE := SUM;   LEAVE; .END;
First Page Previous Page   Next Page Last Page