First Page Previous Page   Next Page Last Page
.PROCEDURE BACKPLUG; .INTEGER INSTADD; .BEGIN      INSTADD := @;   .WHEN LA > '777 .THEN .GOTO IGNORE;   @ := INSTADD;   AGAININDEX := @ + 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 LNOTDECLCONSTLCONST, LARRAYLCOMPCONSTLARRAYLLABELLTABLE; .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;     LCONSTVADD := ADD.GOTO FIN;     LARRAY: @ := ADD.GOTO ARRTAB;     LTABLE: @ := .INC ADD;     ARRTABSTACK(.SSM @);     SUBSCRIPTVADD := UNSTACK;     .GOTO FIN;     LCOMPCONSTVALUE := ADD;     EXPLICITCONST := -1;     .GOTO FIN;     LLABELFAIL(RHSLABEL);     FINID := .Z;   .END   .ELSE .IF BASIC(STARSYMBOL.THEN   .BEGIN NBSIDENTIFIER;     .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 .Z .THEN     .IF J .NE .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 NBSI := '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 NUMBERGENERATE(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] (INTSYMBOLDBLSYMBOL,   TABLESYMBOLTRIANGLE,   ARRAYSYMBOL,   CONSTSYMBOLCCONSTSYMBOL,   LABELSYMBOLACSYMBOL,   CONDSYMBOLPROCSYMBOL,   FORWARDSYMBOLLISTSYMBOL,   SWITCHSYMBOLNEXTSECTORSYMBOL,   ORIGINSYMBOLSTRINGSYMBOL,   GLOBALSYMBOLSETSYMBOL); .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 = LELTGEGTNEEQ, GTGELTLEEQNE; .INTEGER RELOPCASE; .BEGIN   ENTER;   .IF BSIS(COND.THEN   .BEGIN NBSINDEX := .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 NBSINDEX := .INC ADDBS;       GENERATE(OPTABLE[#] .NEV INVERT);       SETFJADD;     .END .ELSE     .IF BSIS(RELOP.THEN          .BEGIN INDEX := .INC ADDBS;       RELOPCASE := OPTABLE[#];       NBSCELL;       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 .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