syndicate-2017/js/compiler/syndicate.ohm

94 lines
3.7 KiB
Plaintext
Raw Permalink Normal View History

// -*- javascript -*-
2016-03-18 21:00:51 +00:00
// Syntactic extensions to ES5 for Syndicate/js. See compiler.js for
// the rest of the translator.
Syndicate <: ES5 {
//---------------------------------------------------------------------------
// Extensions to expressions.
Statement
+= ActorStatement
| DataspaceStatement
2016-03-18 21:00:51 +00:00
| ActorFacetStatement
| ActorEndpointStatement
2016-03-18 21:00:51 +00:00
| AssertionTypeDeclarationStatement
| FieldDeclarationStatement
2016-03-18 21:00:51 +00:00
| SendMessageStatement
FunctionBodyBlock = "{" FunctionBody "}" // odd that this isn't in es5.ohm somewhere
2016-03-18 21:00:51 +00:00
ActorStatement
= spawnStar (named Expression<withIn>)? FunctionBodyBlock -- noReact
| spawn (named Expression<withIn>)? FunctionBodyBlock -- withReact
2016-03-18 21:00:51 +00:00
DataspaceStatement
= ground dataspace identifier? FunctionBodyBlock -- ground
| dataspace FunctionBodyBlock -- normal
2016-03-18 21:00:51 +00:00
ActorFacetStatement
= react FunctionBodyBlock
ActorEndpointStatement
= on start FunctionBodyBlock -- start
| on stop FunctionBodyBlock -- stop
| assert FacetPattern AssertWhenClause? #(sc) -- assert
| on FacetEventPattern FunctionBodyBlock -- event
| on event identifier FunctionBodyBlock -- onEvent
| stop on FacetTransitionEventPattern FunctionBodyBlock -- stopOnWithCont
| stop on FacetTransitionEventPattern #(sc) -- stopOnNoCont
| dataflow FunctionBodyBlock -- dataflow
| during FacetPattern FunctionBodyBlock -- during
| during FacetPattern spawn (named Expression<withIn>)? FunctionBodyBlock -- duringSpawn
AssertWhenClause = when "(" Expression<withIn> ")"
2016-03-18 21:00:51 +00:00
AssertionTypeDeclarationStatement
= (assertion | message) type identifier "(" FormalParameterList ")" ("=" stringLiteral)? #(sc)
2016-03-18 21:00:51 +00:00
FieldDeclarationStatement = field MemberExpression ("=" AssignmentExpression<withIn>)? #(sc)
MemberExpression += field MemberExpression -- fieldRefExp
UnaryExpression += delete field MemberExpression -- fieldDelExp
2016-03-18 21:00:51 +00:00
SendMessageStatement = "::" Expression<withIn> #(sc)
FacetEventPattern
= message FacetPattern -- messageEvent
| asserted FacetPattern -- assertedEvent
| retracted FacetPattern -- retractedEvent
2016-03-19 17:48:49 +00:00
FacetTransitionEventPattern
= FacetEventPattern -- facetEvent
| "(" Expression<withIn> ")" -- risingEdge
2016-03-19 17:48:49 +00:00
2016-03-18 21:00:51 +00:00
FacetPattern
= LeftHandSideExpression metalevel decimalIntegerLiteral -- withMetalevel
| LeftHandSideExpression -- noMetalevel
//---------------------------------------------------------------------------
// Keywords. We don't add them to the "keyword" production because
// we don't want to make them unavailable to programs as
// identifiers.
spawnStar = "spawn*" ~identifierPart
spawn = "spawn" ~("*" | identifierPart)
2016-03-18 21:00:51 +00:00
assert = "assert" ~identifierPart
asserted = "asserted" ~identifierPart
assertion = "assertion" ~identifierPart
dataflow = "dataflow" ~identifierPart
dataspace = "dataspace" ~identifierPart
2016-03-18 21:00:51 +00:00
during = "during" ~identifierPart
2016-05-14 23:06:00 +00:00
event = "event" ~identifierPart
field = "field" ~identifierPart
2016-03-18 21:00:51 +00:00
ground = "ground" ~identifierPart
message = "message" ~identifierPart
metalevel = "metalevel" ~identifierPart
named = "named" ~identifierPart
2016-03-18 21:00:51 +00:00
on = "on" ~identifierPart
react = "react" ~identifierPart
2016-03-18 21:00:51 +00:00
retracted = "retracted" ~identifierPart
start = "start" ~identifierPart
stop = "stop" ~identifierPart
2016-03-18 21:00:51 +00:00
type = "type" ~identifierPart
when = "when" ~identifierPart
2016-03-18 21:00:51 +00:00
}