To reach these expectations the following flow specific language (FDL) as a sub set of a domain specific language (DSL) was defined. The Syntax contains common vocabulary.
The top level flow definition is called „MainFlow“. It’s the entry point of each application. The following illustration shows the basic structure :
FlowDefinition: MainFlow {
	..
}
In each flow definition two different types of elements can be placed. The first type is called “Step”. These are the software cells implemented by code. The second type is called “Flow”. These are logical groups of steps or flows that belongs together. The developer has to define each flow once. The following illustration shows a sample:
FlowDefinition: MainFlow {

	Flow: MySubFlow1
	Step: SingleStep
}

FlowDefinition: MySubFlow1 {

	Step: SingleStep1
	Step: SingleStep2
	Flow: MySubFlow2
}
Note
As name of steps, everything is allowed that C# supports. Therefore no „.“ and so on ..

With this you have defined the “list of items” of each flow. Next, you have to define how these items are connected. To define this, use keyword “Wire”. The following illustration shows how to connect two steps of the flow “MySubFlow1”:
FlowDefinition: MySubFlow1 {
	Step: SingleStep1
	Step: SingleStep2
	 ….
	Wire: SingleStep1.Out_Pin -> SingleStep2.In_Pin
}
The „MySubFlow1“ has to receive signals from a upper level flow where the flow is used. To define such an interface, use the keywords “In” or “Out”:
FlowDefinition: MySubFlow1 {
	Step: SingleStep1
	Step: SingleStep2

	In: In_MySubFlowInPin1
	…
	Out: Out_MySubFlowOutPin1
	 ….

	Wire: In.In_MySubFlowInPin1 → SingleStep1.In_Pin1
	Wire: SingleStep1.Out_Pin1 → SingleStep2.In_Pin2
	Wire: SingleStep2.Out_Pin2 → Out.Out_MySubFlowOutPin1
}
Note
The „MainFlow“ as top level flow can’t contain any In- or Out- Pins.
All interfaces are unidirectional.

Sometimes it’s necessary to place one step twice on the same flow. In this case, use a custom name. This is marked by “=>”. The following sample demonstrates this:
FlowDefinition: MySubFlow1 {

	Step: SingleStep1
	Step: SingleStep2 => JustAnotherNameForStep

	In: In_MySubFlowInPin1
	…
	Out: Out_MySubFlowOutPin1
	 ….
	
	Wire: In.In_ MySubFlowInPin1 -> SingleStep1.In_Pin1
	Wire: SingleStep1.Out_Pin1 -> JustAnotherNameForStep.In_Pin2
	Wire: JustAnotherNameForStep.Out_Pin2 -> Out.Out_MySubFlowOutPin1
}
That’s all about the syntax. More isn’t needed to define even the most complex flows.

Last edited Apr 19, 2013 at 5:15 PM by InneHo, version 1

Comments

No comments yet.