Notation: Terminals are SMALL CAPS, underlined, or punctuation other than bold ? ( ) | ,.. ;.. ( ) are terminal only in lhs, interval, element, id | is terminal only in default item | item choose one ?item zero or one item ( | item ) -- comment notation item ,.. one or more items, separated by "," ( item | item , item | item , item , item | ... ) item ;.. one or more items, separated by ";" ( item | item ; item | item ; item ; item | ... ) module::= ?directory n : ?CEDAR ( defsHead tilde defsBody | implHead tilde implBody ) . directory::= DIRECTORY ?( include ,.. ) ; include::= n ?( : TYPE ?n | : FROM string ) ?( USING [ ?( n ,.. ) ] ) defsHead::= DEFINITIONS ?locks ?imports ?shares implHead::= ?safety ( PROGRAM | MONITOR ) arguments ?locks ?imports ?exports ?shares defsBody::= ?access { ?open definition ;.. ?; } | ?access BEGIN ?open definition ;.. ?; END implBody::= ?access ?checking block locks::= LOCKS primary ?( USING n : t ) imports::= IMPORTS ?( ( n | n : n ) ,.. ) exports::= EXPORTS ?( ( n | n : n ) ,.. ) shares::= SHARES n ,.. access::= PUBLIC | PRIVATE safety::= SAFE | UNSAFE checking::= CHECKED | TRUSTED | UNCHECKED binding::= n ,.. : ?access ?entry t tilde initVal | n ,.. : ?access TYPE tilde ?access t ?default definition::= binding | n ,.. : ?access ?READONLY t | n ,.. : ?access TYPE ?( [ e ] ) declaration::= binding | n ,.. : ?access t ?( _ initVal ) entry::= ENTRY | INTERNAL tilde::= ~ | = initVal::= e | trash | CODE | ?checking ?INLINE block | ?checking MACHINE CODE machineCode machineCode::= { ?( ( e ,.. ) ;.. ?; ) } | BEGIN ?( ( e ,.. ) ;.. ?; ) END default::= _ e | _ trash | _ | _ e | trash -- note the terminal "|" -- trash::= TRASH | NULL statement, s::= NULL | lhs | lhs _ e | [ argList ] _ e | ERROR | ERROR lhs | RETURN WITH ERROR lhs | SIGNAL lhs | WAIT lhs | NOTIFY lhs | BROADCAST lhs | JOIN lhs | EXIT | LOOP | GOTO n | GO TO n | RETURN | RETURN [ argList ] | RETURN lhs | CONTINUE | RETRY | REJECT | RESUME | RESUME [ argList ] | RESUME lhs | ?checking block | ?for ?while DO scope ?repeat ENDLOOP | IF e THEN s ?( ELSE s ) | SELECT e FROM ?( ( test ,.. => s ) ;.. ?; ) ENDCASE ?( => s ) | WITH e SELECT FROM ?( ( n : t => s ) ;.. ?; ) ENDCASE ?( => s ) | WITH openItem SELECT ?e FROM ?( ( e ,.. => s ) ;.. ?; ) ENDCASE ?( => s ) | ?( lhs . ) FREE [ e ?catch ] | lhs _ STATE | STATE _ e | STOP | START lhs | RESTART lhs | TRANSFER WITH lhs | RETURN WITH lhs block::= { scope ?exits } | BEGIN scope ?exits END scope::= ?open ?enable ?( declaration ;.. ; ) ?( s ;.. ?; ) open::= OPEN openItem ,.. ; openItem::= e | n : e | n ~~ e enable::= ENABLE ( lastCatch | { ?( catchList ?; ) } | BEGIN ?( catchList ?; ) END ) ; catchItem::= lhs ,.. => s lastCatch::= catchItem | ANY => s catchList::= catchItem ; catchList | lastCatch exits::= EXITS ?( exit ;.. ?; ) exit::= n ,.. => s for::= FOR n ?( : t ) _ e , e | FOR n ?( : t ) ?DECREASING IN range | THROUGH range while::= WHILE e | UNTIL e repeat::= REPEAT ?( exit ;.. ?; ) ?( FINISHED => s ?; ) test::= e | relationTail expression, e::= lhs _ e | [ argList ] _ e | disjunct | IF e THEN e ELSE e | SELECT e FROM ?( ( test ,.. => e ) ,.. ?, ) ENDCASE => e | WITH e SELECT FROM ?( ( n : t => e ) ,.. ?, ) ENDCASE => e | WITH openItem SELECT ?e FROM ?( ( e ,.. => e ) ,.. ?, ) ENDCASE => e | ERROR | ERROR lhs | SIGNAL lhs | FORK lhs | JOIN lhs | NEW lhs | START lhs argList::= arg ,.. | ( n ~ arg | n : arg ) ,.. arg::= e | | trash disjunct::= ?( disjunct OR ) conjunct conjunct::= ?( conjunct AND ) negation negation::= ?( NOT | ~ ) relation relation::= sum ?relationTail relationTail::= ?NOT ( = | # | < | <= | > | >= | ~< | ~> | ~= ) sum | ?NOT IN range range::= ?typeName interval | typeName sum::= ?( sum ( + | - ) ) product product::= ?( product ( * | / | MOD ) ) factor factor::= ?( + | - ) primary primary::= NIL | lhs | [ argList ] | prefixOp [ arg ,.. ] | ALL [ arg ] | VAL [ arg ] | ISTYPE [ e , t ] | typeOp [ t ] | SIZE [ t , e ] | ?( lhs . ) NEW [ t ?( _ initVal | tilde initVal ) ?catch ] | ?( lhs . ) CONS [ argList ?catch ] | ?( lhs . ) LIST [ argList ] | DESCRIPTOR [ e ?( , e ?( , t ) ) ] | @ lhs lhs::= literal | n | ( e ) | lhs [ argList ?catch ] | lhs . n | lhs . prefixOp | lhs . typeOp | lhs ^ | APPLY [ e , e ?catch ] | NARROW [ e ?( , t ) ?catch ] | LOOPHOLE [ e ?( , t ) ] catch::= ! ?( catchList ?; ) prefixOp::= LONG | PRED | SUCC | ORD | ABS | MIN | MAX | BASE | LENGTH typeOp::= FIRST | LAST | NIL | SIZE | CODE type, t::= typeName | typeConstructor typeName::= qualifiedName | n typeName qualifiedName::= ?( qualifiedName . ) n typeConstructor::= typeApplication | LONG t | VAR t | ?UNCOUNTED ZONE | ?typeName interval | ?( MACHINE DEPENDENT ) { ?( element ,.. ) } | ?( MACHINE DEPENDENT ) ?MONITORED RECORD fields | ?PACKED ARRAY ?t OF t | ?safety ( PROCEDURE | PROC | SIGNAL | ERROR | PROCESS | PROGRAM | PORT ) arguments | REF ?READONLY t | REF ?READONLY ANY | REF | LIST OF ?READONLY t | typeName PAINTED t | typeName RELATIVE t | DESCRIPTOR FOR ?READONLY t | ?ORDERED ?BASE POINTER ?interval ?( TO ?READONLY t ) | FRAME [ n ] typeApplication::= typeApplication . n | typeName [ e ] | typeApplication [ e ] interval::= [ e .. e ] | [ e .. e ) | ( e .. e ] | ( e .. e ) element::= n | n ( e ) | ( e ) id::= n | n ( e ) | n ( e : e .. e ) field::= t ?default nfield::= id ,.. : ?access field variant::= ( union | sequence ) ?default nvariant::= id : ?access variant fields::= NULL | [ ] | [ nfield ,.. ] | [ ?( nfield ,.. , ) nvariant ] | [ field ,.. ] | [ variant ] union::= SELECT tag FROM ( n ,.. => fields ) ,.. ?, ENDCASE tag::= ( id : ?access | COMPUTED | OVERLAID ) ( t | * ) sequence::= ?PACKED SEQUENCE ( id : ?access | COMPUTED ) t OF t params::= [ ] | [ nfield ,.. ] | [ field ,.. ] | ANY arguments::= ?params ?( RETURNS params ) name, n::= letter | n ( letter | digit ) -- no spaces in this or following rules literal::= num ?( ( D | d | B | b ) ?num ) | hex ( H | h ) ?num | num exponent | num . ?exponent | ?num . num ?exponent | string | ' extendedChar | num C | $ n num::= digit | num digit hex::= digit | hex ( digit | A | B | C | D | E | F ) exponent::= ( E | e ) ?( + | - ) num string::= " extendedChar ... " -- quotes enclose zero or more characters (other than ") extendedChar::= char | \ escapeCode -- char is any character other than \ escapeCode::= n | N | r | R | t | T | b | B | f | F | l | L | ' | " | \ | digit digit digit †CedarSyntax.tioga Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Doug Wyatt, June 26, 1985 4:46:41 pm PDT Κή–œ0.4 in topMargin 0.2 in bottomMargin 0 headerMargin 0 footerMargin 1 in leftMargin 1 in rightMargin 6.5 in lineLength 0 topIndent 0 topLeading 0 rightIndent˜šœΟmœ7™UJ™(—J™šΟi ˜ JšžΟk žΟz ž!Οb˜TJš œ žœžœžœžœž žœ˜VJš œ‘œž‘œžœ‘œžΟc˜XJš œ‘œžœ ‘œ ‘œ‘œ˜_Jš œ‘œžœ ‘œ ‘œ‘œ˜_—J˜JšΟn‘œ‘œ ‘œ‘Ÿœ‘œ‘œ‘œ˜XJš £ ‘œŸ œ‘œ ‘œ‘œ˜*Jš£‘œ‘œŸœ‘œ‘œŸœ‘œ‘œŸœ‘œ‘œ‘œ‘œ˜FJš £‘œŸ œ‘œ‘œ‘œ˜0Jš£‘œ‘œ‘œŸœ‘œŸœ‘œ ‘œ‘œ‘œ‘œ˜UJš£‘œ‘œ ‘œ‘œ‘œ‘œ‘œŸœ‘œ‘œ‘œŸœ˜\Jš£‘œ‘œ‘œ˜$Jš £‘œŸœ ‘œŸœ‘œ˜(Jš£‘œŸœ‘œ‘œ‘œ‘œ‘œ‘œ˜*Jš£‘œŸœ‘œ‘œ‘œ‘œ‘œ‘œ˜*Jš£‘œŸœ‘œ˜Jš £‘œŸœ‘œŸœ˜Jš £‘œŸœ‘œŸœ˜Jš £‘œŸœ‘œŸœ‘œŸ œ˜*J˜Jš£‘œ‘œ‘œ‘œ‘œ‘œ‘œŸœ‘œ ‘œ˜aJš£ ‘œ ‘œ‘œ‘œ‘Ÿœ‘œ‘œ‘œŸœ‘œ‘œ˜VJš £ ‘œ ‘œ‘œ‘œ ‘œ ‘œ˜:Jš £‘œŸœ‘œŸœ˜Jš£‘œ‘œ˜Jš£‘œ‘œ‘œŸœ‘œ‘œ ‘Ÿœ‘œ‘œ ŸœŸœ ˜[Jš%£ ‘œ‘œ‘œ‘œ‘œ‘œ‘œ‘œ‘œŸœ‘œ‘œ‘œ‘œ‘œ‘œ‘œŸœ˜KJš£‘œ‘œ ‘œ‘œ œ’œ œ’˜GJš£‘œŸœ‘œŸ˜J˜š £ ‘œŸœ‘œ‘œ ‘œ˜7Jš‘œŸœ‘œŸœ‘œŸœŸœŸœ‘œŸœ˜9Jš‘œŸœ‘œŸœ‘œŸ œ‘œŸœ˜3Jš‘œŸœ‘œŸœ‘œŸœ‘œŸœŸœ‘œŸœ‘œŸœ ‘œŸœ˜LJš‘œŸœ‘œŸœ‘œŸ‘œŸœ‘œŸœ ‘œŸœ˜GJš‘œ‘œ˜Jš ‘œ‘œ‘œŸœ‘œŸœ˜'Jš ‘œŸœŸœ‘œŸœ‘œ˜Jš‘œŸœŸœ‘œ‘œ‘œ‘œ‘œ‘œ‘œŸœ‘œ‘œ˜@Jš‘œŸœŸœŸœ‘œ‘œ ‘œ‘œ‘œ‘œŸœ‘œ‘œ˜BJš‘œŸœ Ÿœ‘œŸœ‘œ‘œ‘œ‘œ‘œ‘œ‘œŸœ‘œ‘œ˜LJš‘œ‘œ‘œŸœ‘œ‘œŸœ‘œŸœ‘œŸœ˜@Jš‘œŸœ‘œŸœ‘œŸœŸœ‘œŸœŸœ˜@—Jš £‘œ ‘œ‘œŸœ‘œŸœ˜3Jš£‘œ‘œ‘œ‘œ ‘œ‘œ‘œ‘œ‘œ‘œ˜Jš£‘œ‘œ œ œ‘œ œ œ˜Jš£‘œ‘œ œ œ‘œ œ  œ˜%Jš£‘œ‘œ˜Jš£‘œ‘œ‘œ ˜!Jš £‘œ‘œ‘œ ‘œ‘œ˜)Jš£‘œ‘œ˜!Jš£‘œŸœ‘œ‘œ ‘œ‘œ‘œ‘œ‘œ ‘œ ‘œ‘œ ˜eJš£‘œŸœŸœ‘œ‘œ ‘œ‘œ‘œŸœ˜