#THIS IS FILE SYNTAX, SYNTAX FOR IMP COMPILER.# # SYNTAX BOOTSTRAPPED BY MODULE RSYN # ::= NAM"; # NAM" IS READ AS NAM# ## ::= SYM"; # SYM" IS READ AS SYM# ## ::= '<' > ':' ':' = ::= SYNT(A,0); ::= ::= SYTRM(B); ::= '<' , > ::= SYNT(B,C); ::= ( ) ::= SEMR(A,0); ::= ( ) ::= SEMP(0,1); ::= ::= SEMR(A,1); ::= ; ::= , ; ::= ::= SEMP(A,0); ::= ::= SEMANTICS(); ::= ; ::= ::= SYNTAX(0); ::= = ::= SYNTAX(1); ::= ':' ':'; ::= ; ::= ';' ::= HOOK(A,A,B); ::= '%' ::= ASSEMC(A)%% # SYNTAX FOR EXTENDED SEMANTICS # ::= ; ::= + ::= SEMR(0,11B); ::= '<' > ::= SYNT(ENSTACK(EXP),B); ::= '<'>':' ':'='<'> ::= SYNT(ENSTACK(ATOM),B,SYNT(A,0)); ::= VALUE OF ::= VALU(A,B); ::= PRIORITY ::= SEMBIT(A); ::= PRIORITY ::= SEMBIT(A); ::= ':' ':' ::= SEMANTICS(); ::= ELSE ; ::= CASE () OF ::= CASE(B,0); ::= CASE () OF () ::= CASE(B,1); ::= ::= DEFCASE(A); ::= " ::= PRIORITY 1 MAXWELL(SYNTAX(2),SETPRI(2)); ::= " ::= PRIORITY 2 MAXEND(A,SETPRI(1)); ::= / ::= REPVAL(A,B); ::= => ::= QUOSEM(A); ::= ::= SEMANTICS(A); ::= => ::= QUOSEM(A); ::= ::= EQUOSE(A,NEWLIST(0)); ::= LOCAL IN ::= EQUOSE(B); # SYNTAX FOR BASE LANGUAGE # ::= ::= PRIORITY 1 NAME(A); ::= ; ::= ; ::= ; ::= ; ::= (); ::= GO TO ::= DEWOP(254B,0,A); ::= ':' ::= HOOK(B,TAG(A),B); ::= ( ) ::= DEWFUN(SUBRCALL(NAME(A)),2,REGOF(A),SUBPR0(1)); ::= ( ) ::= SUBCALL(A,B); ::= IS ::= DECLARE(A); ::= ARE ::= DECLARE(A); ::= ::= NEWLIST(A); ::= , ::= ENLIST(B); ::= ; ::= , ; ::= ::= DECL(0,A); ::= LONG ::= DECL(1,A); ::= COMMON ::= DECL(2,0); ::= REAL ::= DECL(3,0); ::= INTEGER ::= DECL(4,0); ::= REGISTER ::= DECL(5,0); ::= RESERVED ::= DECL(6,0); ::= SCRATCH ::= DECL(7,0); ::= PROTECTED ::= DECL(8,0); ::= AVAILABLE ::= DECL(9,0); ::= RELEASED ::= DECL(10,0); ::= LOCAL ::= DECL(11,0); ::= LET ::= PRIORITY 1 MAXWELL(1,SETPRI(4)); ::= =, ::= PRIORITY 4 MAXWELL(1, LETSYN(MAXEND(A))); ::= = ::= PRIORITY 4 LETSYN(MAXEND(A), SETPRI(1)); ::= - ::= "-B0CON"=>CONOP(B,0,0) ELSE DEWOP(210B,AREG1(1,15B),A); ::= NOT ::= "NOT B0CON"=>CONOP(B,0,6) ELSE DEWOP(460B,AREG1(1,15B),A); ::= LS ::= CASE (242B,514B,554B,5) OF SHIFTS (ADDOP(PAR(0),ADDR(J),I) ELSE "A LS 18" => DEWOP(PAR(1),AREG1(1,15B),A) ELSE "A LS 777777777756B" => DEWOP(PAR(2),AREG1(1,15B),A) ELSE "A0CON LS B0CON"=>CONOP(A,B,PAR(3))); ::= ALS ::= CASE (240B,514B,574B,16) OF SHIFTS; ::= LROT ::= CASE (241B,204B,204B,17) OF SHIFTS; ::= RS ::= "A LS -B"; ::= ARS ::= "A ALS -B"; ::= RROT ::= "A LROT -B"; ::= * ::= CASE (164B,220B,3) OF CAOPS (ADDOP(PAR(1),Y,Z) ELSE "A0IGRCON*B0IGRCON"=>CONOP(A,B,PAR(2)) ELSE "A0FLT*B" =>ADDOP(PAR(0),A,FLOAT(B)) ELSE "A*B0FLT" =>ADDOP(PAR(0),FLOAT(A),B) ELSE "A0IGRREG*B0IGR" =>ADDOP(PAR(1),B,A) ELSE "A*B0CON18" =>ADDOP(PAR(1),B,A)); ::= + ::= CASE (144B,270B,1) OF CAOPS; ::= - ::= CASE (154B,274B,2) OF NCAOPS (ADDOP(PAR(1),Y,X) ELSE "A0IGRCON-B0IGRCON"=>CONOP(A,B,PAR(2)) ELSE "A0FLT-B" =>ADDOP(PAR(0),FLOAT(B),A) ELSE "A-B0FLT" =>ADDOP(PAR(0),B,FLOAT(A))); ::= / ::= CASE (174B,230B,4) OF NCAOPS ELSE "A0IGR/B0IGR"=>ADDOP(230B,B,DEWOP(200B,AREG1(1,55B),A)); ::= //::=HOOK(A,A,HOOK(B,B,REG2S(DEWOP(230B, REGOF(DEWOP(200B,AREG1(1,55B),FIX(A))),FIX(B))))); ::= AND ::= "A AND 000000777777B"=>DEWOP(550B,AREG1(1,15B),A) ELSE "A AND 777777000000B"=>DEWOP(510B,AREG1(1,15B),A) ELSE "A AND NOT 777777B" => DEWOP(510B,AREG1(1,15B),A) ELSE CASE(404B,410B,420B,440B,7) OF LOGIC ( " A0CON AND B0CON" => CONOP(A,B,PAR(4)) ELSE "NOT A0CON AND B0CON" => CONOP(CONOP(A,0,6),B,PAR(4)) ELSE " A0CON AND NOT B0CON" => CONOP(A,CONOP(B,0,6),PAR(4)) ELSE "NOT A0CON AND NOT B0CON" => CONOP(CONOP(A,0,6),CONOP(B,0,6),PAR(4)) ELSE " A0REG AND B " => ADDOP(PAR(0),B,A) ELSE " A AND B0CON18" => ADDOP(PAR(0),B,A) ELSE " A AND B " => ADDOP(PAR(0),A,B) ELSE "NOT A0REG AND B " => ADDOP(PAR(1),B,A) ELSE "NOT A AND B0CON18" => ADDOP(PAR(1),B,A) ELSE "NOT A AND B " => ADDOP(PAR(2),A,B) ELSE " A0REG AND NOT B " => ADDOP(PAR(2),B,A) ELSE " A AND NOT B0CON18" => ADDOP(PAR(2),B,A) ELSE " A AND NOT B " => ADDOP(PAR(1),A,B) ELSE "NOT A0REG AND NOT B " => ADDOP(PAR(3),B,A) ELSE "NOT A AND NOT B0CON18" => ADDOP(PAR(3),B,A) ELSE "NOT A AND NOT B " => ADDOP(PAR(3),A,B)); ::= OR ::= CASE(434B,454B,464B,470B,8) OF LOGIC; ::= XOR ::= CASE(430B,444B,444B,430B,18) OF LOGIC; ::= EQV ::= CASE(444B,430B,430B,444B,19) OF LOGIC; ::= _ ::= "X0FLT_I0IGR"=>STORE(X,FLOAT(I)) ELSE "I0IGR_X0FLT"=>STORE(I,FIX(X)) ELSE "I0IGRREG0115_I/J0IGR"=>ADDOP(1230B,J,I) ELSE "I0IGRVARMEM_I+1"=>DEWOP(350B,AREG1(1,15B),I) ELSE "I0IGRVARMEM_I-1"=>DEWOP(370B,AREG1(1,15B),I) ELSE "A0IGRVARMEM_A+B0IGR"=>ADDOP(273B,A,B) ELSE "A0IGRVARMEM_A*B0IGR"=>ADDOP(223B,A,B) ELSE "A0VARMEM_A AND B"=>ADDOP(407B,A,B) ELSE "A0VARMEM_A OR B"=>ADDOP(437B,A,B) ELSE "A0VARMEM_A XOR B"=>ADDOP(433B,A,B) ELSE "A0VARMEM_A AND NOT B"=>ADDOP(413B,A,B) ELSE STORE(A,B); ::= '<'= ::= STORE(A,B); ::= [] ::= "V[I+J0CON]"=>"V[J][I]" ELSE "V[I-J0CON]"=>"V[-J][I]" ELSE "V[I0CON+J]"=>"V[I][J]" ELSE "V[I0REG+J0CON]"=>"V[J][I]" ELSE SUBSCRIPT(A,B); ::= [] ::= "[I+J0CON]"=>"[J][I]" ELSE "[I-J0CON]"=>"[-J][I]" ELSE "[I0CON+J]"=>"[I][J]" ELSE "[I0REG+J0CON]"=>"[J][I]" ELSE SUBSCRIPT(0,A); ::= SUBR IS ::= HOOK(A,A,RETURN(B),SUBEND(0)); ::= ( ) ::= SUBBEG(A); ::= ( ) ::= SUBBEG(A,NEWLIST(0)); ::= RETURN ::= RETURN(A); ::= GO TO ( ) ::= LOCAL GO IN "GO TO GO[B]; GO: A"; ::= ::= "GO TO A"; ::= , ::= "A; GO TO B"; ::= ::= NEWLIST(A); ::= , ::= ENLIST(B); ::= DATA ( ) ::= DATAST(A); ::= REMOTE ::= REMOT(A); ::= LOC ( ) ::= DEWOP(201B,AREG1(1,15B),A); ::= = ::= PRIORITY 1 VALUE 2 OF EQ; ::= '<' ::= PRIORITY 1 VALUE 1 OF EQ; ::= > ::= PRIORITY 1 VALUE 7 OF EQ; ::= NE ::= PRIORITY 1 VALUE 6 OF EQ; ::= LE ::= PRIORITY 1 VALUE 3 OF EQ; ::= GE ::= PRIORITY 1 VALUE 5 OF EQ; ::= EQ ::= PRIORITY 1 VALUE 2 OF EQ; ::= LT ::= PRIORITY 1 VALUE 1 OF EQ; ::= GT ::= PRIORITY 1 VALUE 7 OF EQ; ::= => ; ::= ; ::= => ::= EQ/"P0REG=0=>GO TO S0VAR" =>HOOK(P,P,DEWOP(320B+VAL(STACK(1)), REGOF(P),S)) ELSE EQ/"(P0IGRREG_P+1)=0=>GO TO S0VAR" =>HOOK(P,P,DEWOP(340B+VAL(STACK(3)), REGOF(P),S)) ELSE EQ/"(P0IGRREG_P-1)=0=>GO TO S0VAR" =>HOOK(P,P,DEWOP(360B+VAL(STACK(3)), REGOF(P),S)) ELSE EQ/"P0VARMEMREG=0=>S0WRD" =>HOOK(P,DEWOP(330B+OJUMPOP(VAL(STACK(1))) ,AREG1(1,15B),P),FREEZE(S)) ELSE EQ/"(P0IGRVARMEM_P+1)=0=>GO TO S0VAR" =>HOOK(P,DEWOP(350B+OJUMPOP(VAL( STACK(3))),AREG1(1,15B),P),FREEZE(DEWOP(254B,0,S))) ELSE EQ/"(P0IGRVARMEM_P-1)=0=>GO TO S0VAR" =>HOOK(P,DEWOP(370B+OJUMPOP(VAL( STACK(3))),AREG1(1,15B),P),FREEZE(DEWOP(254B,0,S))) ELSE EQ/"P0VARMEM=0=>GO TO S0VAR" =>HOOK(P,DEWOP(330B+OJUMPOP(VAL(STACK(1))) ,AREG1(1,15B),P),FREEZE(DEWOP(254B,0,S))) ELSE EQ/"P0CON=R0CON=>S" =>CONOP(P,R,1000010B+VAL(STACK(1)),S) ELSE EQ/"P=R0CON18=>S0WRD" =>HOOK(P,P,HOOK(R,DEWOP(300B+OJUMPOP(VAL( STACK(1))),REGOF(FETCH(P)),ADDR(R)),FREEZE(S))) ELSE EQ/"P=R0REG=>S0WRD" =>HOOK(P,R,HOOK(P,DEWOP(310B+OJUMPOP(8+VAL( STACK(1))),REGOF(R),P),FREEZE(S))) ELSE EQ/"P0VARMEMREG=R=>S0WRD" =>HOOK(P,P,HOOK(R,DEWOP(310B+OJUMPOP(VAL( STACK(1))),REGOF(FETCH(P)),R),FREEZE(S))) ELSE EQ/"P=R0CON18=>GO TO S0VAR" =>HOOK(P,P,HOOK(R,DEWOP(300B+OJUMPOP(VAL( STACK(1))),REGOF(FETCH(P)),ADDR(R)), FREEZE(DEWOP(254B,0,S)))) ELSE EQ/"P=R0REG=>GO TO S0VAR" =>HOOK(P,R,HOOK(P,DEWOP(310B+OJUMPOP(8+VAL( STACK(1))),REGOF(R),P),FREEZE(DEWOP(254B,0,S)))) ELSE EQ/"P=R=>GO TO S0VAR" =>HOOK(P,P,HOOK(R,DEWOP(310B+OJUMPOP(VAL( STACK(1))),REGOF(FETCH(P)),R),FREEZE(DEWOP(254B,0,S)))) ELSE LOCAL IF IN EQ/"NOT(A=B)=>GO TO IF; C; IF: 0"; ::= => ::= "A NE 0=>B" ELSE "A=>GO TO B"=>"A NE 0=>GO TO B" ELSE "(A0IGR_A+1)=>GO TO B"=>"(A_A+1) NE 0=>GO TO B" ELSE "(A0IGR_A-1)=>GO TO B"=>"(A_A-1) NE 0=>GO TO B" ELSE "NOT (P = Q)=>GO TO R" => "P NE Q=>GO TO R" ELSE "NOT (P NE Q)=>GO TO R" => "P = Q=>GO TO R" ELSE "NOT (P > Q)=>GO TO R" => "P LE Q=>GO TO R" ELSE "NOT (P EQ Q)=>GO TO R" => "P NE Q=>GO TO R" ELSE "NOT (P LT Q)=>GO TO R" => "P GE Q=>GO TO R" ELSE "NOT (P GE Q)=>GO TO R" => "P < Q=>GO TO R" ELSE "NOT (P < Q)=>GO TO R" => "P GE Q=>GO TO R" ELSE "NOT (P LE Q)=>GO TO R" => "P > Q=>GO TO R" ELSE "NOT (P GT Q)=>GO TO R" => "P LE Q=>GO TO R"; ::= => ELSE ::= EQ/"A0CON=B0CON=>C ELSE D"=>CONOP(A,B,2000010B+VAL(STACK(1)),C,D) ELSE LOCAL ELSE,I IN EQ/"I IS REGISTER,SCRATCH; A=B=>(I_C; GO TO ELSE); I_D; ELSE: I IS PROTECTED; I"; ::= ::= EQ/"A=C => -1 ELSE 0" ELSE EQ/"P0CON=R0CON"=>CONOP(P,R,8+VAL(STACK(1))); ::= => ELSE ::= "A NE 0 => C ELSE D"; ::= MOVE THROUGH TO ::= ADDOP(251B,SUBSCRIPT(COPY(A), FIX(N)), ADDOP(505B,B,DEWOP(541B,AREG(1,13),A))); ::= FOR IN ,, ::= LOCAL FOR IN "B_C; FOR: A; B NE E=>(B_B+D; GO TO FOR)" ELSE "A FOR B IN C,D0CON35,E"=> LOCAL FOR IN "B_C; FOR: A; (B_B+D) LE E=>GO TO FOR" ELSE "A FOR B IN C,D0CNG35,E"=> LOCAL FOR IN "B_C; FOR: A; (B_B-(-D)) GE E=>GO TO FOR"; ::= FOR TO ::= "A FOR B IN 0,1,C" ELSE "(A0IGR[I0IGRVAR]_B0IGR[I]) FOR I TO C0IGR"=> "MOVE B THROUGH C TO A"; ::= FOR FROM ::= "A FOR B IN C,-1,0" ELSE "(A0IGR[I0IGRVAR]_B0IGR[I]) FOR I FROM C0IGR"=> "MOVE B THROUGH C TO A"; ::= WHILE DO ::= LOCAL WH IN "WH: A=>(B; GO TO WH)"; ::= WHILE DO ::= LOCAL WH IN EQ/"WH: A=B=>(C; GO TO WH)"; ::= UNTIL ::= LOCAL UT IN EQ/"UT:A; NOT(B=C)=>GO TO UT"; ::= UNTIL ::= "A UNTIL B NE 0"; ::= ( ) ::= LOCAL CND IN EQ/"A=B=>GO TO CND[1]; CND:0"; ::= ( ) OR ::= LOCAL OR IN EQ/"A=B=>GO TO OR[1];C;OR:0"; ::= ( ) AND ::= LOCAL AND IN EQ/"NOT(A=B)=>GO TO AND;C;AND:0"; ::= => ::= LOCAL IF IN "A;GO TO IF;B;IF:0"; ::= => ELSE ::= LOCAL I,IF,ELSE IN "I IS REGISTER,SCRATCH; A; GO TO IF; I_B; GO TO ELSE; IF: I_C; ELSE: I IS PROTECTED; I"; ::= WHILE DO ::= LOCAL IF,WH IN "WH:A;GO TO IF;B;GO TO WH;IF:0"; ::= UNTIL ::= LOCAL UT IN"UT:A;B;GO TO UT"; ::= PRINT ::= PRINCAL(SUBRCALL(NAME(ENSTACK(!PRN.!))),A); ::= READ ::= PRINCAL(SUBRCALL(NAME(ENSTACK(!RED.!))),A); ::= , ::= PRINCAL(A,B); ::= ::= DEWFUN(A,2,REGOF(A)); ::= ::= PRINPAR(0,A); ::= OCT ::= PRINPAR(1,A); ::= IGR ::= PRINPAR(2,A); ::= STG ::= PRINPAR(3,A); ::= FILE ::= PRINPAR(6,NAME(A),0,0,0); ::= FILE . ::= PRINPAR(6,NAME(A),B,0,0); ::= FILE [,] ::= PRINPAR(6,NAME(A),0,C,D); ::= FILE .[,] ::= PRINPAR(6,NAME(A),B,C,D); ::= / ::= PRINPAR(5,ENSTACK(0),0,0); ::= DEVICE ::= PRINPAR(8,A); ::= IMAGE MODE ::= PRINPAR(7,NAME(ENSTACK(0))); ::= TAB ::= PRINPAR(9,N); ::= FILL ::= PRINPAR(10,N); ::= FLT . ::= PRINPAR(11,A,B); ::= . ::= FCON(A,B,0); ::= ." ::= FCON(A,B,C); ::= FIX() ::= FIX(A); ::= FLT() ::= FLOAT(A); ::= '<' , > ::= BYTEP(A,B,C,0); ::= '<' , > ::= DEWOP(135B,AREG1(1,15B),BYTEP(A,B,C,1)) ELSE "A<18,0>" => DEWOP(550B,AREG1(1,15B),A) ELSE "A<18,18>" => DEWOP(554B,AREG1(1,15B),A); ::= _ ::= ADDOP(137B,A,B) ELSE "A<18,0>_B" => ADDOP(542B,A,B) ELSE "A<18,18>_B"=> ADDOP(506B,A,B); ::= BYTEP ; ::= '<' >; ::= '<' > ::= DEWOP(135B,AREG1(1,15B),A); ::= '<' + > ::= DEWOP(134B,AREG1(1,15B),A); ::= '<' + > _ ::= ADDOP(136B,A,B); ::= '<' R > ::= DEWOP(550B,AREG1(1,15B),A); ::= '<' L > ::= DEWOP(554B,AREG1(1,15B),A); ::= '<' R > _ ::= ADDOP(542B,A,B); ::= '<' L > _ ::= ADDOP(506B,A,B); ::= EXECUTE ::= DEWOP(256B,0,A); ::= CALL ME ::= CALLME(A); ::= TWOSEG ::= SWITCH(18); # A FEW CHARACTER THINGS # ::= IDPB(,) ::= "<+B>_A"; ::= ILDB() ::= "<+A>"; ::= R ::= "R I0CON0729"=>"I RS 29" ELSE "R I0CON1422"=>"I RS 22" ELSE "R I0CON2115"=>"I RS 15" ELSE "R I0CON2808"=>"I RS 8" ELSE "R I0CON3501"=>"I RS 1" ELSE ERROR(1,!R REQUIRES TEXT CONSTANT OPERAND.!); # A FEW SYNTICES FOR DECSYSTEM-10 PROGRAMMING. # ::= CALLI(,) ::= "CALLI(A0CON12,B)"=> HOOK(B,B,HOOK(A,DEWOP(47B,REGOF(FETCH(B)),ADDR(A)), DEWOP(476B,REGOF(B),NAME(ENSTACK(CALLI))))) ELSE "CALLI(A,B,0)"; ::= XWD , ::= ADDOP(504B,A,DEWOP(550B,AREG1(1,13),B)); ::= IOWD , ::= "XWD (-A),(B-1)"%%