..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................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, 54). 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: n56 means n is defined in rule 56; n2=n (the subscript is only for the desugaring). CLRMSafeGram.press Cedar Safe Language Syntax¶3.3 1 module ::=DIRECTORY (nd ?(: TYPE nt) ?(USING [nu, ...]) ), ... ; ( interface | implementation ) 2 interface ::= nm, !.. : CEDAR DEFINITIONS ?locks?(IMPORTS ( (niv : | ) nit ), ...) ~ { ?open7 (d | b); !.. } . 3 implementation ::= nm : CEDAR ( PROGRAM ?drType42 | MONITOR ?drType42 ?locks )?(IMPORTS ( (niv : | ) nit ), ...) ?(EXPORTS ne, ...) ~ block .5locks ::= 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. 8 enable ::= ENABLE { enChoice; ... }; 9 enChoice ::=( e, !.. | ANY ) => s --In 7, 27.1. 10 body ::= (d | b); !.. ; s; ... | s; !.. --In 5, 17. ¶3.511 declaration ::= n, !.. : ?(PUBLIC | PRIVATE) varTC40 --In 2, 10, 43. 13 binding ::= n, !.. : ?(PUBLIC | PRIVATE) t ~ ( --In 2, 10.e | t2 -- t=TYPE-- | CODE | ?INLINE ?(ENTRY|INTERNAL) block6 )¶3.614 statement ::= e1_e2 | e | block6 | escape | loop | NULL16 escape ::=GOTO n | EXIT | CONTINUE | (RETURN|RESUME) ?e17 loop ::= ?iterator ?(WHILE e | UNTIL e) DO ?body10 ?(REPEAT FINISHED=>s) ENDLOOP18 iterator ::= THROUGH e | FOR n : t ( ?DECREASING IN e | _ e1 , e2)e is a subrange. 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) | ERROR | [ argBinding27 ] | builtIn [ e, ... ?applEn27.1] | funnyAppl e ?( [?argBinding27 ?applEn27.1] ) |s | subrange25 | if28 | select29 | safeSelect32 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.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 ERROR25 subrange ::= ?typeName37 ( [ | ( ) e1 .. e2 ( ] | ) ) --In 19, 39.26 application ::= e [ ?argBinding ?applEn ]27 argBinding ::= (n ~ ?e ), !.. | (?e), !.. --In 19, 26. 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.30 choice ::= (?relOp22 e1 ), !..=> e231 endChoice ::= ENDCASE ?(=> e3) --In 29, 32, 34.32 safeSelect ::=WITH e SELECT FROM safeChoice; ... endChoice3133 safeChoice ::= n : t => e2¶3.256 name ::= letter (letter | digit)...57 literal ::= num ?( D | B ) | digit (digit |A|B|C|D|E|F) ... H | ?num . num ?exponent | num exponent | ' extendedChar | " extendedChar ... " | $ n58 exponent ::= E ?(+ | �) num59 num ::= digit !..60 extendedChar ::= space | \ extension | anyCharNot'"Or\ 61 extension ::= digit1 digit2 digit3 | N | R | T | B | F | L | ' | " | \¶436 type ::= typeName | builtInType | typeCons37 typeName ::= n | typeName . n | typeName[e] --In 19,25,36,40.1¶4.238 builtInType ::= INT | REAL | TYPE | ATOM | CONDITION | MONITORLOCKSee Table 4�2. TYPE only in a b or an interface's d. 39 typeCons ::= subrange25 | paintedTC40.1 | transferTC41 | arrayTC44 | seqTC45 | refTC46 | listTC47 | recordTC50 | unionTC52 | enumTC54 | defaultTC55¶4.340 varTC ::= ( | READONLY | VAR) t | ANYIn 11, 46, 47. ANY only in refTC. VAR only in interface decl.40.1paintedTC ::= typeName37 PAINTED t¶4.441 transferTC ::=?(SAFE | UNSAFE) xfer ?drType 41.1xfer ::=PROC | PORT | PROCESS | SIGNAL | ERROR | PROGRAM42 drType ::= ?fields1 RETURNS fields2 | fields1 --In 3, 41.43 fields ::= [ d11, ... ] | [t, ... ] | ANY --In 42, 50, 52. ANY only in drType.44 arrayTC ::= ARRAY t1 OF t245 seqTC ::= SEQUENCE n : t1 OF t2 -- Only as last type in 50 or 52.¶4.546 refTC ::= REF ?varTC4047 listTC ::= LIST OF varTC40¶4.650 recordTC ::= ?MONITORED RECORD fields4352 unionTC ::= SELECT n : (t | *) FROM (n => fields43), ... ?, ENDCASE -- Only as last type in fields of 50 or 52.¶4.754 enumTC ::= {n, ...} | MACHINE DEPENDENT {(?n (e) | n), ...}¶4.1155 defaultTC ::= t _ | t _ e Only as t in a decl in body9 or fieldŸ43 (n: t _ e),in a TYPE binding13or in NEW.îÒïlpðÿðÿð\î°ïRqrô>srsrð"tô5rô> î$ïþ†î(¡ïRsrð1î°ï8srsrð"srsrsrð!srsrð"srî°ïqrqsrïdpïrsr ïdpïrsr ïdpïrsrïdpïrsr ïdpïrsrïdpïrîO2î°ïáqrï'pïárð!ï¾pïárð.îIuîïhŠuôjîåïfœvîörô>wxôXwyxwxïfVqïfœxwxyxïfVqïfœwxwyxïfVqïfœxwxwxwxwxîWïdôwx wxwîöïcprô>wôXxïc*qïcMtïcpxwxyxy xwxîWïaÈwyxwxwxïa‚qô>ïaÈxôXwxwxïa‚qïaÈxwxwxwxïbrïaÈxwxwxwxwxîöï` rô>w ôXxï_Úqï` xyxîWï^xwxyxwxï^¾rï^xxwxyxwxï^¾rï^xxwxwîWï\ôyxwxwxï\®qï\ôxwxwxï\®qï\ôxwxwxwyxï\®qï\ôxwx îöï[Lrwxwxyxwyxï[qï[LxwîöïZ@þ%îåïXÑvîörô>wxôXwxwyxwxyxwxywxîWïWMwxwxwxwxyxwxwxwxwxwxzôGîöïUÉrô>wôXyxwxwxwxwxzôGyîöïTErô>wôXxyx wxzôGîöïRÁrô>wôXxwxwxyxwxzôGîöïQ=rô>wôXxwxwxwxwxwxwzôGxôXwxzôG îöïPxþ%îåïO vîörô>wz xôXwxwxwyxwxywxïOOrïO xzôG îöïM…rô>wzwôXxwxwyxwxywxwx zôG îWïLxôXwxïK»rïLxzôGtzxôXwxyxwxwyxwywywxïLGrïLxwîöïJõþ%îåïI†vîörô>wzwôXxïI@rïI†xïI@rïI†xwxwxïIÌrïI†xwxwxwxyîöïGÞrô>wxôXwyxwxyxwxyxwxwywywxwxîöïFZrô>wôXxwxwyxwxyxwxîWïDÖyôGxôXwxïErïDÖxwyxyxwxyîöïCRrô>wôXxyxwxîWïAÎyôGxôXwxwy xyxwxïAˆrïAÎxïAˆrïAÎwîWï@mzôGîöï?¨þ%îåï>9vîörô>wzwôXxwxï>rï>9xwxîKï>þyîÄï>9îiï>þyîâï>9wx ï>rï>9xwxîWï<µwxwxï<ûrï<µwxyôG{yxôXwxîWï;1 wxï:ërï;1x ï:ërô>ï;1wxôXï:ërï;1xyôG{yxôXï:ërô>ï;1wxôXï:ërï;1xyôG{yxôXï:ërô>ï;1wxôXîWï9‰yôG{yxôXwxyxwx ï9Ïrï9‰xwxîWï8wxï8Krï8xwxîWï6� wxwx ï6Çrï6�xwxï6Çrï6�xwxwîWï4ýxwxï5Crï4ýxwxï5Crï4ýxwxï5Crï4ýxwx ï5Crï4ýxîWï3¿z ôG{zð;îWï2�ðNîWï1C tztz rï1‰ï1Czï1‰rô>ï1Czîöï/¿rwôXxy{yxwxy{yxwxwxwxywxy{yîöï.;rô>wôXxwxwxyxy{yxwxwxy{yxwxyôG{yï-õrô>ï.;wxôXy{yîöï,“rô>wôXxwyxwxwxwxwxwxwxwxwxwxywxzôGîöï+rô>wôXxð&îöï)‹rô>wôXxyxwxyxwxyxwxyxwxyxwîWï(xyxwxyxwxyôG îöï&ƒrô>wôXxwxï&Érï&ƒxwxwxî ï&Kþyîï&ƒwyôGxï&=rï&ƒxôXï&=rï&ƒxwxwxî gï&Kþyî àï&ƒwxzôG îöï$Ûrô>w ôXxwx wxîöï#Wrô>w ôXxwxwxwxwxwxwxwxwxzôGîöï!ÓrwôXx ï"rï!ÓxwxzôG îöï!þ%îåïŸvîörô>wôXxyxïYrïŸxyxïYrïŸxwyxïYrïŸwîöï÷rô>wôXxyxyxwx îWï¹zôGð-îöï5rô>wôXxwxï{rï5xïïrï5xwxwxïïrîöï�ô>wôXxyxwxïGrï�wzôGîöïårô>w ôXyx|xyôG| xôXwx|ï+rîöïaô>w ôXx ïrîöïUþ%îåïævîörô>wzwôXxwxwxwîöïbrô>wôXxwxîï*þî1ïbwxî9ï*þçî ïbwxwxwxwxîÖï*þîÞïbwxî6ï*þçîïbwxîuï*þþî sïbwxî Ëï*þî!êïbwxî"Bï*þçî#)ïbwxî#�ï*þçî$hïbwxwxî&›ï*þ î'»ïbwîWïÞxwx wxwx wîWïZxð!wxwxwxîöï Örô>wôXxîxï žþçî_ï Öwxwxwxîöï Rrô>wôXxwîöï Îrô>w ôXxwx wzôGxôXîöï Jrô>wôXxï rï Jxï rï Jxï rï Jxwxîçï þ#î ï Jwxîï þ îï Jwxî#ï þçî ï Jwxî ï þçî ùï Jwxî"ï þçî"èï Jwxî#ðï þçî$×ï Jwxwxwxîöï>þ%î*+ïdõvî,ïfœrô>wzxôXwx wx wxî,ïerô>wôXxwx wx zôGî)GïcNwî,rô>w ôXxyxwxyxwxyxwxyxwxî-zïaÊyxwxy î-zï`ŒzôG tzð"î,ï_rô>wôXxï_Nrï_xwx ï_Nrï_xwx ï_Nrï_xwxî-zï]„ï]Êrï]„xwxï]Êrï]„xwxï]Êrï]„xwxï]Êrï]„xwxî-zï\ï\Frï\xwxï\Frï\xwxï\Frï\xwx ï\Frî)GïZYwî,rô>wôXxwxwxyxwxywxwxyî-zïYzôG tyztzî,ïW—rwôXxïWÝrïW—xyxî)GïUðwî,rô>w ôXyxwxywxwxî,ïTlrwyxwxyxwxyxwyôGxôXwxyxwxyî,ïRèrô>wôXxwxïR¢rïRèxyxïR¢rïRèxwxïR¢rïRèzôG î,ïQ@rô>wôXxïQ†rïQ@xwxwxwxwxyzôGxôXzôG tzî,ïO¼rô>wôXxyxïOvrïO¼xyxïOvrî,ïNô>wôXxyxïMÎrïNxyxïMÎrïNzôGð#î)GïLIwî,rô>wôXxyxwxïL�rî,ïJÅô>wôXxyôGxïK rî)GïIwî,rô>wôXxwyxyxïIdrî,ïGšô>wôXxyxwxwxwxyxwx ïGàrïGšwxwxwxî-zïFywxzôGð)î)GïDowî,rô>wxôXwxwxwxyxyxwxîJ™ïD7þyîKïDoîK·ïD7þyîL0ïDowxwxwxî(—ïBÈwî,rô>wôXxwxî-zïAŠzôGïAÐrïAŠz ïAÐrïAŠztzïAÐrïAŠztzÿTVk( Y TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman TimesRoman  TimesRoman  TimesRoman  TimesRoman   TimesRoman  TimesRoman  TimesRoman  TimesRoman §ÿÿj/“0ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCLRMSafeGram.bxLampsonFebruary 16, 1983 10:38 AM