Core-1 previewnormative preview; stable Core-1 inactive

The complete shared Core-1 declaration grammar.

Core-1 grammar

(* Core-1 additions to the inherited Core-0 grammar. These productions replace
   the corresponding Core-0 domain/message productions. *)

domain = "algorithm" | "compute" | "state" | "flow" | "optimize" ;

effect = "io" | "alloc" | "time" | "random" | "reflect" | "unsafe"
       | "abort" | "compute" | "state" | "flow" | "optimize" ;

effect-clause = "effects" , "{" , [ effect , { "," , effect } ] , "}" ;

domain-set = "{" , domain , { "," , domain } , "}" ;

authoring-modality = "interpreted" | "compiled" ;

ordinary-message-declaration
    = visibility , authoring-modality , [ "open" ] , [ "abstract" ] , [ "override" ] ,
      domain , "message" , identifier , [ generic-parameters ] ,
      "(" , receiver-parameter , { "," , value-parameter } , ")" ,
      "->" , type , { requirement-clause } ,
      [ precondition-clause ] , [ postcondition-clause ] ,
      effect-clause , (block | ";") ;

portable-message-declaration
    = visibility , authoring-modality , "portable" , domain-set , "message" , identifier ,
      [ generic-parameters ] ,
      "(" , receiver-parameter , { "," , value-parameter } , ")" ,
      "->" , type , { requirement-clause } ,
      [ precondition-clause ] , [ postcondition-clause ] ,
      effect-clause , (block | ";") ;

message-declaration
    = ordinary-message-declaration | portable-message-declaration ;

typed-message-reference = identifier , "." , identifier ;

shared-ref-type = "Ref" , "<" , ( "Self" | identifier ) , ">" ;

shared-borrow-expression
    = "Ref" , "::" , "<" , ( "Self" | identifier ) , ">" ,
      "." , "borrow" , "(" , identifier , ")" ;

bounded-shared-loan-local
    = "let" , identifier , ":" , shared-ref-type , "=" ,
      shared-borrow-expression , ";" ;

bounded-shared-view-projection = identifier , "." , identifier ;

positive-integer = nonzero-digit , { digit } ;

signed-integer = [ "-" ] , digit , { digit } ;

device-run-expression
    = "Device" , "." , "run" , "(" , typed-message-reference ,
      { "," , expression } , ")" ;

store-transact-expression
    = "Store" , "." , "transact" , "(" , typed-message-reference ,
      { "," , expression } , ")" ;

flow-activity-expression
    = "Flow" , "." , "activity" , "(" , positive-integer , "," ,
      typed-message-reference , "," , expression , "," , positive-integer ,
      "," , positive-integer , "," , ("true" | "false") , ")" ;

flow-timer-expression
    = "Flow" , "." , "timer" , "(" , positive-integer , "," ,
      expression , ")" ;

flow-signal-expression
    = "Flow" , "." , "signal" , "(" , positive-integer , "," ,
      positive-integer , ")" ;

flow-engine-start-expression
    = "FlowEngine" , "." , "start" , "(" , typed-message-reference ,
      "," , expression , ")" ;

optimization-problem-expression
    = "Optimization" , "." , "problem" , "(" , positive-integer , "," ,
      [ finite-space-expression , "," ] , typed-message-reference , "," ,
      typed-message-reference , "," ,
      positive-integer , "," , positive-integer , ")" ;

finite-space-expression
    = "Space" , "." , "range" , "(" , signed-integer , "," ,
      signed-integer , ")" ;

optimizer-run-expression
    = "Optimizer" , "." , "run" , "(" , typed-message-reference , ")" ;

(* `workflow` is reserved only so the frontend can emit the migration
   diagnostic. It is not a domain and cannot appear in domain-set. *)
Projected fromspec/editions/core-1/core-1.ebnf