..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................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 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 19, 30.23 builtIn ::= -- These are enumerated in Table 4�5.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 4�2. 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, 52�55. 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 fieldŸ44 (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.1·¸relativeTC ::= 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ð"tô5rô> î$ïþ†î(¡ïRsrðCî°ï8srsrð"srsrsrð!srsrð#srî°ïqrqsrïdpïrsr ïdpïrsrsrsr ïdpïrsrïdpïrsr ïdpïrsrïdpïrîNû î°ïáqrðAï'pïárð!ï¾pïárð.îK=î"­ïhŠuôjîöïf¿rô>vôXwxwvwïfyqïf¿wvwxwvwïfyqïf¿wvxôGwôXîWïeð/vxwïdÑqïewvwvwvwvwîWïcovw vwvîöïaërô>vôXwïa¥qïaÈtïaëwvwvxwx wvwîWï`Cvxwvwvwï_ýqô>ï`CwôXvwvwï_ýqï`CwvwvîWï^›wvxwï^Uqï^›wvwvwï^árï^›wvwï^árï^›wï^árï^›wvwîöï\órô>v ôXwï\­qï\ówvxwvwxwvwxwvîWï[Kwxwï[‘rï[Kwvwxwï[‘rï[KwvwvîWïYÇxwvwvwïY�qïYÇwvwvwïY�qïYÇwvwvwvxwïY�qïYÇwvwîWïXvwvxwïWÙqïXwvwvwïXerïXwîöïVwrô>vwôXvwxwvxwïV1qïVwwvîöïUkþ%îöïTrô>vwôXvwvxwvwxwvwxvwîWïR›vwvw vxwvwvwvwvwyôGîöïQrô>vôXxwvwvwvwvwîWïO“yôGð'wôXxôGîöïNrô>vôXwxwvwvw vwvwyôG îöïL‹rô>vôXwvwvwxwvwyôGîöïKrô>vôXwvwvwyôGð6îöïIƒrô>vôXwvwyôG îöïH¾þ%îöïGrrô>vy vwôXvwvw ïG¸rîWïF4yôGtytyîöïD°rô>vôXwxwvwxyôGîöïC,rô>vyvôXwvwvw vîWïA¨wvwïAbrïA¨wyôGtywôXvwxwvîWï@wvxwxôGwôXvwvwvwvîWï>|wvxwvxwvwxvwï>Ârï>|wvîWï=>yôGð"tytyîWï<tô5yôGîöï;;þ%îöï9ïrô>vyvôXwï9©rï9ïwï9©rï9ïwvwvwï:5rï9ïwvwvwvwxyôGîWï8Žîöï7 rô>vôXwxwvwxôGwôXvwxwvwxwvwxwvwîWï5†xwvwxwvwvxwvwxvwvwvwxîöï4rô>vôXwvwvxwvwxwvwîWï2~xôGwôXvwï2Ärï2~wvwï2Ärï2~wï2Ärï2~wîWï0úxôGwôXvwvxwvwvwvwvwxîöï/vrô>vôXwxwvwîWï-òxôGwôXvwvwvwvwvx wxwvwï-¬rï-òwï-¬rï-òvîWï,‘yôGtyîöï+Ìþ%îöï*€rô>vyvôXwvwï*Ærï*€wvwîKï*HþyîÄï*€îiï*Hþyîâï*€vw ï*Ærï*€wvwxôGzxwôXvwîWï(ü vwï(¶rï(üw ï(¶rô>ï(üwôXvwï(¶rï(üwxôGzxwôXï(¶rô>ï(üwôXvwï(¶rï(üwxôGzxwôXï(¶rô>ï(üwôXvwîWï'TxôGzxwôXvwxwvwxwvw ï'šrï'TwvwîWï%Ðvwï&rï%ÐwvwîWï$L vwvw ï$’rï$Lwvwï$’rï$LwvwvîWï"Èwvwï#rï"Èwvwï#rï"Èwvwï#rï"Èwvw ï#rï"Èwvw ï#rï"ÈwîWï!Šy ôGzyð<îWï LðFîWïtyty rïTïyïTrô>ïyîöïŠrvôXwxzxwvwxzxwvwvwvwxvwxzxîöïrô>vôXwvwvwxwxzxwvwvwxzxwvwxzxwvwxzxîöï‚rô>vôXwvxwvwvwvwvwvwvwvwvwvwxvwyôGîöïþrô>vôXwð&îöïzrô>vôXwxwvwxwvwxwvwxwvwxwvwîWïöxwvwxwvwxwvwxwvwxwvwîWïrxôG vwôXxôGwôXvwxôGîöïîrô>vôXwvwï4rïîwîWïjvwï$rïjwï$rïjwvwï$rïjwï$rïjwîOï2þyîÈïjvwîÐï2þyîIïjï$rïjwï$rïjwvwîï2þyî{ïjï$rïjwï$rïjwî!ï2þyîšïjvwyôGîöïÂrô>v ôXwvw vwîöï>rô>v ôXwvwvwvwvwxwvwvwvwvwvwvwxvwvîWï yôGð&tytyîöï |rvôXw ï Ârï |wvwyôG îöï ·þ%î,ïf¿rô>vôXwxwïfyrïf¿wxwïfyrïf¿wvxwïfyrïf¿vî,ïerô>vôXwxwxwvw î-zïcÙyôGð5î,ïbUrô>vôXwvwïb›rïbUwïbrïbUwvwvwïbrî,ï`­ô>vôXwxwvwï`grï`­vyôGî,ï_rô>v ôXxw{wxôG{ wôXvw{ï_Krî,ï]�ô>v ôXw î,ï[ýrô>wv ôXwxwvwï[·rï[ýwï[·rï[ýwvwï[·rï[ýwvxôGwôXvwï[·rï[ýwxwî-zïZUvw ïZ›rïZUyôGð!î,ïXÑrô>wv ôXwïX‹rïXÑwvxôGwïX‹rïXÑwôXïX‹rïXÑwvwî,ïWÅþ%î,ïVyrô>vywôXvw vw vwî,ïTõrô>vôXwvwvw vwî-zïSqïS+rïSqwvwyôGî,ïQÉrô>v ôXwvxwvxwvwxvwvwxwvwxwvî-zïPExwvwxwvwx wvwxwvwxwvwî-zïNÁvx ôGwôXvwvxôG î-zïMƒytyð0î,ïKÿrô>vôXwïLErïKÿwvw ïLErïKÿwvw ïLErïKÿwvî-zïJ{wïJÁrïJ{wvwïJÁrïJ{wvwïJÁrïJ{wvwïJÁrïJ{wvwïJÁrïJ{wvî-zïH÷wïI=rïH÷wvwïI=rïH÷wvw ïI=rïH÷wvw ïI=rïH÷wvî-zïGsw ïG¹rî,ïEïvwvwvwxwvwxvwvwxwî-zïD±yôGtxytyî,ïC-rô>vôXwvwvw xwvwxî-zïAÌyôGð+ïBrïAÌywïBrïAÌyvyvyî-zï@Žtyï@Ôrï@Žytyxytytyî,ï? rô>v ôXxwvwxvw î,ï=†rô>vôXxwvwxwvwxwvwxwvî-zï<wxwvxôGwôXvwxî,ï:~rô>vôXwvwï:8rï:~wvxwï:8rï:~vyôG î,ï8Örô>vôXwï9rï8Öwvwvwï9rï8ÖwvwvwxwyôG ty î,ï7Rrô>vwôXvwvwvwxwxwvwîJñï7þyîKjï7RîLï7þyîLˆï7Rvwvwvwî,ï5Îrô>vôXwvwï6rï5Îwvwvxwxwï6rï5Îwvî-zï4JwxôG wôXxwvwvwvwï4�rï4Jvwvî,ï2Ærô>wvôXwvwvwvwvwvwï3 rï2Æwï3 rï2ÆvwvwyôG î,ï1Brô>wvôXwî2žï1 þyî3ï1Bï0ürï1Bwvwï0ürï1Bwï0ürï1Bvwî;?ï1 þyî;¸ï1ByôGî,ï/šrô>vôXwxwxwî-zï.vwvwvwï.\rï.wvwï.\rï.wvwxvwvwvwvwxvî-zï,ØyôGð,î,ï+Trô>vôXwvwvwï+šrï+Twvwï+šrï+Twvwxwvwxwvwî-zï)Ð vwvwvyôGxyï*rï)Ðyî,ï(Lrô>vôXwvwxwxwvwï(rï(Lwxwï(rî,ï&¤vwvwxwxwï&êrï&¤wxwî-zï%fyôGð,î,ï#ârô>vôXwxwvwï$(rï#âwî,ï"^rô>vôXwxôGwï"¤rî,ï Úô>wvôXwvxôGvwxwôXvwxwxôGî-zïVvwïœrïVxvxwôXïœrïVvwvwxôGwôXî-zïyôGð"ï^rïyî,ï”rô>wv ôXwvxwx ôGwôXïÚrî-zïVyôGî,ïÒrwv ôXwïrïÒwxwî-zï”yôGð<î,ïÏþ%î,ïƒrô>vyvôXwvwvwvî,ïÿrô>vôXwvwî9`ïÇþî:ïÿvwî:×ïÇþÇî;žïÿvwî<¦ïÇþçî=�ïÿvwî=åïÇþÇî>¬ïÿvwvwvwvwyôGtyî-zï{wôXvwvwî4UïCþî5]ï{vwî5µïCþçî6œï{vwî6ôïCþþî7òï{vwî8JïCþî9iï{vwî9ÁïCþçî:¨ï{vwî;ïCþçî;çï{vwvwvwî>íïCþ î@ ï{vwî@eïCþÇîA,ï{vwvwvwyôGtyî-zï÷vwôXvwvw vwyôGtyî-zïswôX vwvwî<Àï;þþî=¾ïsvwvwvwvwîL<ï;þçîM#ïsvwî,ïïrô>vôXwvwî6ï·þçî6ýïïvwî7Uï·þ¥î7úïïvwvwvwvwî,ï krô>vôXwvî,ï çrô>v ôXwvw vyôGwôXî,ï crô>vôXwï rï cwï rï cwï rï cwvî-zï»wî5ºïƒþÇî6�ï»vwî6Ùïƒþ#î7üï»vwî9ïƒþ„î9ˆï»vwî9àïƒþ î:éï»vwî;ñïƒþoî<`ï»vwî<¸ïƒþçî=Ÿï»vwî>§ïƒþÇî?nï»vwî?Æïƒþçî@­ï»vwîAµïƒþyîB.ï»vwîB†ïƒþçîCmï»vwîDuïƒþcîDØï»vwîE0ïƒþçîFï»vwvwvw<TVk( Ñ TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman  TimesRoman  TimesRoman  TimesRoman  TimesRoman  TimesRoman  TimesRoman /ÿÿj/ “0Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ CLRMGram.bxLampsonSeptember 15, 1982 3:11 PM