..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................Notation: item | item=choose one; ?item=zero or one item; terminals: SMALL CAPS, underlined or punctuation other than bold ()?| (parens are terminals only in rules 19, 25, 45, 48, | only in 40). item s ...=zero or more items, separated by s; item s !..=one or more items, separated by s; with s=";", a trailing ";" is optional; s is one of: empty "," ";" .Abbreviated non-terminals: b=binding13; d=declaration11; db=d | b; e=expression19; n=name56; s=statement14; t=type36.15 Sept 82Comments: =obsolete; =efficiency hack; =unsafe; =machine dependent; n56 means n is defined in rule 56; n2=n (the subscript is only for the desugaring). CLRMGram.pressCedar Language Syntax 1 module ::= DIRECTORY (nd ?( : TYPE ?nt ) ?(USING [ nu, ... ] ) ), ... ; ( interface | implementation ) 2 interface ::= nm, !.. : ?CEDAR DEFINITIONS ?locks?(IMPORTS ( (niv : | ) nit ), ...)?(SHARES ns, ...) ~ ?access12 { ?open6 db10; !.. } . 3 implementation ::= nm : ?CEDAR ?( SAFE | UNSAFE )( PROGRAM drType43 | MONITOR drType43 ?locks )?(IMPORTS ( (niv : | ) nit ), ...) ?(EXPORTS ne, ...) ?(SHARES ns, ...) ~ ?access12 block .4 locks ::= LOCKS e ?(USING nu: t) 5 block ::= ?(CHECKED | UNCHECKED | TRUSTED) { ?open ?enable body ?(EXITS (n, !..=>s); ...) } --In 3, 13, 15. 6 open ::= OPEN ( n ~~ e | e ), !.. ;In 2, 5, 17. The ~~ may be written as :. 7 enable ::= ENABLE (enChoice | {enChoice; ...}); --In 5, 17. 8 enChoice ::=( e, !.. | ANY ) => s --In 7, 27.1. 9 body ::= db; ... s; ... --In 5, 17. A trailing ; is required after the db's.10 db ::= d | b --In 2, 9.11 declaration::= n, !.. : ?access varTC39In 10, 44. VAR, READONLY only for interface variable.12 access ::= PUBLIC | PRIVATE --In 2, 3, 11, 13, 46, 47, 50.13 binding ::= n, !.. : ?access t ~ ( e | t2 -- t=TYPE-- | CODE | ?TRUSTED MACHINE CODE { (e, ...); ... } | ?INLINE ?(ENTRY | INTERNAL) block4 )In 10. The ~ may be written as =. ENTRY or INTERNAL may be writtenbefore t. Block or MACHINE CODE only for proc types. 14 statement ::= e1_e2 | e | block4 | control | loop | NULL --In 5, 9, 17, 19. 16 control ::= GOTO n | GO TO n | EXIT | CONTINUE | LOOP | RETRY | REJECT | (RETURN | RESUME) ?e | e _ STATE17 loop ::= ?iterator ?(WHILE e | UNTIL e) DO ?open6 ?enable7 body9 ?(REPEAT (n, !..=>s); ...) ENDLOOP18 iterator ::= THROUGH e | FOR (n : t | n) ( ?DECREASING IN e | _ e1 , e2)e is a subrange. In FOR n: t ..., n is readonly.19 expression ::= n | literal57 | (e) | application26 | e . (9) n | prefixOp e | e1 infixOp e2 | e1 AND (2) e2 | e1 OR (1) e2 | e ^ (9) | STOP | ERROR | [ argBinding27 ] | builtIn [ e, ... ?applEn27.1] | funnyAppl e ?( [?argBinding27 ?applEn27.1] ) |s | subrange25 | if28 | select29 | safeSelect32 | withSelect34 Precedence is in bold in rules 19-21. All operators associate to the left except_, which associates to the right. Application has highest precedence.Subrange only after IN or THROUGH. s only in if28 and select choices30 33 35.20 prefixOp ::= @ (8) | (7) | (~ | NOT) (3)21 infixOp ::= * | / | MOD (6) | + | (5) | relOp (4) |_ (0)22 relOp ::= ?NOT (?~ (= | < | >) | <= | >= | # | IN) --In 19, 30.23 builtIn ::= -- These are enumerated in Table 45.24 funnyAppl ::= FORK | JOIN | SIGNAL | ERROR | NEW | START | RESTART | WAIT | NOTIFY | BROADCAST | RETURN WITH ERROR| TRANSFER WITH | RETURN WITH25 subrange ::= ?typeName37 ( [ e1 .. e2 ] | [ e1 .. e2 ) | ( e1 .. e2 ] | ( e1 .. e2 ) ) --In 19, 39, 54.26 application ::= e [ ?argBinding ?applEn ]27 argBinding ::= (n ~ (e | | TRASH )), !.. | (e | | TRASH), !..In 19, 26. The ~ may be written as :. NULL may be written for TRASH.27.1applEn ::= ! enChoice8; ... -- In 19, 26.28 if ::= IF e1 THEN e2 ?(ELSE e3)29 select ::= SELECT e FROM choice; ... endChoice The ";" is "," in an expression, here and in 32 and 34.30 choice ::= (?relOp22 e1 ), !..=> e231 endChoice ::= ENDCASE ?(=> e3) --In 29, 32, 34.32 safeSelect ::=WITH e SELECT FROM safeChoice; ... endChoice3033 safeChoice ::= n : t => e34 withSelect ::= WITH (n1 ~~ e1 | e1 ) SELECT ?e2 FROM withChoice; ... endChoice30 --The ~~ may be written as :.35 withChoice ::= n2 => e | n2, n2, !.. => e 36 type ::= typeName | builtInType | typeCons37 typeName ::= n | typeName . n | typeName[e] | n3 ... typeName --In 25, 36, 55.1.38 builtInType ::= ?LONG (INTEGER | CARDINAL) | INT | REAL |TYPE | ATOM | MONITORLOCK | CONDITION | MDSZone | ?UNCOUNTED ZONE | ?LONG UNSPECIFIEDSee Table 42. TYPE only in a body's binding or an interface's db. 39 typeCons ::= subrange25 | defaultTC40 | transferTC41 |enumTC45 | recordTC46 | unionTC49 | arrayTC51 | seqTC51.1 |refTC52 | listTC53 | pointerTC54 | descriptorTC55 |relativeTC55.139.1varTC ::= ( | READONLY | VAR) t | ANY In 11, 44, 47, 5255. ANY only in refTC. VAR only in interface decl.40 defaultTC ::= t _ | t _ e | t _ e | TRASH | t _ TRASHdefaultTC legal only as the type in a decl in a body9 or field44 (n: t _ e), in aTYPE binding13, or in NEW. Note the terminal |. TRASH may be written NULL.41 transferTC ::=?(SAFE | UNSAFE) xfer drType 42 xfer ::= PROCEDURE | PROC | PORT | PROGRAM | PROCESS | SIGNAL | ERROR43 drType ::= ?fields1 ?(RETURNS fields2) --In 3, 41.44 fields ::= [d11, ...] | [varTC39, ...] | ANY --In 43,46,49. ANY only in 43.45 enumTC ::= {n, ...} | MACHINE DEPENDENT {(?n (e) | n), ...}46 recordTC ::= ?access12 ( ?MONITORED RECORD fields44 | MACHINE DEPENDENT RECORD (mdFields | fields44) )47 mdFields ::= [( (n pos), ... : ?access12 varTC39), ...] -- In 46, 49.48 pos ::= ( e1 ?(: e2 .. e3) ) -- In 47, 50.49 unionTC ::= SELECT tag FROM ( n, ... => ( fields44 | mdFields47 | NULL) ), ... ?, ENDCASE Legal only as last type in a recordTC or unionTC.50 tag ::= (n ?pos48 : ?access12 | COMPUTED | OVERLAID ) (t | *) --In 49, 51.1. * only in unionTC49.51 arrayTC ::= ?PACKED ARRAY ?t1 OF t251.1seqTC ::= ?PACKED SEQUENCE tag50 OF tLegal only as last type in a recordTC or unionTC.52 refTC ::= REF ?varTC39 53 listTC ::= LIST OF varTC3954 pointerTC ::= ?LONG ?ORDERED ?BASE POINTER ?subrange25 ?(TO varTC39) | POINTER TO FRAME [ n ]Subrange only in a relativeTC; no typeName37 on it.55 descriptorTC ::= ?LONG DESCRIPTOR FOR varTC39varTC must be an array type.55.1relativeTC ::= typeName37 RELATIVE tt a pointer or descriptor type, typeName a base pointer type.56 name ::= letter (letter | digit)...57 literal ::= num ?( ( D|d | B|b ) ?num ) | -- INT literal.digit (digit |A|B|C|D|E|F) ... ( H|h ) ?num | -- Hex INT literal.?num . num ?exponent | num exponent | -- REAL literal.' extendedChar | digit !.. C | " extendedChar ... " ?L | $ n58 exponent ::= (E|e) ?(+ | ) num59 num ::= digit !..60 extendedChar ::= space | \ extension | anyCharNot'"Or\ 61 extension ::= digit1 digit2 digit3 | n|N | r|R | t|T | b|B | f|F | l|L | \ | ' | "lp\Rqr>srsr"t5r> $(RsrC8srsr"srsrsr!srsr#srqrqsrdprsr dprsrsrsr dprsrdprsr dprsrdprN qrA'pr!pr.K="hujfr>vXwxwvwfyqfwvwxwvwfyqfwvxGwXWe/vxwdqewvwvwvwvwWcovw vwvar>vXwaqatawvwvxwx wvwW`Cvxwvwvw_q>`CwXvwvw_q`CwvwvW^wvxw^Uq^wvwvw^r^wvw^r^w^r^wvw\r>v Xw\q\wvxwvwxwvwxwvW[Kwxw[r[Kwvwxw[r[KwvwvWYxwvwvwYqYwvwvwYqYwvwvwvxwYqYwvwWXvwvxwWqXwvwvwXerXwVwr>vwXvwxwvxwV1qVwwvUk%Tr>vwXvwvxwvwxwvwxvwWRvwvw vxwvwvwvwvwyGQr>vXxwvwvwvwvwWOyG'wXxGNr>vXwxwvwvw vwvwyG Lr>vXwvwvwxwvwyGKr>vXwvwvwyG6Ir>vXwvwyG H%Grr>vy vwXvwvw GrWF4yGtytyDr>vXwxwvwxyGC,r>vyvXwvwvw vWAwvwAbrAwyGtywXvwxwvW@wvxwxGwXvwvwvwvW>|wvxwvxwvwxvw>r>|wvW=>yG"tytyW<t5yG;;%9r>vyvXw9r9w9r9wvwvw:5r9wvwvwvwxyGW87 r>vXwxwvwxGwXvwxwvwxwvwxwvwW5xwvwxwvwvxwvwxvwvwvwx4r>vXwvwvxwvwxwvwW2~xGwXvw2r2~wvw2r2~w2r2~wW0xGwXvwvxwvwvwvwvwx/vr>vXwxwvwW-xGwXvwvwvwvwvx wxwvw-r-w-r-vW,yGty+%*r>vyvXwvw*r*wvwK*Hy*i*Hy*vw *r*wvwxGzxwXvwW( vw(r(w (r>(wXvw(r(wxGzxwX(r>(wXvw(r(wxGzxwX(r>(wXvwW'TxGzxwXvwxwvwxwvw 'r'TwvwW%vw&r%wvwW$L vwvw $r$Lwvw$r$LwvwvW"wvw#r"wvw#r"wvw#r"wvw #r"wvw #r"wW!y Gzy<W LFWtyty rTyTr>yrvXwxzxwvwxzxwvwvwvwxvwxzxr>vXwvwvwxwxzxwvwvwxzxwvwxzxwvwxzxr>vXwvxwvwvwvwvwvwvwvwvwvwxvwyGr>vXw&zr>vXwxwvwxwvwxwvwxwvwxwvwWxwvwxwvwxwvwxwvwxwvwWrxG vwXxGwXvwxGr>vXwvw4rwWjvw$rjw$rjwvw$rjw$rjwO2yjvw2yIj$rjw$rjwvw2y{j$rjw$rjw!2yjvwyGr>v Xwvw vw>r>v XwvwvwvwvwxwvwvwvwvwvwvwxvwvW yG&tyty |rvXw r |wvwyG  %,fr>vXwxwfyrfwxwfyrfwvxwfyrfv,er>vXwxwxwvw -zcyG5,bUr>vXwvwbrbUwbrbUwvwvwbr,`>vXwxwvw`gr`vyG,_r>v Xxw{wxG{ wXvw{_Kr,]>v Xw ,[r>wv Xwxwvw[r[w[r[wvw[r[wvxGwXvw[r[wxw-zZUvw ZrZUyG!,Xr>wv XwXrXwvxGwXrXwXXrXwvw,W%,Vyr>vywXvw vw vw,Tr>vXwvwvw vw-zSqS+rSqwvwyG,Qr>v Xwvxwvxwvwxvwvwxwvwxwv-zPExwvwxwvwx wvwxwvwxwvw-zNvx GwXvwvxG -zMyty0,Kr>vXwLErKwvw LErKwvw LErKwv-zJ{wJrJ{wvwJrJ{wvwJrJ{wvwJrJ{wvwJrJ{wv-zHwI=rHwvwI=rHwvw I=rHwvw I=rHwv-zGsw Gr,Evwvwvwxwvwxvwvwxw-zDyGtxyty,C-r>vXwvwvw xwvwx-zAyG+BrAywBrAyvyvy-z@ty@r@ytyxytyty,? r>v Xxwvwxvw ,=r>vXxwvwxwvwxwvwxwv-z<wxwvxGwXvwx,:~r>vXwvw:8r:~wvxw:8r:~vyG ,8r>vXw9r8wvwvw9r8wvwvwxwyG ty ,7Rr>vwXvwvwvwxwxwvwJ7yKj7RL7yL7Rvwvwvw,5r>vXwvw6r5wvwvxwxw6r5wv-z4JwxG wXxwvwvwvw4r4Jvwv,2r>wvXwvwvwvwvwvw3 r2w3 r2vwvwyG ,1Br>wvXw21 y31B0r1Bwvw0r1Bw0r1Bvw;?1 y;1ByG,/r>vXwxwxw-z.vwvwvw.\r.wvw.\r.wvwxvwvwvwvwxv-z,yG,,+Tr>vXwvwvw+r+Twvw+r+Twvwxwvwxwvw-z) vwvwvyGxy*r)y,(Lr>vXwvwxwxwvw(r(Lwxw(r,&vwvwxwxw&r&wxw-z%fyG,,#r>vXwxwvw$(r#w,"^r>vXwxGw"r, >wvXwvxGvwxwXvwxwxG-zVvwrVxvxwXrVvwvwxGwX-zyG"^ry,r>wv Xwvxwx GwXr-zVyG,rwv Xwrwxw-zyG<,%,r>vyvXwvwvwv,r>vXwvw9`:vw:;vw<=vw=>vwvwvwvwyGty-z{wXvwvw4UC5]{vw5C6{vw6C7{vw8JC9i{vw9C:{vw;C;{vwvwvw>C @ {vw@eCA,{vwvwvwyGty-zvwXvwvw vwyGty-zswX vwvw<;=svwvwvwvwL<;M#svw,r>vXwvw66vw7U7vwvwvwvw, kr>vXwv, r>v Xwvw vyGwX, cr>vXw r cw r cw r cwv-zw56vw6#7vw99vw9 :vw;o<`vw<=vw>?nvw?@vwAyB.vwBCmvwDucDvwE0Fvwvwvw<TVk(  TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman  TimesRoman  TimesRoman  TimesRoman  TimesRoman  TimesRoman  TimesRoman /j/ 0 CLRMGram.bxLampsonSeptember 15, 1982 3:11 PM