■ HI dk M HIH39BSH iMifiiiy il flmn hHnBHHMS&BmSS HHHHHT MK ■oH Hub HH R HHHI I y,.f Unfa HI H I ■ I ■i ■ At' HI HHHI H HH1 HI HH ■ >f> Hfl ohI HHHHH TmnBl HH H HI hhbiiwbi a» 1 6W HI WBMm HUfflH BBSS J8RS3 Hffi ■Ha LIBRARY OF THE UNIVERSITY OF ILLINOIS AT URBANA-CHAMPAIGN 510.84 r»o. 308-315 cop2 The person charging this material is re- sponsible for its return to the library from which it was withdrawn on or before the Latest Date stamped below. Theft, mutilation, and underlining of books are reasons for disciplinary action and may result in dismissal from the University. UNIVERSITY OF ILLINOIS LIBRARY AT URBANA-CHAMPAIGN APR 2 e 1974 APH 9 /?ep|i L161 — O-1096 Digitized by the Internet Archive in 2013 http://archive.org/details/nucleolasformals310irwi 3/£) Report No. 310 2. MJCLEOL AS A FORMAL SYSTEM by Marek Pawel Irwin- Zarecki February 21, 1969 Report No. 310 NUCLEOL AS A FORMAL SYSTEM by Marek Pawel Irwin-Zarecki February 21, 1969 Department of Computer Science University of Illinois at Urbana-Champaign Urbana, Illinois 6l801 *This work was supported in part by the Department of Computer Science at the University of Illinois at Urbana-Champaign, Urbana, Illinois, the National Science Foundation under NSF Grant GJ-217, by BUILD, the project which is sponsoring cooperation on EOL-U between the University of Illinois and the University of Colorado and submitted in partial fulfillment of the requirements for the degree of Master of Science in Computer Science, February 1969 . Ill ACKNOWLEDGMENT I would like to express my appreciation to my advisor, Dr. Jurg Nievergelt, Associate Professor of Computer Science and Mathematics, for his guidance and supervision of this thesis. I also gratefully acknowledge the assistance of Dr. Leon Lukaszewicz, Visiting Professor of Computer Science (1966-67) and Director of the Institute of Mathematical Machines, Polish Academy of Science. Also, I wish to express my thanks to Mrs. Freda Fischer, Senior Research Programmer, and Mr. John Sidlo, Graduate Research Assistant of the Department of Computer Science. I would like to acknowledge the personnel of the IBM 3^0/75 service area of the Department of Computer Science at the University of Illinois at Urb ana-Champaign for their assistance. This work was supported by the Department of Computer Science at the University of Illinois at Urb an a- Champaign, the National Science Foundation under NSF Grant GJ217, and by BUILD, the project which is sponsoring cooperation on EOL-^ between the University of Illinois and the University of Colorado. I would like to express my sincere appreciation to my wife, Basia, for her encouragement during this study. IV TABLE OF CONTENTS Page ACKNOWLEDGMENT Hi 1. INTRODUCTION 1 2. NUCLEOL FORMAL SYSTEM 3 2.1. NUCLEOL BASIC FUNCTIONS AND PREDICATES 5 2.2. POSTULATES 7 2.3. NUCLEOL IN PL/l 11 3. NUCLEOL PROGRAMMING LANGUAGE AS A MODEL FOR NUCLEOL ... 28 3-1. NUCLEOL PROGRAMMING LANGUAGE SYNTAX 29 3-2. MAPPING OF NUCLEOL INTO NUCLEOL PROGRAMMING LANGUAGE . 31 k. THE NUCLEOL MACRO PROCESSOR NUCMAC 3k k.l. MACRO SYNTAX $k 1+.2. NUCMAC 35 5. CONCLUSION hi REFERENCES . k2 1. INTRODUCTION This thesis is presented as a contribution to the state of the art in formal definition of programming languages. The ALGOL 60 report (l) started the trend by showing the feasibility of a formal definition of the syntax of programming languages. Since then efforts have mainly been concentrated on a definition of semantics. Notable among the latter is McCarthy's approach (2,3) which has strongly influenced the present paper. However, McCarthy applies his method only to very small parts of programming languages, and it is not clear what the complexity of a formal definition of a full programming language would be. A research group at the IBM laboratory in Vienna, Austria, has applied techniques which are substantially the same as McCarthy's to the formal definition of PL/l. Their reports, which so far amount to approximately 1000 pages, are summarized in (K) . This paper attempts to present a formal definition of NUCLEOL, a small but useable list processing language. NUCLEOL was designed by Freda Fischer, Marek Irwin- Zarecki, Jurg Nievergelt, and John Sidlo and has been described in Sidlo' s M.S. thesis (5). A significant aspect of this thesis is its insistance that a formal definition should define the language both for humans and for computers. Accordingly, the definition has been partially written in PL/l and it constitutes about a half of the implementation of NUCLEOL. The plan of this thesis is as follows. In the second part (following this introduction) I define a formal system called NUCLEOL. I list basic predicates and functions and indicate the axioms that they must satisfy. Next I define the flow of control and the meaning of the NUCLEOL instructions. This definition is written in the form of a PL/1 program. In the third part I present the NUCLEOL programming language as a model for the NUCLEOL formal system. The section 3*1 contains the syntax of the NUCLEOL programming language (somewhat different from (5))' The section 3-2 shows how NUCLEOL functions and predicates are reflected in the NUCLEOL programming language, thus showing that the NUCLEOL programming language is indeed a model, in the sense of logic, for the NUCLEOL formal system. The fourth part is somewhat unrelated to the main topic of this thesis. It contains a macro generator, written in NUCLEOL itself, which allows NUCLEOL to be extended by means of macros. It also serves as an example of a NUCLEOL program. 2. NUCLEOL FORMAL SYSTEM NOCLEOL FORMAL SYSTEM IS DEFINED TO BE < ALPHABET , TERMS , FORMULAS > ; ALPHABET = < VARIABLES , BASIC FUNCTIONS » CONSTANTS t BASIC PREDICATES , = , LOGICAL CONNECTIVES , AUXILIARY SYMBOLS > ; THE SET OF VARIABLES INCLUDES: STATE, wlELL_FORMEU_STKlNG, BLOCK, CONST I TUENT t TYPt t DIRECT ION, B I T ^TR ING , CHAR AC TE R S T R I NG , NUMBER , NAME , WFS_NAME , WF S , C , D , ANC SCME OTHERS SUBSCRIPTED VARIABLES /* NAMES CF VARIABLES DO NUT HAVE ANY FORMAL MEANING */ ; THE SET OF BASIC FUNCTIONS IS LISTED IN 2.1. 5 TFE SET OF CONSTANTS INCLUDES: IB i iC i $D , *P , *R , iLEFT_PARENT , ttU GHT.PAPE NT , LEFT , RIGHT ; THE 6ET OF BASIC PREDICATES IS LISTED IM 2.1. J IS THE EQUALITY RcLATUN SYMBUL ; IFF SET Uf LOGICAL CONNECTIVES INCLUDES: I /* tiK */ i L /* AND */ , => /* IF..., THEN... #/ , <=> /* IF AND ONLY IF */ , -, /* MOT */ ; THE SET CF AUXILIARY SYMtiULb INCLUDES: ( /* LEFT PARENTHESIS */ , ) /* RIGHT PARENTHESIS */ , , /* COMMA */ ; THc SET UF TERMS IS DEFINED INDOCTIVELY AS FOLLOWS: VARIABLE IS A TERM ; CONSTANT IS A TERM ; if fun is a basic function and ti,t2,...,tn are terms then FUN! T1,T2,. .. ,TN) ISA TERM ; THE icT UF FURMOLAS IS uEFINED INDOCTIVELY AS FOLLOWS: IF Tl AND T2 ARE TERMS THEN T1=T2 IS A FORMULA ; IF P IS A BASIC PREDICATE AND T1,...,TN ARE TERMS THEN P(Tl,...,TI\i) IS A FORMOLA ; IF F0KM1 AND HORM2 ARE FORMULA:* THfcN FUR Ml | FORM? , FORM1 C FORM? , FUPM1 = > FORM2 » FURM1 <=> FuR-12 ARE FORMULAS ; IF FORM IS A FuRMULA THEN -.FORM lb A FORMULA ; 2.1. NUCLEUL BASIC FUNCTIONS AND PREDICATES /* ALL ARGUMENTS AND YIELDED RESULTS OF THE BASIC FUNCTIONS AND PREDICATES ARE FURMAL VARIABLES. NAMES UF THE FORMAL VARIABLES INFORMALLY INDICATE KINDS OF EXPECTED ARGUMENTS AND RESULTS. */ dASIC PREDICATES : CATEGORY PREDICATES : IS_bTATE( STATE) ; IS_vhFS( WELL_FORMrD_STRING) ; IS_BLOCK(BLUCK) ; I S_CON ST I TUfcNTi CONSTITUENT) ; IS_TYPE( TYPF ) ; IS_CIRFCTIGN( DIRLCTIJN) ; I S_BITS< BIT STRING) ; I s_lhrs( chmkacterstrini;) ; 1S_.\UMB( NUMBER) ; IS_NAME(NAMfc) ; CTHER PREDICATES : Ib_CuiMVERTI bLEiCONVERSl ON_MODE ,CuNSTITUENT) ; CAN_PASb'.bl ,DI RE C T I 0N2 , wF S_NIAME2 , ST mT t ) =Nt^_STATt ; ^FS LEVEL FUNC TIONS : BL0CK_4T(CIRECTI0N,WFS)=BLGCK ; C0NSTITUcNT_Ar(DIRL"CTI0^wFS)=C0N5TI TOENT ; DELETE (DIRECTION, WFS )=NtW_WFS ; INSERT* DIRECT ION, B LUCK, WfS) =NEW_*FS ; CHANGElER_A T TR I BUTE , WFS ) =NE W_WF S CONSTITUENT LEVEL FUNCTUS : TYPE_OI-(CCNSTI TUtNT)=TYPE i ATT«_CF( CONSTITUENT) =ATTRI5UTE ; li I TS_ INI CONST I TUENT) =3 I TST R I NG ; CHRS_1N(C0NSTITUEN1 I =CHAKAC TE RSTK I NG ; gUM6_IN( CCimSTI i"UENT)=NUMBtR ; NAME. INI CCN ST I Tut N T ) = WF S_NAME ; CUNVERT.DA TA(CUNVERSI 0N_M0DE ,CJNSTI TUEN1 ) =NEW_CGNST ITUENT SET.ATTRI ATTP. I PUT! : t CoNSTI TUENT I =NE W_CONST 1 TUbNT ; Af)DS( C o iM S T I TUENT1,C')NSTITUENT2) =N£w_CUNSTI 1"UENT ; SUdSICCNSTITCcNTl tCONSTI TUfcNT2) = NE W_CONST 1 TUENT ; MLTStCCNSTI TUENT 1 »CONSTi TUbNT 2 ) =NEW_CUNSTI TUENT ; JlVS(CCMSTITUtNTl ,C:)NSTI TUE.MT2 ) =NE W_CUNST I TUENT ; ANUS(CCNSTI TUENT1 , CONST I TUENT 2) =Nc *_d)NST I TUbNT ; GRS I S.SOME THI NG < B ) , WHERE IS_SOMt THING IS ANY CATEGORY PREDICATE ; IS. POSTULATES TYPE( TYPE) <=> TYPE=iB TYPE=*C TYPE=*D TYPE=$P TYPE=$R TYPE=iLCFT_PARENT TYPE=*RiGHT PARENT IS_DIRFCTICN(D) <=> D=LEFT | U=RIGHT ; JPPOSITE(LEFT)=RIGHT ; JPPOSITEIR IGHT)=LLFT ; IS_DI! I S_D I RECT I jN ( D ) IS_TYPE( TYPt_UF(C ) ) < = > IS_C'JN.>TlTUtNT(U ; is.bi ts( 31ts_in(c) ) < = > is_chrs(chrs_in(c) ) <=> is_num3(numr_uf(c) ) <=> is_name(.mame_in(C) > <=> 1 S_CUNSTI TUENT (CI IS_CJNSTI TUENT (C) IS_CUNSTITUENT(C) IS_CUNSTITUENT (C) I S_CONSTITUENT< ADDSiCl ,C2) ) <=> TYPE_UF(C1 u TYPE_OF(C2 => TYPE_OF(AU IS.CGNSTI IlENTt SU3S(Cl ,C2) ) < = > TYPE_OF(Cl L TYPE_OF(C2 => TYPt_UF(SU I S_CONSTI TUENT(MLTS(C1,C2) ) <=> TYPE_OF(Cl & TYPE_OF(C2 => TYPE_OF(ML IS.CONSTI TUENU UIVS(C1 ,C2) ) < = > TYPE_OF(Cl £ TYPE_JF(C2 &-.,NJJ.M3ER_Ii\i( => TYPE_OF(Dl lS_CQNSTITlENUANDS(GltC2) ) <=> TYPE_UF(C1 & TYPt_UF(C2 => TYPE_UF(AN lS_CQNSTITuENT( ORS(Cl,C2)) <=> TYPt_OF(Cl f. TYPE_UF(C2 => TYPL_ur( U IS_CONSTITUENT(NOTS(Cn J < = > TYPE_UF(C1 => TYPE_UF(NU IS_CONSTITLENT(CuNCS_bITS(Cl ,C2) ) <=> TYPE > = $0 )=$D DS (CI ,C2) )=*D )=$J )=$D BS (C1,C2) )=$D ) = $D )=5>D TS (C1,C2I )^$D )=$D »=$D C2)=C VS (C1,C2) )=$D )=$B )=$B DS(C1,C2) )=$B ) = $B )=$B RS (C1,C2) )=$3 )=$B rs(cin=$B ; (Cl)=$b & TYPE(C2)=$B. => type.gf (loncs_bits(li,C2) )=$b IS.CUNSTITUENriCONCS.CHRStCl ,C2) ) <=> TYPt(Cl)=$C £ TYPE(C2) = $C = > TYPE.GF (CUi\lCS_CHRS(Cl,C2) ) = $C IS.CuNSTITLENH SPLIT_BITSliC) ) < = > TYPE_OF ( C > = $ H = > TYPE_UKSPLlT_BITSl(C)l=*B I S_CCNSJITUENT( SPLI T.bl TS2IC) ) <=> TYPE_OF ( C ) =i d = > TYPE.GF { SPLIT__BITS2(C) )=$B I S.CONSTI TUENT( SPLIT_CHRS1(C) ) <^> T YPE_OF ( C ) =$C = > TYPE.OF ( SPLIT_CHRS1 (C) ) = J»C I S_CU mSTI TUENTt SPLI T_CHRS2(C) ) < = > TYPE_Ut- ( C ) = $C = > TYPE.OF ( SPLIT_CHRS2(C) }=$C I S_tL I ON.rtGOE ,CGNbTI TOENT ) = > I S_CCNbTITUc*T(CGNVERT_UATA(CaNVERS [ON.MUDE, CONSTITUENT ) ) IS.CGNSTI TLCNTICGNSTl TOENT) ■> I S.tJLGCM CUNST I ruCNT ) I TYPE.OF (CONST I TUENT)=$LEFT_PAREi*T I TYPfc.GP( CONST I TUENT) BRIGHT _ PARENT ; IS. CON SI ITLL\IT(CONSTI TGENT_aT(DI RECTI UN, WFS)) < = > 1 S_DIRECTIGN(DIRFC F1JM) i IS.WFS(WFS) ; lS_riL JlK(BLGCK.AT (DIRECT ION , WFS) ) < = > IS.WFS(WFS) L UIkEL n UiJ = LEFT i»-i TYPE.GF (CUM SI I TOENT.AT( DIRECT I uN , *F S ) ) = i>L L f T_P ARE^T I I S.kFol *FS) L DlkECTIGN=RIGriT t-.TYPE.OF (CONST I 1"0CNT_AT I DIRECTION, WFS I ) = *. lb_*FS( = > IS_wF5( = > I S_JL^l = > lS_*Fb( ^ = > L I I (S.BLGC JELEFct JlkECTIONt rtFS ) ) IS. BLOCK ( BLOCK.AT( DIRECTION ,WFS ) I ; INSERT ( DIRECTION! BLOCK , *FS) ) I S_DIkfcCTlON(DlRECTIGN) S I S.dLOCMBLGCKJ C IS.WFS(wFS) ; (NicRT (DIRECTION* BLOCK, WFS) ) BLGCK.ATI DIRECTION, INSERT (DIRECTION, BLGCn, rfFSI ) = "JLJCK INSERT ( DIRECTION, BLOCK , WFS J ) DELcTEl DIRECTION, INSERT (DIRECT ION, BLOCK, WFS ) ) = ^FS MBLOCK.AT ( D 1RECT ION , WFS ) ) I\SERT( DIRECTII)N,BLuCK_AT(DIRFCT I0N,WFS ) , DELETE(DlKcCTlUN,WFS))=hFS ; CHANCE (D IK EC HON, CONST I TOENT ,WFS) ) I S_BLJC*(CO.\lSTI TOE iT) IS.BLJCMCGNSTI TUEuT_aT (DIRECT IliN.aFS ) i I S_CG.\STI TUE,>iT (CUNSTI TUEnTI I YPE.GF (CONSTI TUtNT) =TYPF_OF I CONST I TUENT.AT (DIRECT I JN,hFS ) ) : KiCKSTl ruENT) IS BLJCK(CGNSTI TOENT AT ( ul REC7 I U,\ , wF S ) ) SKIP = > CHaNGE(OIRECTION,CONSTITOENT,WFS) = INSERT ( DI RElT ION , C UNSTITUENT, DELETE (DIRECT I ON, WFS ) ) ; BLOCK ( U, WFS) = INSERT (UPPOSITE(D) , BLOCK_AT ( D , wF S ) ,DELETE(D,WFS)) ; IS_KFS( INBLO( D,WFS) ) < = > IS_01RECTIGN(D) £ IS_WFS(WFS) ; lS_BLOCK(BLOCK_AT(D,wFS> = > IN6LG(D,WFS)=INBLG( D, SKI P_BLOCK ( D , WFS ) ) ; TYPE_CF(CCNSTlTUENT_AT(D,wFS> )=$LEFT_PARENT G D=LEFT I TYPE_GF(CGNSTITUENT_AT(D f WFS) ) =$RIGHT_PARENT & D=RIGHT => IN6Lo7d,i*FS)=WFS ; IS_WFS(SHIFT( DIRECTION, WFS) ) < = > I S_DI RFC T I JNC DIRECT I DM ) L 1S_WFS(*FS) ; IS_BLUCK(CCNST1 TUENT_AT( D, WFS) ) => SHIFT(Q,WFS)=SKIP_BLGCMD f WFS) ; 1 S_kFS( SHlFT(D,rtFS) ) = > SHIFT( LiPPOSI TE (0) , SHIFT(DtWFS) )=wFS ; CONSTITOENT_AT(OPPOSI TE ( D) , SH1F Ti 1 , WFS ) ) - CO.NSTITU£NT_AT(D,WFS) ; IS_fcFS( INBLGID1 ,WFS) ) & INBL0(Dl,WFS)=IN3LJ(01,SHlFT IS_bL JCMCGNbTI TUE,\jT_AT(D,WFS) ) ; SHI F 1 { D, 1 1MB LOO ,WFS) ) = SK I P_bLUCK( D , Sh I FT(UPPUiI7b(D), INBLJ(OPPGSITE( J) ,wFS)) ) ; IS_*FS(RESTGRE< WFS) ) < = > IS_WFS(WFS) ; RESTORE! RESTORE! WFS) ) =RE STORE ( WFS) ; IS_CIRECTICN( D) L IS_wFS(WFS) => RESTORE(WFS)=RESTCRE! SHlFT(D,WFSM ; IS_WFS(CGNTENT(NAME, STATE) ) => I S_NAME ( NAME ) U I S_STATE(STATE) ; IS_STATb( STATE) => I S_WF S( CONTENT (EXEC ( ST ATE ), STAT E ) ) ; CGNTENT_GF_EXEC! STAT E ) sCOw TENT ( EXEC I ST ATF ) , ST ATE ) ; WF S_NAMED( NAME) =CONTENT< NAME , STATE ) WHcRE STATE IS THE CURRENT SfATt; IS_STATE(KILL(NAME, STATE ) ) <= > I S_WFS ( CONTENT ( NAME, ST ATE) ) ; I S_S T ATE ( CREATE (NAME, WFS, ST ATE ) ) < = > I S_ NAME (NAME) L IS_WFS(WF:>) £ I S_ST ATE ( ST AT E ) £-.1 S_V»FS( CON TENT (NAME, STATE) ) ; I S.STATE (CREATE (NAME, WFS,S TATE) ) = > CCNTE JT(.\AME,CREATE(NAME, WFS, STATE) )=WFS ; IS_STATE(CREATE(NAME,rfFS,STATE)) = > KILL(NAME, CRE ATE ( NAMc , *F S , STATE) ) =STATE ; I S_ WFS! CONTENT! NAME, STATE) ) => CRE ATE (NAME, CONTENT ( NAME, STATE ) , K1LL( NAME, STATE) > =STATE ; ALTER ( \l AM F , WFS, STATE )=CRFATE( NAME , WFS, KILL (NAME, ST ATE) ) 1i)V£S(CL iNAMElfD2tNftME2 t bTATb) = ALTEk( NAME It DELETE! J 1 ,C()NTENT( NAME1 , ST ATE ) ) t 10 ALTbR( NAME2 t INSERT! U2 , BLUCK_AT(D1 ,CUN TENT (NAME It ST ATE ) ) ( CONTENT ( NAM E2 t STATE ) ) , STATE)) ; 11 2.3. NUCLEUL IN PL/1 MUCLEUL: DECLARE! DECLARE OFLLAKE DECLARE LEFT RIGHT NEUTR ^>TATE NEw_S ARG ( ARG1 ARG? ARG 3 DECLARE!ACTUA BINAR DECLARE DECLARE! DECLARE PROCEDURE OPTIGiMStMAIN MOVE»CUPYf RSTKtSHFTtCV ADDf SU3 tMLTfOIVt AND tUR CCiNIC, SPLT,TEST) ENTRY(3INARY FIXED) RE $6 CHARAC $C CHARAC $D CHARAC $P CHARAC $R CHARAC iS CHARAC $LEFT_PARENT CHARAC $KlGHT_PARENT CHARAC XNUNACTIVfc CHARACTER! 1 NUNACT1VE CHARACTER11 SUCCESS CHARACTER! I FAILURE CHARACTER! 1 UNDEFIN CHARACTER! DATA CHARACTEKll rt CHARACTER! 1 CHARACTER! I CHARACTER! 1 AL CHARACTERil rtlNARY FIKED INI TATE, STATED BINA 3) BIMARY FIXED, BINARY FIXED DEFINED ARb BINARY FIXED DEFINED ARG UNARY FIXED DEFINED ARG L_ARGl,ACTUAL_Ai ) , I S_C0NSTI TUENT ENTRYIBINARY FIXED) RETURNS(BIT( 1) ) , IS.TYPE E N TRY! CHARAC TcR! 1 ) ) Re TURNS!bIT( 1 ) ) , IS_D1RECTIU\ IZ e:m ikyjcharactfpi i ) ) returns! b1t( 1) ) , I b_CUNVERTIBLE EnTRY( BINARY FIXE0»3lNARY FIXED) KETURNS .BINARY FIXED) RE TURNS* BINA'RY FIXED); DECLARE TYPE.GF EN TRY (BINARY FIXED) RETURNS (CHARACTER! 1 ) ) , ATTR_OF ENTRY(BINAKY FIXED) RbTURNSiCHARACTEK ( 1 ) ) , B1TS_IN ENTRY(BINARY FIXED) RFTURNS(BINARY FIXED), CHRS_I,N E.\i TRY (BINARY FIXED) RETURNS(BIi\jAR Y FIXED), NUMB..IN CNTRY(BINARY FIXED) RETURNSIBINARY FIXED(3i)li NAME_IN E,MTRY(dI NARY FIXED) RE TURNS ( CHAR AC TER( 8) ) ; DECLARE SET.ATTR ENTRY i CHARACTER ( 1 ) .BINARY FIXED) RETURNSIBINARY F I XtD) ; DECLARE CCNVERT_DATA LNTRYIBIMARY FIXED, BINARY FIXED) RETURNS (BINARY FIXED) ; DECLARE ( ACDS, SUbS.MLTS.DI VS) ENTRYIBINARY FIXED, BINARY FIXED) RETURNSIBINARY FIXED) ; DECLA«E( ANUS, DRS) EmTRY(BINARY FIXtD, BINARY FIXED) KETURNS(BINARY F IXEJ) , NUT S b MTRY ( BINARY F IXED ) keturns(binary \-ixto ) ; 14 UbCLAKb(CG\CS_i>ITS,CUNCS_CHRS) F.N I RY lb I NARY FIXED* 31 NARY FIXED) RET UK ^S( Li I NARY FIXED); JtCLAKtK SPL IT_BlTSl,SPLlT_ciITS2,SPLIT_CHRSl , SPL IT_CHR^2 ) F.AITKY (IsINARY FIXED) . RETURNS (BINARY FIXED) ; DECLARE TFbTS E-N1RYI BINARY F I XcO ,6 I NARY FIXED.BINARf FIXED) RE TURN 5(13 I T( 1 ) ) ; OtCLARE NEw_CUNSTITUENT BINARY hlXED; ULLLARt ERR_MS(i ENTRY(CHAKACTER( b<~ ) ) ; Du WHILE ( IS_STATE( STATE)) ; 3TATE=NUCSTEP( STuTt: ) ; END ; -it TURN; -xuCSTtP :PRCCEDURt( ST a TE ) a I imAt.y FIXED; DECLARE STATE BINARY FIXED; DtLLA ?b NLS LilNARY FI XED ; NLS=C(JNST ITJENT_AT(RIoHT,CuNTE\T_GF_EXrC(STATE) ) ; IT TYPb_UF(NJS) =iC L ATTk_uF (NUS) = , K« THEN lu; NE *_STATE=EXtCUTc_lNSTRUCTI JN1ST ATE ) ; RE TURNl NEw_STATb ) ; end; if rYPh_UF(NUS) =*LEFT_PARENT T E-LiNi Do; IF CA\_PASS( SCANNER__ATTK_JF ( CGNT ENT _."JF_E X tC ( STATt ) ) , ATTR_uE(NUS ) ) ThE\ NE W_S 1 ATE =ALTER(EXfc CIST ATE) , SLT_SC ANNE R_ ATT RiNONACT IV £i ShIFT (RliiHT tCJ\TtNT_GF_tXEC(STAT c) ) ) , iTATE) ; EL SL Ntfc_STATc=KLiVES ( R I G H T , Ex EC( STATE ) , LEFT ,tXEC(STATE) , STATE); Rb rURN(NfcW_STATE) ; END; IF TYPE_UF( <*uS)=$RlGHf_PARENT 15 THEN 00; IF CAN_PASS( SCANNER_ATTR_0F THEN MEw=STATE=ALTER(EXECTATE) ) t ALT.ERtEXEC(STATE) , St: T_SCANNER_ATTP (DATA, C UN TE N T_uF _E XEC (ALT ERIE XEC( ST AT L ) , SHIFT (RIGHT , CONTENT_aF_tXEC( STATE) ) , STATE) ) ) , STATE)); RETURN(NE«_STATF) ; END ; /^MARKER CASE*/ MEfc_STATE=ALTER(EXEC( STATE) , bHIFT( RIGHT ,CU\iTENT_OF_tXFC(STATc ) ) , STATE) ; RETURN! Ntw.STATE ) ; ENC NCCSTEP; EXECOTE DECLARE INS IRUCTION: STATE BINARY PRUCFDURE( STATE) BINARY FlXtb; FIXED ; DECLARE KEY CHAR AC TER ( 4 ) ; K t Y = CHP S_ I. si ( C ON ST I TOE:MT_A T(R I GHT, CUNT EnT_OF_lXl CIST ATE) IF IF IF IF IF IF IF IF IF KEY = KEY = KEY = KEY = KFY = TATE ) BlNA>TATL) ) J IF -.IS.DIRECTIUNl ATTR_'JF ( APG1 ) ) 6 -.IS ul.2) t WF S_NAMED { NAME. I N ( AR G 1 > ) , STATE) ) ; CALL ERR_MSG( •ATTE.1PT TO CREATt SECOND rtFS WITH THh SAME NAME' ) ; RETURNIUNDEF I;>»ED) ; END; CALL EPR_MSG( <4kul OR ARG2 IN CLP/ IS NO GuOD' ) ; KFTDRN( UNDEF I \IED ) ; END; RE TURN! ALTER (NAMfc.lNl ArlCLA<(. STATE 3INARY FIXED; IF TYPF_JF(ARG1)-«=»R THEN Cu; IK E D ; CALL ERP_MSG( «ARG1 IN RSTR IS Nul A REFERENCE 1 ); RETURN! U;\DLF [ NED ) ; END ; IF I S_U I RECTI ONI \TTM_UF j ARGl) ) I F b N D U ; IF mAMc_I m( ARGl ) =lXlC( STATE) THFN STATEl=ALTER(cXFClSTATF| i St r_SCANNER_ATTk(NJNACT IV Ei C JNTE NT _LF_FXtC( STATE) ) t SI ATT ) ; lLSE STATEl=oTATh ; RFTURNI ALTtRl NArtE_l \< ARGl ) , I.NliLUl \1 Tk_GP( AkGI ) ,Cu\T Ei\T TATt ) , SET_SCA \|.NcR_AITR UNQNACT IvEi CUNTENT_nF_EXECNSTl T UE N T_A T ( ATTR_UF'( A KG 1 ) , WFS_NAMECMNAMe_IN(ARG2) ) ); LLSh Ui ; CALL ERR_MSG( •ARGZ IN CVRT IS NO GJuJ' ) ; RETURN! UiMUEF INEU) ; END ; ALTUAL_ARol=EVAL( ARG1) J If I YPL.CF (ARGl)=iC ThtN CGNVERSIGN_MUDE=ChRS_iN( AkGI ) J F!LSF i)U ; If TYPL_OF( ARG1) =fR l 1 S_U IRl-C I UJN( AT Tk_UE (mRGI) ) THE;m ACTUAL_ARG1=CUNST I Ttjr->JT_AT ( ATT R_UF ( A kg I ) t wF S_N AM l U I N A -1 c _ I M ( A ■< G 1 ) ) ) ; LLh DC; C\LL ERk_iMSG( • ARtil IN CVRT lb NU GfUD 1 ); RE TufN( UNDtF LNEJ > ; b \l); I I T YPh_GE( AC TUAL_ARG1 ) = *C Tt-t. * CUNVEH SI ijN_ ■! JUl- = 1 HiTR (CONVERT UN_MJDE ,1,1); ATI P_CHR = SlRSTR (C UN VERS I J.J_WtiUE ,3,1) ; T YPE_OF G=TYPE_'JF ( AC TUAL_ARG2 J ; ATTR_GRG = AT Tk_OF { ACTJAL_mKG2 ) ; IE IYPE_CH» = « ' THEN TYPE_GHR = TYPE_tJkG; IE .\TTR_LHk = ' • THEN A 1 TR_CHR= ATTR_ORG; TYPt _ATTR=T YPb_CHR | | ATTp_CHR ; T Yr't _TYP£=TYPE_URG j | TYPE.CHR ; CHECk_CCNVE RSI'J Y_MODE : i-u 1=1 Tl l)M( TYPE_ATTRI rtUTh_TA.iLE.l ) ; IF TYPE_ATTR = rYPE_ATTRliiJTE - TAbLF( IJ THEN GUT J CVRT1 j r NJ CHECK_CQNVERSIOlM_«1t)Ot ; CALL ERR_NSG< MLLEGAL LoiM^/c RS I G.< MUDE Ih ;nETLR ^( UNCLE [NED I ; LVRT' ) CVPTl: IE TYPt_CEK-.= TYPE_URG 1 EL J DO ; E I \ G_ AC T G AL_C GN VE RS I uN_rtUDt! : li. 1=1 Tl LjI'K ACTUAL_CuN\/EKSlL!N_MGOE_TAbLE, 1 ) ; IF TYPt_TYPE=ACTUAL_GONV6RSl JN_MCDE_1 ABLE! I ) THEN GO TJ CVRT2 ; ENJ F INu_AC rjAL_CONVcRSl JN_MuJE ; CALL cRR N'SGJ • I LlZGmL CCWERSIuN REOUtSTtO Ik CVRT'); 21 RtTLKN( UNDEFINED ) ; CVRT2: IF IS_CCNVERTIBLE( 1 , ACTUAL_ARG2 ) THEN ACT L AL_ARG2 =C CNVLRT.DAT A ( I , ACTUAL_ARG2) ; ELSE DO; CALL ERR_MSG( 'ACTUAL.ARG2 IN CONVERT IS NOT CONVERTIBLE" ); RETURNf UNDEFINED I ; END; END; IF ATTK_£HR-i = aTTK_URG TFEN ACTUAL_ARG2=SFT_ATTR( A T TR_CHR , AC TU A L_ARG2 ) ; RETCRNl ALTER ( NAMb_lN( ARG2I » ■ CHANGE ( AT IR_GF (ARG2 ) t ACTUAL. AR ,2 , tfFS_NAMb0(NAtfE_If\i( ARG1) ) ) , STATE) ) ; END CVRT; ALL :PRGCEDLRE( STATE )B I NARY rl XbO? DECLARE STATE bINAR/ FlXtu; ACTUAL. ARG1=EVAL{ ARG1) ; ACTUAL_ARG2=EVAL( ARG2) ; IF TYPE_UF( ACTUAL_ARG1 ) = 10 £ TYPE_OF( ACTUAL_ARG2 ) =*D £ TYPE_UF ( ARG3 ) =±R S I S_D IREC II OP, ( ATTR_GF (ARG3I ) THEN UU? NE'rt_CUNSTI rUENT = A DOS ( ACT JAL_ARG1 t ACT JAL_mRG2 ) ; RE TURN ( ALTER ( NAMb_lN< ARui) , INSER T( ATTR_GF ( ARu3 ) iNbW_CuNS T 1 TJE fT t WFS_NAMEU( NAMt_IN< aRG3) ) ) » STATt) ) ; END.; CALL ERR_MSG( •"AIM ARG UR A.N ACTUAL_ARG IN ADD IS ,mu oJuJ' ); RE TORN ( L'NOEF I NED) ; cND ADD; >UB :PRuClDCkC ( STATE )B IiARY Fl XEOJ 21 dl'CLARE STATE dlNARY FIXED; \CTuAL_AkGl=EVAL( ARG1) ; ACTUAL_APG2=EVAL! ARG2 ) ; IF TYPE_JF( ACTUAL.AKG1 ) =$0 £ T *Rt_GF ( ACTUAL_ARG2 ) =*D S TYPE_GF( ARG3)=$R f. I b.UlKEC FT JN( ATTRJjF (ARo3) ) Thu,^ DO; NEW_CGNS1 I TUENT=SJdS! ACTJAL_ARG1 , ACTUAL. ARG2 ) ; K[ TURN! ALTER ( NAME _I\i( AUG*) » INSERT! ATTR_OF( ARG3) ,NErt_CUNST lTUENTi WFS_NAMk U I:\iAMb_ IN ( ARG3I ) ) » STATE) ) ; END; CALL ERR_MSG! •AN ARo CK AN ACTUAL_ARG IN SUQ IS MO &JLU* ) J RETURN! UNDEF INED) ; W SLo; ML T :PRoC tD URE( STAT E) BINARY hi XEJ; DECLARE STATE -UNARY FIXED; ACTUAL_ARGl=E\MH ARG1) ; *CTUAL_Ai?G2 = EVAL( ARG2 ) ; It rYPE_UFl ACTUAL_ARG1) =*J £ TYPl"_UF( AC TUAL_ARG2 ) = $D £ TYPE_OF( ARG3)=$R £ IS_C 1 RECTI UN! ATTR_QF 1**^,1) ) IHcN DC; Nlw_CGNSTI TUEnT=MLTS( ACTUAL_ARC1 , aCTUAL.aRuZ ) ; cNC RE IUR\l( ALTER! NAiME_IN( ARG3) , INSERT! ATT R_UF(ARG3) tNEW_CiiNST I TUE^Ti *FS_NAMLD(NAME_IN< Aftii3l ) ), bTATL) ) J END; CALL ERK_1SG( •AN ARG GR AN ACTUAL_ARG IN MLT Ii MU GJCC); RtTURN! UNJEF I NED) ; V L f; J I v:PRJC ED LPE! STATE) b I NARY FI Afcu; JFCLARE STATE dINARY FIXlD; ACTuAL_/- v PGl=tYAL! ARGL) J ACTUAL_ARG2=EVAL< ARG2J ; If TYPE_CF( At TUAL_ARG1 )=$U £ f YPF_uF ( ACTUAL_ARU2 ) =AJ 23 £ TYPE_OFl ARG3)=tR ti 1S_UIRECTIGN!ATTR_0F!ARG3) ) THEN DO; IF NUMb_INCACTUAL_ARG2)-i=0 THEN DU; NE*,_CONSTITUENT = Dl VS! ACTUAL_ARG1 , aCTUAL_ARG2 ) ; RETURN! ALTcR(NAME_Ii\l! ARb 3) , INSERT! ATT R_GF!ARG3) ,NEW_CONST ITUENT i WFS_NAi4LU(NAML_IN( ARG3) ) ), bTATE) ) ; ENID; CALL ERR_MSG! ' ACTUaL_ARG2 IN OIV IS • ); RE TURN ( UNO EF IiMEO) ; END; CALL ERR_MSG< •A\ ARG UR AM ACTUAL.ARG IN DIV IS Nu GOUl) 1 ); RETURN ( UNDEF INFO) ; ;ND D I V; 4NU: PROCEDURE { STATE ) olNARY FI XcU; DECLARE STATt BINARY rlXED; ACTUAL. ARG1=EVAL< ARGl) ; ACTUAL_ARG2=EVAL( ARG2) J IE TYPE.JfM AC TUAL_ARG1 ) =iri £ 1YPE_GE I ACTUAL_ARG2 ) = 4B £ TYPE_JF( ARG3) =tR £ IS_L)IRLCT10N( 4TTR_UF(ARG3) ) THEN DG ; NL^_CJNSTI TUENT=ANJS{ AlTUAL_ARG1 , ACTJAL_ARG2 ) ; END RETURN! ALTER! N|AME_I N ( AKG3 ) , I NISERT! ArTR_OF ( AkG^ > ,NEW_CUNST1 TUEMT , WFS_NAMbL>l*AME_I \! ARG3) ) ) , STATE) ) ; END; CALL ERR_MSG( •AN ARG uR An ACTUAL_ARG IN AND IS NU GOGD* )J RE rURN( UN JEF INED) ; AND ; UR :PRUCEDUrE ( STATE) BINARY FIXED; DECLARE STATE BINARY FIXED; ACTUAL. ARG1=EVAL( ARG1J ; ACTUAL_ARG2=EVAL( ARG2) ; IF TYPE_i]F( ACTUAL.ARG1 ) =Sb £ TYPE UF! ACTUAL ARG2)=i>B 24 £ TYPt.OF ( ARG3) = 4R 6 I S_D I RECTI ON I A TTR_OF ( ARG3 ) ) THuiM DG ; NF w_CJNSTl ruENT= uR^>( ACTJAL_ARG1 » ACTUAL. ARG2 ) ; Kb TURN! ALTER! NAME_IN( ARG3) , INSERT! ATTR_UF(ARG3) , NEW_CUiNST 1 FUENT , WFS_NAMED(NAHE_IN( ARG3) ) I, STATE) ) ; END? LALL ERK_MSGl •AN ARG OR AN ACTUAL_ARG IN OR IS NC GOOD')! Rt TURN( UNDEF INE J) ; END CR ; vJUT :PKUCECLF E ( STATE )b I NARY FI XEO; JFLLARE bT4TE alNARY FlXcUJ AC rUAL_ARGL=E VAL( ARG1 ) ; lr rYPLjJF ( AC TlUL_AKGl ) = Sti £ TYPE_OF( ARG2>=*R (n I S_L>IREC riLilM(A rTRJJF ( ARG2 ) ) THcN DC; NEw_CJ v* S T I ruE,4T ='MJ Ti> ( ACTJAL_ARG1 ) ; RE TU* \l( ALTER ( NAME_I N( ARG3 ) , I.MSERn AFTR.GFI AKG2 ) ,NEw_CuNST I T JENTi WFS_NAMfcD(NAME_lN( A*S2) ) ) , bTATc) ) ; END; CALL EhR_MSG( •Ai\ ARG UK A,\ ACTUAL_ARG IN MOT IS NO GOOD 1 ); RE TURN 1 CN ObFINEO) ; END T.CT; CONC:PRUCtUCPb( STATE) hlNAKY EIXEO; JECLARI STATE 3INAPY FIXED; IE TYPF_JF(APG3) -. = *R I -.IS.OlRcC TIOiNi ATTR_OF {ARG 3) ) THE, [)U; CALL ERk_MSG( «ARG3 IN CuNC IS IMJ GUOD')! RE TUR\( J.«*:)lE InED) ; END ; ACTLAL_AKG1=EVAL( ARGll ; AC rUAL_ARG2=E VAL ( AKG2 ) ; IF T YPt.UF ( AC TUAL_AKG1 ) = $.j S 1 YPt_ JF ( aCTUAl_AKo2 ) = iB ThEi\ 25 NEW_CUNSTI TUENT=CGNCS_BITS(ACTUAL_ARG1 t ACTUAL_ARG2); ELSE DO; IF TYPE_UF(ACTUAL_ARG1) =$C t» TYPi-_JF( ACTUAL_ARG2)=$C THEN NE*_CUNSTITUE.\IT=CUNCS_CHRS( ACTUAL.ARbl , ACTUAL_ARG2); ELSE DO;CALL ERR_MSC( •ACTUAL_ARG1 UR ACTUAL_ARG2 IN CJNC IS iMU GUOU* ) J RETURM UNDEFINED) ; END ; END; RETURN (AL1 ER ( UAME_IN( ARG3) , I \|SERT= • • =A • i INAKY FIXED; I xcu ; E TAcJLcl22) CHARACTERS) INITIAL •A •A •T -A • > ' t - = A« , A-.= ' , A-. = A» , r-i=A« , • < • • = j • •T = ' •A = T« ■T =T« • <= • 1 -=T« • T- = • • a-.= r » • r-isT 1 ) ; UECLAR CfcCLAS ACTUAL ACTUAL ACTUAL If TYP THEN C C I T E CALL E Rfc TuRN TEST1 : IE I<=t IF TYP then i T E CJMPARISON__MQJE CHARACTERS); £ TET BIT( 1 ) ; _AAG1=EVAU ARG1 _ARG2=EVAL( ARG2 _A4G3=EVAL(A4G3 F_JF ( ACTUAL_A.T lb NO GUUD 1 ) ; N DO; (ACTUAL THE E_UF c; bT=TESTS( I , .AKG1 ) =TYPE_OF( ACTU*L_ARG2) ACTUAL.AR31 , AC Tu AL_£ RG3 ) ; GuT'j TdST2; END ; TLST.LNDEFINED: At. TURN ( ALTER (EXEC (STATE ) , SE T_SC A:\INER_ATTR (uMJtF IN, CONTCNT.OF.EXECISTATE) ) , STATc) ) ; IF I<=K END THEN 27 00; IF TYPE_0F( aCTUAL_ARG1)=SC THEN GOTO TEST3; ELSE-GO TU TEST_UNDEFINED; EMD; IF I<=14 THEN QGjIF TYPE_OF ( AC TUAL_ARG3 ) =*C THEN GOTO TEST3; ELSE GOTO TEST_UNDEFINtD; END; TEST3: TET=TESTSU ,ACTUAL_ARGl , ACTUAL. A RG1 ) ; TEST2: IF TET THEN RETURM ALTER ( EXEC {STATE) , SET_SCANNER_ATTR (SUCCESS, CUNTENT_OF_cXEC I STAT c) ) , STATE) ) ; RETURN( ALTER! EXEC (STATE) , S£T_SCANNtR_ATTR( FAILURE* CGNTENT_UF_EX EC (STATE! ) » STATE) ) ; ENO TcST; EVAL: PRGCEOUPtt ARGIdlNARY fUhO; JECLARE ARC BINARY F1XE0; IF TYPt_OF(ARG) = i>R & I S_D1 REC T I 0,M( AT TR_OF{ A RG) ) THEN RFTJRiMl CONSTI TUE N T_A T ( ATTR_OF (ARG) , irfFS_NAMEU(NAME_IN( A KG) ) ) ) ; RE TORN! ARG) ; ENC EVAL; END NUCLFQL; 23 3. NUCLECJL PROGRAMMING LANGUAGl AS A MUDEL l-Ok MUCLtUL ivlUlAT IUim : SET OF ALL STRINGS OVER DENUTFS A SUBSET UF THE ALL KEYPUNCH SYMBOLS i ::= | ; : : = | ; DENOTES AN ELEMENT Oh , I MAY BE SJbSTITJTEO BY A POSITIVE DENOTES AN ELEMENT UF ; DENOTES AN ELEMENT UF ; INTEGER DEFINE JAM TO BE THE UNION UF THE SET OF ALL STRINGS OVER ALL KEYPUNCH SYMBOLS AND FINITE CULLECTIUNS OF SUCH S F R I N G S J 29 3. I. NUCLEOL PROGRAMMING LANGUAGE SYNTAX ::= I <$SXBLOCK> | <$S> ::= <*< XBLOCK*?XiSXtiLUCK*?X$ »> I <${XBLGCK*?XBLGCK wl TH SCANNfcRXBLljCK*?X $ ) > ::= | <*(X3LUCK*?XJ» )> ::= I <*(> | | <$S> ::= <$B> j <$C> I 1 <$P> | <$l <$C> <.$R> $d , ' IC« , » $P « '« OS> = $( = $ X P A > = $S»» <1 A> <6LA \JK> AND D | F | N I M I S I 3 I R I N CuMB IiNiAT I ONS I S I U UP t » X N, S» ANO J : < H I T > : : = r . | : ::= A ::= . = 1 NG> = < SIN < :bl .L I / I , ::= A | I M I I Y | : : GR> : NAMt > = < I 1 DIG SF RE TH I I b i\ Z I I r ou ol EN := ANK> | < | I c SPACE I I H I U I $ I * I I I i I i «l_l>l?J:|*lcJ| ICIUIEIFIGIHJI I U J" P I Q ] R | S | T j U • I = I J I I V I 2 I 3 | 4 | b I 6 *> I * I -< tNCfc OF LtTTEKSt DI NNING WITH LETTER A B CHARACTERS. OIC GI7 NO 1 T S, NO 3 I 9 AND T LUNbF.R : = I < FE ST> I | | | I | I |
| | I ::= tCK'HOVF. ■ ( | ) 30 ::= $CK'CUPY« ( I ) ( l__ i | <5K> <5PLT> $CK «SH = $CK'R $CK'CV $CK«aDD JCK'SUD iCK «MLT *CK«DIV iCK'AUL) $CK'l)R' iCK 'NUT tCK'CJ SCK'Cu ICK'SP 1CK' Ttf S ( FT' STR RT • NC LT T« T MUDE> <$0> <$J> <$.)> <$L)> <$B> ( <*B> ( <$R> b> | <*C> ) R> I I ) ( I ( ) ( ) ( ) ( ) ( ) )_ ) <$L)> <$D> <$D> <$D> <$B> <$B> ) ( <$b> ) ( <$C> R> ) ) j <$D> I <$P> | ) I <$P> |
) ::= *RL'' ^k> ::= fR «« | JRR'« < T Y P t > : Li | C I iC'3/« tC • R/' iC /<3A>' /' = $C >c $c iC $c $c P I R I S *C 'C/' IC« ( /' iC /« iC • /' <= • = A ' = T« = A • = T« = T« = A ( ( I ) $C'l)/' %C* )/ > /< ( JA>' I *C $c iC fcC tc > • -.-A' A-. = A« A- = T' T-i = T» T-. = A« fcC I iC'P/« I iL 1 /' < > = 31 3.2. MAPPING OF NUC LEUL INTO NUCLEUL PROGRAMMING LANGUAGE TU DEFINE AN INTERPRETATION OF NUCLEOL FORMAL SYSTEM IN NUCLEOL PROGRAMMING LANGUAGE I FIRST DEFINE A MAP a) ON ALPHABET AS FGLLOWS: MAPS VARIABLES INTO THfc SET OF /* JAN" WAS DEFINED IN 3. */ VARIABLES RANGING OVER JAM; d MAPS BASIC PREDICATES INTO THE SET OF SUBSETS OF JaM JNICN THE CARTESIAN PRODUCT JAM X JAM wHERE SOME OF THEM ARE DEFINED AS FOLLOWS: a) IS STATE IS DEFINtD TO Bt THE SET OF ALL FINITE COLLECTIONS OF ELEMENTS OF SUCH THAT: 1) THERE IS EXACTLY ONE NAMED IN THE COLLECTION WHOSE SCANNER <$S,1> = $S«<«FS NAME,1>' HAS ATTRIBUTE = N | S | F | U . 2) NO PAIR AND i , 2> IN THE COLLECTION HAVE SCANNERS <$S t l> = iS , « AND <$S,2> = i>S'' WITH = . DENOTE THIS StT BY AND ITS ELEMENTS BY JIS_WFS = ; a)IS_BLUCK = ; jJIS.CUNSTI TUENT = ; aiS.DIRECTION = L 1 R ; DIS_dITS = ; JIS.CHRS = i)IS_NUMB = ; dlS NAME = ;• NT> jj MAPS BASIC FUNCTIONS INTO THE SET UF FUNCTIONS JAM X JAM X...X JAM > JAM WHERE SOME UF THEM ARE DEFINED AS FOLLOWS: -uEXECKSTATE, 1>) = UF THt SCANNER <$3,1> CONTAINED IN THE UNlQUt IN SUCH THAT = F | N I S I U ; iCCNTENTKwFS uAME , 1 > , ) = THE UNlJJE IN WHICH CUNTAINES J hh SCANNER =$S'« ; o)CR LL ( , t ) , , t( ,1XBLUCK*?, 1 i( ,1XBL0CK*?,1 . <*< , 1XORDINAK ) = 32 1>) = - (,> ; l>,) = FS,2> IS IDENTICAL TU HE IN THE SCANNER 1> IS REPLACED BY ; E THE SET THEURETICAL OPERATIONS NION */ »lXiS tlX BLOCK, IXBLOCK*?, 2 > = ; >) - aMLOCK_AT(L,<$S, lXdLJCK, 1>) »i> ; 1 XCGNSTITUENT,1>. . . ) 1 ruENT,l> ; X*S,lXLlLOCK,2XBL) 1 XiS ,1XBLUCK*?,3XS) , 1> XiS,lXBL0CK*?,3XS) , 1>) X>S,1XBL0CK,2XJL0CK*?, 3><$l Y CONSTITUENT*?, 1X$S»1> Y CGNS1 ITUENT*?,2X*» ,1> ... ) Y CONSTITUENT*?tl> Y CONSTITUENT*?, 2> TUENT,1> ...) TUtNT,lX$S,l> ... ; ; i>; ; i)SCAi\iNER__ATTR_Of=( ... *S»« ...» = a)SFT_SLANNER_ATTR<, ... *b' ...) = ... $S , « ... ; JTYPfc.UF ( iOYPE ,1^ ... ) = ; aJB ITS_IM SB«' ) = ; JChRS_IN( $C , 1 ) = ; i}NUM6_IN{ $C , » ) = ; i)NuMt-_ I,\< iK'^FS NAMF,1>») = ; j) MAPS CONSTANTS I NTU JAM AS FULLUWS a)J>B = B j)$L = C j)tC = Ji»P = P J $ K = R .JiLEF T_PARLNT = { i)$k IGhl_PARFN T = ) tJLEFT = L ; ilKlGhT = R ; 33 NEXT 3 IS EXTENDED, tiY NATURAL HCMOMORPHI S M , ONTO THE SET UP TERMS INDUCTIVELY AS FULLUWS: IF V IS A VARIABLF, THEN oJV IS THE IDENTITY MAPPING F I V 1= W OF JAM ONTO ITSELF ; IF C IS A CLNSTANT » 08C IS DEFINED AbOVE *, IF T IS A TERM OF THE FORM F(TL,... ,TM) WHFRE F IS A iASIC FUNCTION AND Tlt«..»Ttt ARE TERMS i THEN aT IS THE MAPPING JP ( 3)Tl f . .. , i)Tri) FROM JAM X JAM X...X JAM INTO JAM ; LASTLY a IS EXTENDED ONTO THE SET Of FORMULA:* INDUCTIVELY AS FOLLOWS: IF A IS A FLRMOLA JF THE FORM Tl =T? WHERE Tl ANC T2 AkE TLR.mS , THEN J A IS THE PR JPOS 1 T 1 MAL FUNCTION a'Tl = JT2 WHERb THF • = ' ISA WEAK cQJAlITY Kb' LA Tl UN (SF^ 2.2.) Jf_F INED ON JAM ; IF A IS A FLPMOLA OF THE FuRM Pi Tl ,. .. , TM) WHcRE PISA iASIC PREDICATE AND Tli...,TM ARE TERMS r THEN <3A IS THE PREPOSITIONAL FUNCTION FOR OTHER FORMULAS THt FOLLOWING IDENTITIES HOLD: j)( FORM1 | FORM2 ) = dhORrtl | «JFURM2 ; til FORM1 E FORM2 ) = JFJRM1 | aJFURMZ ; »{ FORM1 => FORM 2 ) = a)FORMl => aFORM2 ; d>( iFURM ) = - JFURM ; 34 *. THE NCCLEOL MACRO PROCESSOR \IUCrtAC •1ACRC SYNTAX ' $)XM ::^ <${> SCM ■ ■ <*P*?> ::= 35 4.2. NUCNAC /* NUCMAC CALL BY T WITH REPL A MACKO D BUT SINCE CANNOT HA ACTUAL PARAMETER COKRESPUN OF THIS T NUCMAC INSTRUCTI EVEN A SH PKGGRAMMI changes t THE SE IS A SIM HE MACRO ACEMENT cF INITION THERE IS NDLE RECJ PAR^METE SPEC IFIE DING ACTU YPE. CCNSISTS ON St AND CRT NOCLE NG EASIER A S 1 E R . VEN WFS'S ple macro processor. it replaces a macro body of the correspond1 nt, macro definition f formal parameters for actoal ones. may in torn contain a macro call, no conditional expansion feature* nucmac rsive macros. rs must bt single blocks. if a formal s a type as its attribute, then the al parameter must tit a single constituent of seven wfs", approximately 1-j approximately boo constituents. splitting lIL PROGRAM INTO A NUMBER OF WFS'S MAKES , DOCUMENTATION MORE LEGIBLE, AND FUTURE UF NUCMAC ARE: MAC PR INI MACPRCTF INU MACRO MACPRCAL PARAM MAC ERROR :ThIS IS 1 AND I N I T I : WHICH SCA IT FINDS FIR bT IT :^HICH CHE MACRO DEF THE wFS : AND THE.\1 : * H I C H BUI ACTUAL PA :AND 1NCLU RETURNS C F INALLY, :NCT SPECl ALL ERROR ME WFS THROUGH WHICH NUCMAC IS ENTERED ALIZtD. AFTtRUORJi. CONTROL IS GIVEN ID NS THE PROGRAM TO BE EXPANOtD, AimD WHEN A MACRO CALL TAKES APP^JPRIATb ACTION. CALLS THE SHORT ROUTINE CHS WHETHER THERE IS A CORRESPONDING INITION, AND IF SO MAKES A COPY JF IT Ohi FORMAL AND ANU ^IVbS CONTROL TO LDS A LIST OF CORRESPONDING RAMETERS ON THE WFS DES THE MACRO bODY IN THE PROGRAM, ONTROL TO MACPRCTR. THERE Ij ASSUMED TO BE A wFS FlfcD HERE, TU WHICH CONTROL PASSES CONDITIONS. UNDER TFE FOLLCwINJ ASSUMPTIONS ARE MADE ON HOW NUCMAC INTFRACTS WITH ITS ENVIROMENT. \\-\L PROGRAM TO BE tKPA^DcD lb A aFS CALLED 'PROGRAM' . EACH MACRO DEFINITION IS A WFS WHOSE NAME IS THE NAME JF THIS MACRO. NUCMAC RETURNS CJNTROL TO A aFS CALLED 'SYS. ' . Tht PRObRAM LISTING WHICH FOLLOWS IS ALSO INTENDED TO SER\/E AS AN EXAMPLE Jh A NJCLbOL PROGRAM, AND HENCE IT IS EXTENSIVELY ANNuTOTEO. COMMENTS ARE ENCLOSED BETWEEN THE CHARACTER PAIRS •/*' AND «*/• , E.G. AS IN /* THIS IS A COMMENT */ . 36 $SN» MACRO INI 1 /* ASSIGNING TU THIS SCANNER THE ATTRIBUTE 'N« 4AKtS IT AN EXECUTION SCANNERf AND IS EQUIVALENT TO DECLARING ITS wF S TO 6c THE MAIN PROCEUORE */ 4 { XMACPP IN I ■ fcCK'COPY 1 $1 i< *) *) SRN'PARAfV /* *FS PARAM IS OPENED CONSISTING UF EXTERNAL PAIR OF PARANTESES WHICH AUTOMATICLY AbSuME THE ATTRIBUTE 'X*, AND AN INTERNAL BLOCK IS INITIALIZED. PAR AM WILL BE USED IN A STACK FAbUN TO BUILD AND STORE LISTS OF CORRESPONDING rURMAL AND ACTUAL PARAMETERS. EACH SUCH LIS1 IS ENCLOSED L^ PARANTtStS AND THEREFORE CONSTITUTE A BLOCK. LIST OF ACTUALLY EXPANDED MACRO IS ALWAYS THE RIGHTMOST, IE. THE TOP ONE a,^i A STACK. THIS STACK SETUP ULO.JS FOR HANDLING OF NESTED MACRO CALLS. THE ALREADY INITIALIZED EMPTY BLuCK SERVES AS A BOTTOM OF THE STACK. */ ♦CK'SFFT* $RR«PARAM« tCK'SHFT' SRR'PARAM' /* SCANNER POSITION *AS INITIALISED BY SHIFTING IT INSIDE THE INTERNAL BLOCK FROM OUTRIDE OF THE WFS PARAM. */ IP •MACPRCTR* /* CONTROL IS GIVEN TO MACPRCTR aHUSE SCANNER IS ASSUMtD TO jf in a restored position */ I ) x »MACPR ini • b ( X •MACPRCTR' /* THIS IS THE CENTRAL SCANNING LOOP. CONSTITUENT AFTER CONSTITUENT IS CHECKED ON THE WF S PRuGRAM mNO APPROPRIATE ACTION IS TAKEN. WHEN THE END OF PROGRAM IS RcACHEDi CLNTROL IS GIVEN TO THc SYSTEM */ /* SlNCC THL ACTION IN CaSE JF aN ERROR IN THE tXPANDED PROGRAM IS NOT SPECIFIED YcT, CONTROL IS olVEN Tu MACERROK IiM THIS CASE * / /* MACRO CALL ? */ /* CuNSTlTLENT WILL BE TtSTEO FOR TYPE • M« DENOTING MACPO INSTRUCTION KtY WORO And attribute &CK«TEST' iKR'PROGRAM' J>C • T= • $C 'C fc( S iCK^TEST' $kR'pRuGRAM« i>C ' A= ' $C 'M' 37 $(S /* YES, MACRO CALL */ /* bUILD AN INSTRUCTION TO COPY THIS MACRO ONTU WFS MACRO. TO DO THAT CONVERT THE MACRO NAME INTO REFERENCE CONSTITUENT AND INSERT IT INTO A SKELETON INSTRUCTION UN WES I NO . THIS TRICK IS USED IN PLACE OF INDIRECT REFERENCE , WHICH WE DO NUT HAVE */ *CK«RSTR« $R 'MACPRCAL' /* SCANNEk WAS RESTORED TO THE POSITION OUTSIDE THE *FS .MACPRCAL. NOTICE THAT NO DIRECTION WAS SPECIFIED IN THIS CASt */ iCK'RSTR 1 iRL'IND' /* SCANNER WAS RESTORED 10 IN *HICH IT RESIDED 0^ THE •L' FOP LEFT WAS SPECIFIED THE LEFT PARENTESIS OF THE BLOCK WFS INU . NOTICE THAT DIRECTION IN THIS CASE. */ iCK ■ ShFT ' iCK 'MOVE • $PR« IND' tR 'bYS.FSL' /* SCANNER WAS POSITIONED AT THE DOMMY FIkST ARGUMENT OF THE SKELETON INSTRUCTION, AND THE ARGUMENT WAS CLEARED. */ iCK'CCPY' iRK 1 PROGRAM 1 SRk'INO' iCK'CVRT' J.C 'R/ ' SRR'INU' /* MACRO NAME WAS INSERTED AND CONVtRTED INTO REFERENCE TYPE CONSTITUENT THUS MAKING IT THE ACTUAL F I RST" PARAMETER OF THE COPY INSTRUCTION TO dE EXECOTED LATER. */ SCK'SFFT' iRL'IND' /* SCANNER WAS POSITIONED rtEFOUE THE INSTRUCTION */ *R 'IND' /* CONTROL WAS GIVEN TO THE NEwLY CREATED INSTRUCTION ON THE wFb IND */ $ )N $)FU /* GET HERE IF IT WAS NOT MACRO uALL */ /* FORMAL PARAMETER \ J *E SUBSTITUTED ? */ iCK'TEST' iRR'PROGRAM* t»C •!' = • iC »P« MS /* YES, PARAMETER LIST RESET */ iCK'RSTK' SRL'PARAM' i(N /* BEGIN OF PARAMETER ^EA.^CH LOOP */ tCK'MOVE' *RR'PARAM' iRL'PARAM' 38 /* PARAMETER LIST CONSISTS UF CONSECUTIVE PAIRS UF CORRt SPJNDING ACTUAL AND FORMAL PAnAMETEkS. SCANNER WAS JUST POSITIONED BETWEEN THt ACTUAL »ON THc LcFT, A NO FuRPAL, CN THE RIGHT , PARAMETERS. */ $CK l TESr« tPR'PROGRAM 1 iC • = • *RR»PARAM' /* CORRESPONDENCE BETWEEN FORMAL PARAMETtRS IN MACRU BODY AND IN PARAMETER LI^T WAS CHECKED */ t ( F L /* NUT THIS PARAMETER YET */ iCK'SHFT* $RR'PARAM« /* PUSITICN SCANNER AT THE NEXT PAIR CF PARAMETERS */ * )N /* IE PARAMETER NOT FOUND GO BkCK TU THE BEGINNlNb UF THE ^tAPch LOOP. OU NOT CRObS THIS SOCCESFOL PAPENTcblj BECALSt YCC ARE NOW IN NFUTKAL STATE *'/ Mb /« 00 OUTSIDE THROUGH THIS PARENT «HEN PARAMETER FOUND */ pCK'MOVC 1 JRR'PRGGRAM* »R •SYS.FSL' pCK'CGPY* $RL'PARAM' tKL'PRUGRAM* /* PAKAMEIER S03STIT0TI0N wAS JUST MADE *•/ *CK'RSTk« $R •MACPRCTR* /* F.ivJ OF THE BRANCH. RESTORE THc SCANNER TO THE BEGINNING JF THt CENTRAL SCANNING LOUP. */ i. )N /* END 01- PACRO BODY foARKE* ? */ dCkMFST' tRR'PROGRAM 1 $C • = • pCS'ENuBOOY* /* Thl bYbTtM MARKER •E^UBGDY' IS PLACEo AT THE ENJ OF MACRO BODY WHEN MACRO BODY IS INCLUDED IN PROGRAM BY MACPkLAL */ i(S /* WIND UP THIS MACRO EXPANSION */ •CK'MCVF* iRR'PROGRA^' $K •SYS.FSL' /* ENDJODY MARKER WAS REMOVED */ *C\'RSTr<« *RL«PARAM« kCK ' ShF T • ikL 'PAR AM' iCK'MOVE' iRR'PARAM' J>R • SYS.FSL 1 /* THE TOP PARAMETER LIST IS JELETED FRuM THE STACK*/ bCK'SHFT 1 iRL'PARAV.' /* ThL LAST INSTRUCTION mS TJ Re INSTITUTE PROCESSING OF \ PKcVlOOS KACKO LiR IF NONE » PLACES THc SCANNER IN k FIRST, UUMMY BLOCK */ &CK «R 5Tr » ik MACPRCTR 1 39 /* ENO OF THIS BRANCH, RESTORE TO THE BEGINNING OF THE CENTRAL SCANNING LOOP */ i IN /* END UF PROGRAM TO bE EXPANDED ? */ SCK'TEST' $RR 'PROGRAM 1 $C » T= ' $C •)■ *{ S iCK'TEST' $RR' PROGRAM' tC *A = ■ $C »X' $( S /* RHIGHT PARENTISIS WITH AN ATTRIBOTE X WAS MET, IT 4EANS END OF PROGRAM */ *R 'SYS.' /* CCNTRGL IS RETURN TJ SYSTEM */ i )N i)FC /* GFT HtRE WHEN IT IS MUT THE tNJ OF PROGRAM */ j.CK'bFFT' tPR 'PROGRAM' /* LEAVE IHIS CONSTITUENT ALONE AND SI ART CHECKING THE NEXT, IE. CLOSE THE CENTRAL SCANNING LOOP */ /* THIS RETURN TO THfc BEGINNING OF THE CENTRAL SCANNING LOUP IS DCNE 4UT0MATIcLY SINCE THE EXTERNAL PARENTES1S, THE CNF WITH THE ATTRIbUTF 'X' , CANNOT BE CROSSED'*/ $ IX'MACPRCTR* $( X'l /* ♦ SUM /$ $CK % i )N SR $ IX • I NO • THI THE FOu ARG MAC MOD NEC m • INI THE •CO R • S IS A MOOYFIABLE PROCEDURE WHICH MAKES A COPY OF MACRO DEFINITION CORRESPONDING 10 A MACRO CALL NC BY MAGPRCTK JNTO THE WFS MACRO. THE FIRST OMENT OF THE COPY INSTRUCTION BELG* IS SLT l>Y PRCTR. IF NJCLEOL ALLOWED INDIRECT ADDRESSING, A YFIABLc PROCEDURE SUCH AS THIS WOULD NOT BE ESSARY */ ENDED INITIAL POSITION OF THE SCANNER IS INSIDE kFS */ PY' >R 'DUMMY 1 i>R 'MACRO' /* HQ MACRJ WITH THIS NAME cXISTS */ MAC ERROR' •MACPRCAL ' NT 40 > ( X'MACPRCAL' /* INITIALISATION /* MACRO WHICH IS OF MACku CALL */ CALLED WAS ALRtAOY CUPIED ONTU WFS 'MACRO' */ iRR • PARAM' $PR 'PARAM' $R 'MACRO' iRR 'MACRO' $RR 'PARAM' iRR 'PROGRAM' /* MACRO NAME $RR 'PARAM' *C NO .000 IRR' PARAM' */ JY 'INC >CK 'KSTR ' iCK • SFET ' tCK'.iSTR' J>CK • -10VE' iCK • SHi-T • iCK • TEST • MFC $R ViACEkftDR' 6)N MS /* GEvltRATE PARAMETER LIST tCK'.yjVC' fRk'PARAM' $R 'SYb.FSL' SCKMGVfc 1 tkR'PROGRAM' $K 'SYS.FSL' iM /* END OF PARAMETER LIST ? */ iCK'TtbT' SRK'PARAM' $C »T= ' $C ')' i(FL /* LuOP ON FORMAL PARAMETERS */ /* CHECK IF THE TYPE uF ACTUAL PARAMETER IS A DESIRED ONE */ iCK'TEST' IRR'PRUGRAM' tC »T = A« IRR'PARAN' »(S /* SFT CORRESPONDING ACTUAL - FORMAL */ 1CKMGVF' iRk'PROGRAM' iKL • PaRAM' tCK'SHFT 1 IRR'PARAM' i )N MHO /* TYPES DO NOT MATCH */ IR'MACERRGR' fc-)N » )N /•■ : CLOSE Tht LOOP TO NEXT PAKAME1ER */ i ) S /* EXIT HERE WritN ALL FORMAL PARAMtTEKb PROCESSED */ /* bET MARKER 'ENDBuDY' ANU IMCLOJE MACROBOOY INTO Tt\t • PROGRAM *CK 'COPY i.CK 'kSTr »CK ' SHFT iCK 'MOVE iCK 'MOVE SCK • SHF T /* CUMROL , KILL 'MACRO' */ SCS'ENDBODY' »kk'PkUGRAM' IRR 'MACRO' tkR 'MACRO' ikk'MACRU' IRR'PROGRAM' iR 'MACRO' 1ft 'SYS.FSL 1 iRR 'PROGRAM' LUCK TO THE CENTRAL SCANNING LOOP iR 'MACPRCTR' i>)N $ ) X 'MACPkCAL' in 5 • CONCLUSION The main conclusion obtained from this research is that it is feasible and useful to combine the formal definition of a programming language with its implementation. Specifically, if this definition of NUCLEOL is augmented by programs which implement the basic functions and predicates listed in 2.1, it constitutes an interpreter for NUCLEOL. While these programs depend on a particular realization of NUCLEOL (host computer, data representation, etc.), a significant fraction of the interpreter (about half) is machine independent. Hence, as a by-product, we have considerably reduced the problem of trans- ferring NUCLEOL from one computer to another. The main task which was left undone is to use the system of axioms which relate the basic functions and predicates. While these axioms serve an intuitive purpose of explaining what particular basic functions and predicates are, they have not been used in the formal development. A challenging future development would be to prove that they are consistent and complete, the latter in the sense of defining NUCLEOL uniquely to a user. k2 REFERENCES 1. Naur, P., et al., "Revised Report on the Algorithmic Language ALGOL 60", Computer J. 5, h, pp. 3^9-368,. January, 19&3- 2. McCarthy, J. , "A Formal Description of a Subset of ALGOL", In Steel, T. B. (editor), "Formal Language Description Languages For Computer Programming", pp. 1-12, North Holland, 1966. 3. McCarthy, J. and Painter, J. , "Correctness of a Compiler For Arithmetic Expressions", in "Mathematical Aspects of Computer Science", Proc. Symposia in Applied Math., Vol. 19, pp. 33-41, American Math Society, 1967. k. Bandat, K. , "On The Formal Definition of PL/l", Proc. AFIPS 1968 Spring Joint Computer Conference, Atlantic City, New Jersey, pp. 363-373, April 1968. 5. Sidlo, John R. , "The List Processing Language NUCLEOL", Master of Science dissertation, University of Illinois, Department of Computer Science, Urbana, Illinois, August 1968. ^ 6 \tf* ,s* v <$>