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