* PHRASE STRUCTURE DEFINITION FOR IMP INTERPRETER B[S] = 15 B[NAME] = 14 B[C LIST] = 12 B[FAIL] = 11 B[C TEXT] = 10 B[STRING] = 9 B[NAMELIST] = 8 B[MARK] = 7 B[HOLE] = 6 B[CONSTANT] = 5 B[NUMBER] = 4 B[MC] = 2 B[INTEGER] = 3 P(SS) [HOLE](UI)[MARK](R SS1)[S]: (IU)(COND)(THEN')(R IU)[S]: (WUF)(THEN')(R WU)[S]: '%CYCLE'(CPARM')[S]: '%REPEAT'[S]: '%FINISH'(ELSE')[S]: (TYPE)(DECLN)[S]: '%END'(OF')[S]: '%BEGIN'[S]: (EXTERNAL')(RFM)(SPEC')[NAME](FPDEFN')[S]: '%COMPILE'[NAME][S]: (COMMENT)[C TEXT]: '%SPEC'[NAME](FPDEFN')[S]: '%START'[S]: '%LIST'[S]: '$RESTART'[S]: '%EDIT'[NAME][S]: '%SENDTO'[NAME][S]: '%RECORD'(REC DEC)[S]: '%CONTROL'[INTEGER][S]: '%SWITCH'[NAMELIST](CBPAIR)(R SW LIST')[S]: [NUMBER]':'(SS): '$'(SPECIAL)[S]: '%REAL' '%S'(LN)[S]: [NAME](SW PARM')':'(SS): (OWN)(TYPE)(OWN DEC)[S]: '%EXTRINSIC' '%RECORD'(XRDEC)[S]: '%SHORT' '%ROUTINE'[S]: '#'(EXPRN)(R # LIST')[S]: '.'[HOLE](VAR)[MARK](R UI')(A UI')[S]: '*'(MC INST)[S]: [S]; P(R # LIST') ','(EXPRN)(R # LIST'):; P(XRDEC) [HOLE](DECLN)[MARK]'(' [NAME] ')': '(' [NAME] ')' (R R DEC2); P(OWN) '%EXTRINSIC':'%OWN':'%CONST':'%EXTERNAL'; P(O PLUS') '+':'-':; P(OWN DEC) '%ARRAY'[NAME](CBPAIR)[C LIST]: [NAMELIST](INIT')(R S OWN'); P(INIT') '='(O PLUS')[CONSTANT]:; P(R S OWN') ','[NAMELIST](INIT')(R S OWN'):; P(CPARM') (F CLAUSE):; P(F CLAUSE) (VAR)'='[HOLE](EXPRN)','[MARK](EXPRN)','(EXPRN); P(WUF) (WU)(COND): '%FOR'(F CLAUSE); P(THEN') '%THEN':; P(COMMENT) '!':'%COMMENT'; P(LN) '%LONG':'%NORMAL'; P(=EXPRN) '='(VAR): (EXPRN); P(UI) [HOLE](VAR)[MARK](R UI')(AUI'): '%PRINTTEXT'[STRING](AUI'): '->'(LABEL): '%RETURN': '%RESULT='(=EXPRN): '%MONITOR'(MON'): '%STOP': '%EXIT': '%CONTINUE': '%TRUE': '%FALSE'; P(AUI') '%AND'(UI):; P(R UI') (ASSOP)(EXPRN):; P(ASSOP) '==' : '=' : '<-' : '->' ; P(MON') '%STOP': [INTEGER] :; P(R SS1) (IUWU)(COND):'%FOR'(F CLAUSE):; P(IUWU) '%IF' : '%UNLESS' : '%WHILE' : '%UNTIL' ; P(WU) '%WHILE' : '%UNTIL' ; P(IU) '%IF' : '%UNLESS' ; P(OF') '%OF' '%LIST': '%OF' '%PROGRAM'(ME'): '%OF' '%FILE': '%OF' '%INT':; P(ME') '%ME':; P(ENAME') '_'(VAR):; P(ENAME'') '_'[NAME]:; P(VAR) [NAME](APP')(ENAME'); P(APP') '(' (EXPRN)(R APP') ')':; P(R APP') ','(EXPRN)(R APP'):; P(EXPRN) (PLUS')[HOLE](OPERAND)[MARK](REST OF EXPRN'):[FAIL]; P(REST OF EXPRN') (OPERATOR)[HOLE](OPERAND)[MARK](REST OF EXPRN'):; P(OPERAND) [CONSTANT]: (VAR): '(' (EXPRN) ')': '!' (EXPRN) '!'; P(PLUS') '+' : '-' : '\' :; P(OPERATOR) '+': '-': '&': '!!': '!': '<<': '>>': '**': '*': '//': '/': '.'; P(NOT') '%NOT':; P(COND) [HOLE](NOT')(S COND)[MARK](R COND'); P(R COND') '%AND'[HOLE](NOT')(S COND)[MARK](R A COND'): '%OR' [HOLE](NOT')(S COND)[MARK](R O COND'):; P(R A COND') '%AND'[HOLE](NOT')(S COND)[MARK](R A COND'):; P(R O COND') '%OR'[HOLE](NOT')(S COND)[MARK](R O COND'):; P(RFM) '%ROUTINE':(TYPE)(FM):'%PREDICATE'; P(FM) '%FN':'%MAP'; P(S COND) [HOLE](EXPRN)[MARK](COMP)(EXPRN)(R S COND'): '(' (COND) ')': (VAR)(EE VAR'); P(EE VAR') '=='(VAR):; P(COMP) '=' : '#' : '<=' : '<' : '>=' : '>' : '\=' : '->' ; P(FILE NAME) '.'[NAME]: [NAME]; P(SPECIAL) 'EDIT'[NAME]: 'COMPILE'[NAME]: 'SEND'(TO')[NAME]: 'INFO'[NAME]:'CODE':'NAMES': 'DUMP':'MAP':'INPUT'(FILE NAME):'OUTPUT'(FILE NAME): 'SYNTAX':'NO' 'SYNTAX':'DELETE'[NAME]:'MLEVEL'(ML):'CANCEL': 'MONITOR': 'UP'(VALUE): 'DOWN'(VALUE): 'RESUME'(VALUE): 'TRAP' [INTEGER](BDEF'):'IGNORE': 'WHERE': 'LIST' [NAME](LP'): 'FIND'[NAME]':'[NUMBER]: 'FORCE':'SYSOUT':'CLEAR': 'LOOK'[NAME]: 'TRACE'(ON/OFF); P(TO') 'TO':; P(ON/OFF) 'ON': 'OFF'; P(LP') '/'(FILE NAME):; P(VALUE) [INTEGER]:; P(BDEF') ','[INTEGER]:; P(ML) '*':[INTEGER]; P(LABEL) [NUMBER]:[NAME](OP PARM'); P(OP PARM') '(' (EXPRN) ')' :; P(REC DEC) '%FORMAT'[NAME]'('(RFDEC)(REST OF RFDEC') ')': '%SPEC'[HOLE][NAME](ENAME'')'(' [MARK][NAME] ')': [HOLE](DECLN)'(' [MARK][NAME] ')' : '(' [NAME] ')' (R R DEC2); P(R R DEC2) '%SPEC'[NAME](ENAME''): (DECLN); P(DECLN) (%QNAME)[NAMELIST]: '%ARRAY'(FORMAT')(ADECLN); P(TYPE) '%INTEGER':'%BYTE' '%INTEGER':'%SHORT' '%INTEGER':'%REAL': '%LONG' '%REAL':'%STRING'(QUALIFIER'); P(SW PARM') '(' (PLUS')[INTEGER] ')':; P(QUALIFIER') '(' [INTEGER] ')' :; P(ADECLN) [NAMELIST]'('(BPLIST)')'(R A LIST'); P(R A LIST') ',' (ADECLN):; P(BPLIST) (EXPRN)':'(EXPRN)(R BPLIST'); P(R BPLIST') ','(EXPRN)':'(EXPRN)(R BPLIST'):; P(R IU) '%START':(UI)(ELSE'); P(R WU) '%CYCLE':(UI); P(ELSE') '%ELSE'(START' UI):; P(START' UI) '%START':(UI); P(EXTERNAL') '%EXTERNAL':'%SYSTEM':'%DYNAMIC':; P(SPEC') '%SPEC':; P(%QNAME) '%ARRAY' '%NAME':'%NAME':; P(FPDEFN') '('(FP-DEL)[NAMELIST](R FPDEFN')')':; P(FP-DEL) (RFM)(NAME'): (TYPE)(%QNAME): '%RECORD'(ARRAY')'%NAME': '%NAME'; P(R FPDEFN') (COMMA')(FP-DEL)[NAMELIST](R FPDEFN'):; P(ARRAY') '%ARRAY':; P(S R DEC) '%ARRAY'[NAMELIST](CBPAIR)(R SW LIST'): [NAMELIST]; P(COMMA') ',':; P(RFDEC) [FAIL]: (TYPE)(%QNAME)[NAMELIST]: '%RECORD'(ARRAY')'%NAME'[NAMELIST]: '%NAME'[NAMELIST]: (TYPE)'%ARRAY'[NAMELIST](CBPAIR)(R SW LIST'): '%RECORD'[HOLE](S R DEC) '(' [MARK][NAME] ')': '%RECORD' '(' [NAME] ')' (S R DEC); P(REST OF RFDEC') (COMMA')(RFDEC)(REST OF RFDEC'):; P(CBPAIR) '('(PLUS')[INTEGER]':'(PLUS')[INTEGER]')'; P(R SW LIST') ','[NAMELIST](CBPAIR)(R SW LIST'):; P(R S COND') (COMP)(EXPRN):; P(FORMAT') '%FORMAT':; P(NAME') '%NAME':; P(MC INST) [MC=0][INTEGER]','[INTEGER]: [MC=1][INTEGER]','(DXB): [MC=3][INTEGER]','[INTEGER]','(DB): [MC=5](DB)(VAL'): [MC=7][INTEGER]','(DB): [MC=9](DLB)','(DB): [MC=11](DLB)','(DLB): [MC=13][INTEGER]: 'PUT_'[INTEGER]: '*'[INTEGER]','(@')(VAR); P(@') '@':; P(VAL') ','[INTEGER]:; P(DB) (UCS): [INTEGER](REST OF DB'); P(REST OF DB') '('[INTEGER]')':; P(DXB) (UCS)(REST OF DB'): [INTEGER](REST OF DXB'); P(REST OF DXB') '('[INTEGER]','[INTEGER]')': '('[INTEGER]')':; P(DLB) [INTEGER]'('[INTEGER]','[INTEGER]')': (UCS)'('[INTEGER]')'; P(UCS) [NAME](DISPP'): '<'(LABEL)'>'; P(DISPP') '+'[INTEGER]: '-'[INTEGER]:; @