Преглед изворни кода

MPIDE-25: added formal BNF for language

Currently the BNF only describes the language as-is, however it should
be kept up to date with all the features and constructs that are planned
and fully specified.
Austin Meagher пре 10 година
родитељ
комит
68e989e0f1
1 измењених фајлова са 78 додато и 0 уклоњено
  1. 78 0
      docs/modellang.bnf

+ 78 - 0
docs/modellang.bnf

@@ -0,0 +1,78 @@
+<model>  ::=
+    <statement> ";" <model>
+    |  <statement>
+
+<statement> ::=
+    <system>
+    |  <behavior>
+    |  <interaction>
+    |  <trigger>
+
+<system> ::= "SYSTEM" <systemId> "=" <definitionPattern>
+<behavior> ::= "BEHAVIOR" <behaviorId> "=" <definitionPattern>
+<interaction> ::= "INTERACTION" <interactionBody>
+<trigger> ::= "WHEN" <selectionPattern> <triggerBody>
+
+<definitionPattern> ::=
+    <alternation>
+    |  <sequence>
+
+<alternation> ::=
+    <sequence> "|" <alternation>
+    |  <sequence> "|" <sequence>
+
+<sequence> ::=
+    <element> <sequence>
+    |  <element>
+
+<element> ::=
+    "(" <definitionPattern> ")" <quantifier>
+    |  <event> <quantifier>
+
+<event> ::= <identifier>
+
+<quantifier> ::=
+    "*"
+    |  "+"
+    |  "?"
+    |  "{" integer "}"
+    |  "{" integer "," "}"
+    |  "{" integer "," integer "}"
+    |  empty
+
+<interactionBody> ::=
+    <interactionOperand> <interactionOperator> <interactionBody>
+    |  <interactionOperand> <interactionOperator> <interactionOperand>
+
+<interactionOperand> ::=
+    <selectionPattern>
+    |  <expression>
+
+<interactionOperator> ::=
+    "->"
+    |  "=="
+
+<selectionPattern> ::=
+    <systemId> ":" <definitionPattern>
+
+<expression> ::=
+    <term> <expressionOperator> <expression>
+    |  <term>
+
+<expressionOperator> ::=
+    ">"
+    |  "<"
+    |  ">="
+    |  "<="
+    |  "=="
+
+<term> ::=
+    integer
+    |  string
+    |  property
+
+<triggerBody> ::= "{" triggerClause "}" // TODO: expand on triggerClause implementation
+
+<systemId> ::= <identifier>
+<behaviorId> ::= <identifier>
+<identifier> ::= alphanumString