Component Language Syntax and Semantics
|
Component Language Syntax and Semantics
Language Syntax
EBNF Syntax of the component language:
<cmp-file> ::=
[ "package" <package-name> ";" ]
{ "import" <imported-class> ";" }
[ "<<Deploy>>" ] "component" <component-name> [ { <argument> "," } <argument> ] "{"
[ "port"
{ <port-type> <type> <port-name> "," }
<port-type> <type> <port-name> ";" ]
{ "var" <type> <var-name> ";" }
{ "component" <type> [ "(" { <argument-name> "," } <argument-name> ")" ] <component-name> ";" }
{ "connect" [ <component-name> "." ] <port-name> "->" [ <component-name> "." ] <port-name> ";" }
[ "automaton" <automaton-name> "{"
"state"
<states-list>
{ <state-name> "->" <state-name> "{" <events-list> "} / {" <actions-list> "};" }
"}" ]
"}"
<states-list> :=
(* one state exactly must be initial state. *)
(* case 1: initial state is last *)
( { <state-name> "," }
<state-name> "[initial" [ "{" <actions-list> "}" ] ";" ) |
(* or case 2: initial state is not last *)
( { <state-name> "," }
<state-name> "[initial" [ "{" <actions-list> "}" ] ","
{ <state-name> "," }
<state-name> ";" )
<argument> ::= "[" <type> <argument-name> "]"
<port-type> ::= "in" | "out"
<type> ::= <primitive-type> | <composite-type>
<primitive-type> ::= "Integer" | "Double" | "String" ...
<composite-type> ::= <imported-class>
<imported-class> ::= <path> <class-name>
<path> ::= { <name> "." } <name>
<class-name> ::= <name>
<package-name> ::= <name>
<component-name> ::= <name>
<port-name> ::= <name>
<var-name> ::= <name>
<argument-name> ::= <name>
<automaton-name> ::= <name>
<state-name> ::= <name>
<name> ::= <letter> { <letter-or-digit> | "_" }
<letter-or-digit> ::= <letter> | <digit>
<letter> ::= "a" | "b" | ... | "z"
<digit> ::= "0" | "1" | ... | "9"
<actions-list> ::= { <action> "," } <action>
<action> ::= <port-assignment> | <variable-assignment>
<port-assignment> ::= <port-name> ":" <value>
<variable-assignment> ::= <var-name> "=" <value>
<value> ::= "true" | "false" | <letter-or-digit> { <letter-or-digit> | "." | "_" }
<events-list> ::= { <event> "," } <event>
<event> ::= <port-assignment> | <variable-assignment>
Back to top
Language Semantics
Language Semantics is explained in the SimpleRobot and the Platoon projects, and in the Component Library.
In these sections we cover all syntactic rules with examples and explanations.
Back to top
|