..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................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, 51.1, 54, | only in 55). 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; e=expression19; n=name56; s=statement14; t=type36.16 Feb 83Comments: ·=obsolete; µ=efficiency hack; ¸=unsafe; ¹=machine dependent; n56 means n is defined in rule 56; n2=n (the subscript is only for the desugaring). CLRMFullGram.press Cedar Full Language Syntax¶3.3 1 module ::= DIRECTORY (nd ?( : TYPE ?nt ) ?(USING [ nu, ... ] ) ), ... ; ( interface | implementation ) 2 interface ::= nm, !.. : ?CEDAR DEFINITIONS ?locks?(IMPORTS ( (niv : | ) nit ), ...)?·(SHARES ns, ...) ~ ?·access12 { ?open7 (d | b); !.. } . 3 implementation ::= nm : ?CEDAR ?safety( PROGRAM ?drType42 | MONITOR ?drType42 ?locks )?(IMPORTS ( (niv : | ) nit ), ...) ?(EXPORTS ne, ...)?·(SHARES ns, ...) ~ ?·access12 block .4 safety ::= SAFE | UNSAFE --In 3, 41.5 locks ::= LOCKS e ?(USING nu: t)¶3.4 6 block ::= ?(CHECKED | UNCHECKED | TRUSTED) { ?open ?enable ?body ?( EXITS (n, !..=>s); ... ) } --In 3,13,14. 7 open ::= OPEN ( n ~~ e | e ), !.. ;In 2, 5, 17. ·The ~~ may be written as :. 8 enable ::= ENABLE (enChoice | {enChoice; ...}); --In 5, 17. 9 enChoice ::=( e, !.. | ANY ) => s --In 7, 27.1. 10 body ::= (d | b); !.. ; s; ... | s; !.. --In 5, 17. ¶3.511 declaration ::= n, !.. : ?access varTC40In 2, 10, 43. VAR, READONLY only for interface var.12 access ::= PUBLIC | PRIVATE --In 2, 3, 11, 13, 50, 51, 53.13 binding ::= n, !.. : ?access t ~ ( e | t2 -- if t=TYPE-- | CODE | ¹¸ ?TRUSTED MACHINE CODE { (e, ...); ... } | ?INLINE ?(ENTRY | INTERNAL) block6 )In 2, 10. ·The ~ may be written as =. ·ENTRY or INTERNAL may be writtenbefore t. Block or MACHINE CODE only for proc types.¶3.614 statement ::= e1_e2 | e | block6 | escape | loop | NULL--In 6, 10, 17, 19. 16 escape ::= GOTO n | GO TO n | EXIT | CONTINUE | ·LOOP |·RETRY | ·REJECT | (RETURN | RESUME) ?e | ¸¹e _ STATE17 loop ::= ?iterator ?(WHILE e | UNTIL e) DO ?·open7 ?·enable8 ?body10 ?·(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.¶3.719 expression ::= n | literal57 | (e) | application26 | (e | typeName37) . (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. Subrangeonly after IN or THROUGH. s only in ifŸ28 and select choices30 33 35.20 prefixOp ::= @ (8) | � (7) | (~ | NOT) (3)21 infixOp ::= * | / | MOD (6) | + | � (5) | relOp (4) |_ (0)22 relOp ::= ?NOT (?~ (= | < | >) | <= | >= | # | IN) --In 21, 30.23 builtIn ::= -- These are enumerated in Table 4�5.24 funnyAppl ::= FORK | JOIN | WAIT | NOTIFY | BROADCAST |SIGNAL | ERROR | RETURN WITH ERROR | ·NEW | ·START |·RESTART | ¹¸TRANSFER WITH | ¹¸RETURN WITH25 subrange ::= ?typeName37 ( [ e1 .. e2 ] | [ e1 .. e2 ) | ( e1 .. e2 ] | ( e1 .. e2 ) ) --In 19, 39, 48.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 ::= ! enChoice9; ... -- In 19, 26.¶3.828 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; ... endChoice3133 safeChoice ::= n : t => e234 ·withSelect ::= WITH (n1 ~~ e1 | · e1 ) SELECT ?¸e11 FROM withChoice; ... endChoice31 --·The ~~ may be written as :.35 ·withChoice ::= n2 => e2 | n2, n2, !.. => e2 ¶436 type ::= typeName | builtInType | typeCons37 typeName ::= n1 | typeName . n2 | ·typeName[e] | ·n2 typeName --In 19, 25, 36, 40.1, 49.¶4.238 builtInType ::= INT | REAL | TYPE | ATOM | CONDITION | MONITORLOCK | ·LONG CARDINAL | ·¸?LONG UNSPECIFIED | ·¸MDSZone | µ ?¸UNCOUNTED ZONESee Table 4�2. TYPE only in a b or an interface's d. 39 typeCons ::= subrange25 | paintedTC40.1 | transferTC41 |arrayTC44 | seqTC45 | ¸descriptorTC45.1 | refTC46 | listTC47 |¸pointerTC48 | ·¸relativeTC49 | recordTC50 | unionTC52 |enumTC54 | defaultTC55¶4.340 varTC ::= ( | READONLY | VAR) t | ANY In 11, 45�48. ANY only in refTC. VAR only in interface decl.40.1paintedTC ::= typeName37 PAINTED t¶4.441 transferTC ::=?safety4 xfer ?drType 41.1xfer ::= PROCEDURE | PROC | PORT | PROGRAM | PROCESS | SIGNAL | ERROR42 drType ::= ?fields1 RETURNS fields2 | fields1 --In 3, 41.43 fields ::= [d11, ... ] | [t, ... ] | ANY --In 42, 50, 52. ANY only in 42.44 arrayTC ::= ?µPACKED ARRAY ?t1 OF t245 seqTC ::= ?µPACKED SEQUENCE tag53 OF tLegal only as last type in the fields of a recordTC or unionTC.45.1¸descriptorTC ::= ?LONG DESCRIPTOR FOR varTC40varTC must be an array type.¶4.546 refTC ::= REF ?varTC40 47 listTC ::= LIST OF varTC4048 ¸pointerTC ::= ?LONG ?ORDERED ?·BASE POINTER ?·subrange25 ?(TO varTC40) | ·POINTER TO FRAME [ n ]Subrange only in a relativeTC; no typeName37 on it.49·¸relativeTC ::= typeName37 RELATIVE t¶4.650 recordTC ::= ?access12 ( ?MONITORED RECORD fields43 |¹ MACHINE DEPENDENT RECORD (mdFields | ·fields43) )51 ¹mdFields ::= [( (n pos), ... : ?·access12 t ), ...] -- In 50, 52.51.1¹pos ::= ( e1 ?(: e2 .. e3) ) -- In 51, 53.52 unionTC ::= SELECT tag FROM( n, ... => ( fields43 | mdFields51 | ·NULL) ), ... ?, ENDCASE Legal only as last type in the fields of a recordTC or unionTC.53 tag ::= (n ?¹pos51.1 : ?·access12 | µ¸(COMPUTED|OVERLAID) ) (t | *) --In 44, 52. * only in unionTC.¶4.754 enumTC ::= {n, ...} | MACHINE DEPENDENT {(?n (e) | n), ...}¶4.1155 defaultTC ::= t _ | t _ e | µt _ e | TRASH | µt _ TRASHdefaultTC legal only as the type in a decl in a body9 or fieldŸ43 (n: t _ e), in aTYPE binding13, or in NEW. Note the terminal |. ·TRASH may be written NULL.¶3.256 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ð"tô5rô> î$ïþ†î(¡ïRsrðEî°ï8srsrð"srsrsrð!srsrð#srî°ïqrqsrïdpïrsr ïdpïrsr ïdpïrsrïdpïrsr ïdpïrsrïdpïrîO2î°ïáqrðAï'pïárð!ï¾pïárð.îI†î×ïhŠuôjîåïfœvîörô>wôXxyxwxïfVqïfœxwxyxwxïfVqïfœxwîWïdôxð/wyxïd®qïdôxwxwxwxwxîWïcLwx wxwîöïaÈrô>wôXxïa‚qïa¥tïaÈxwxwyxy xwxîWï` wyxwxwxï_Úqô>ï` xôXwxwxï_Úqï` xwxwîWï^xxwyxï^2qï^xxwxwxï^¾rï^xxwxï^¾rï^xxwxwxwxwxîöï\Ðrô>w ôXxï\Šqï\ÐxwyxwxîWï[(wxyxwxï[nrï[(xwxyxwxï[nrï[(xwxwîWïY¤yxwxwxïY^qïY¤xwxwxïY^qïY¤xwxwxwyxïY^qïY¤xwîWïWüxwyxïW¶qïWüxwxwxïXBrïWüxîöïVTrô>wxôXwxyxwxyxzôGîöïTÐrô>wxôXwxyxwyxïTŠqïTÐxwîöïSÄþ%îåïRUvîörô>wxôXwxwyxwxyxwxywxîWïPÑwxwxwxwyôGxôXwxwxwxwxwxzôG îöïOMrô>wôXyxwxwxwxwxîWïNzôGð'yîöïL‹rô>wôXxyxwxwx wxwxzôG îöïKrô>wôXxwxwxyxwxzôGîöïIƒrô>wôXxwxwxwxwxwxwzôGxôXwxzôG îöïH¾þ%îåïGOvîörô>wz yôGwxôXwxwx ïG•rîWïFzôG tztzîöïD�rô>wôXxyxwxyzôGîöïC rô>wzwôXxwxwx wîWïA…xwxïA?rïA…xzôGtzxôXwxyxwîWï?ÝxwyxyôGxôXwxwxwxwîWï>Yxwyxwyxwxywxï>Ÿrï>YxwîWï=zôGð%tztzîWï;Ýtô5zôGîöï;þ%îåï9©vîörô>wzwôXxï9crï9©xï9crï9©xwxwxï9ïrï9©xwxwxwxyîWï8HzôGîöï6Ärô>wôXxyxwxyôGxôXwxyxwxyxwxyxwîWï5@xyxwxyxwxwyxwxywxwxwxyîöï3¼rô>wôXxwxwyxwxyxwxîWï28yôGxôXwxï2~rï28xwxï2~rï28xwxï2~rï28xîWï0´yôGxôXwxwyxwxwxwxwxyîöï/0rô>wôXxyxwxîWï-¬yôGxôXwxwxwxwxwy xyxwxï-frï-¬xï-frï-¬wîWï,KzôGtzîöï+†þ%îåï*vîörô>wzwôXxwxï*]rï*xwxîKï)ßþyîÄï*îiï)ßþyîâï*wx ï*]rï*xwxîWï(“wxwxï(Ùrï(“wxyôG{yxôXwxîWï' wxï&Érï'x ï&Érô>ï'wxôXï&Érï'xyôG{yxôXï&Érô>ï'wxôXï&Érï'xyôG{yxôXï&Érô>ï'wxôXîWï%gyôG{yxôXwxyxwxyxwx ï%­rï%gxwxîWï#ãwxï$)rï#ãxwxîWï"_ wxwx ï"¥rï"_xwxï"¥rï"_xwxwîWï Ûxwxï!!rï Ûxwxï!!rï Ûxwxï!!rï Ûxwx ï!!rï Ûxwx ï!!rï ÛxîWï�z ôG{zð;îWï_ðNîWï! tztz rïgï!zïgrô>ï!zîöï�rwôXxy{yxwxy{yxwxwxwxywxy{yîöïrô>wôXxwxwxyxy{yxwxwxy{yxwxy{yxwxy{yîöï•rô>wôXxwyxwxwxwxwxwxwxwxwxwxywxzôGîöïrô>wôXxð&îöï�rô>wôXxyxwxyxwxyxwxyxwxyxwîWï yxwxyxwxyôG xôXwxyxwxyxwîWï…xyxwxyôGxôXwxyôGîöïrô>wôXxwxïGrïxîWï}wxï7rï}xï7rï}xwxï7rï}xï7rï}xî÷ïEþyîpï}wxîxïEþyîñï}ï7rï}xï7rï}xwxîªïEþyî#ï}ï7rï}xï7rï}xîqïEþyîêï}wxzôGîöï Õrô>w ôXxwx wxîöï Qrô>w ôXxwxwxwxwxyxwxwxwxwxwxwxywxwîWï zôGð&tztzîöï �rwôXx ï Õrï �xwxzôG îöïÊþ%î)ïfœvî,rô>wôXxyxïfVrïfœxyxïfVrïfœxwyxïfVrïfœwî,ïdôrô>wôXxyxyxwx î-zïc¶zôGð4î,ïb2rô>wôXxwxïbxrïb2xïaìrïb2xwxwxïaìrî,ï`Šô>wôXxyxwxï`Drï`ŠwzôGî,ï^ârô>w ôXyx|xyôG| xôXwx|ï_(rî,ï]^ô>w ôXx ï]rî,ï[¶ô>xw ôXxyxwxï[prï[¶xï[prï[¶xwxï[prï[¶xwyôGxôXwxï[prï[¶xyxî-zïZwx ïZTrïZzôGð!î,ïXŠrô>xw ôXxïXDrïXŠxïXDrïXŠxwyôGxïXDrïXŠxôXïXDrïXŠxwxïXDrïXŠxî,ïW~þ%î*ïUëuî,rô>wzxôXwx wx wxî,ïTgrô>wôXxïT!rïTgxwx ïT!rïTgxwx wî-zïR¿xïRyrïR¿x zôGî)GïQwî,rô>w ôXxyxwxyxwxyxwxyxwxyxwxî-zïO“y xwxyxyxwxwyôG xôXwxî-zïNyxwxwy ôGî-zïLÑztzð"î,ïKMrô>wôXxïK“rïKMxwx ïK“rô>ïKMwïK“rïKMx ïK“rïKMxôXwî-zïIÉxïJrïIÉxwxïJrïIÉxwx ïJrïIÉxwxïJrïIÉxwxïJrïIÉxwî-zïHEx ïH‹rïHExwx ïH‹rïHExwxïH‹rïHExwxïH‹rïHExwî-zïFÁxïGrïFÁxwx ïGrî)GïE=wî,rô>wôXxwxwxyxwxywxwxyxî-zïCÿzôG tyztzî,ïB{rwôXxïBÁrïB{zôGyxôXî)Gï@÷wî,rô>w ôXxïA=rï@÷xwxî,ï?srwyxwxyxwxyxwxyxwî-zï=ïxyxwyôGxôXwxyî,ïwôXxwxï<%rïwôXxï; rï:ÃxwxwxwxwxyxzôG tz î,ï9?rô>wôXxwxyxyxwxï8ùrï9?xyxï8ùrî,ï7—ô>wôXxwxyxyxï7Ýrï7—xyxî-zï6YzôGð:î,ï4Õrxw ôXxwyxy ôGxôXï5rî-zï3—zôGî)Gï2wî,rô>wôXxyxwxï2Yrï2xî,ï0�rô>wôXxyôGxï0Õrî,ï/ ô>xwôXxwyôGwyxôXwxyxyôGî-zï-‡wxï-Írï-‡ywyxôXï-Írï-‡wxwxyôGxôXî-zï,IzôGð"ï,�rï,Izî,ï*Årxw ôXxï+ rï*Åxyxî)Gï)Awî,rô>wôXxwxï)‡rï)Axwxwyxyxï)‡rï)Axwî-zï'½xyôG xôXyxwxwxï(rï'½wxwî,ï&9rô>xwôXxwxwxwxwxwxï&rï&9xwxwxzôG î,ï$µrxwôXxî3`ï$}þyî3Ùï$µï$orï$µxwxï$orï$µxï$orï$µwxî<ï$}þyîwôXxyxyî-zï!‰wxwxwxï!Ïrï!‰xwxï!Ïrï!‰xwxywxwxwxwxywî-zï KzôGð:î,ïÇrô>wôXxwxwxï rïÇxwxï rïÇxwxwywywxwxî-zïC wxwxwzôGyzî)Gï¿wî,rô>wxôXwxwxwxyxyxwxîJ™ï‡þyîKï¿îK·ï‡þyîL0ï¿wxwxwxî(—ï;wî,rô>wôXxwxwxîAïþîBï;yxwxyî-zïÚzôGð+ï rïÚzxï rïÚzxzxzî-zïœtzïârïœztzyztztzî,ï×þ%î)ïDvî,rô>wzwôXxwxwxwî,ïÀrô>wôXxwxî9ïˆþî:'ïÀwxî:ïˆþÇî;FïÀwxîTïÀwxwxwxzôGtzxôXwî-zïíïþ î@ ïï4wxwxwxîLpïüþçîMWï4wxî,ï °rô>wôXxwxî6ï xþçî6ýï °wxî7Uï xþ¥î7úï °wxwxwxwxî,ï ,rô>wôXxwî,ï ¨rô>w ôXxwx wzôGxôXî,ï $rô>wôXxïÞrï $xïÞrï $xïÞrï $xwî-zï|xî5ºïDþÇî6�ï|wxî6ÙïDþ#î7üï|wxî9ïDþ„î9ˆï|wxî9àïDþ î:éï|wxî;ñïDþoî<`ï|wxî<¸ïDþçî=Ÿï|wxî>§ïDþÇî?nï|wxî?ÆïDþçî@­ï|wxîAµïDþyîB.ï|wxîB†ïDþçîCmï|wxîDuïDþcîDØï|wxîE0ïDþçîFï|wxwxwxJTVk( 0 TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman  TimesRoman  TimesRoman  TimesRoman   TimesRoman  TimesRoman  TimesRoman  TimesRoman Ðÿÿj/!“0ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCLRMFullGram.bxLampsonFebruary 16, 1983 10:36 AM