The SC Language (SCL) - SCL Extensions 

Page / - last modified by ssm on 2013/05/08 11:28 

SCL Extensions 
last modified by ssm
on 2013/05/08 11:28

Table of Contents
Deprecated since 0.12
SCL Factory Extensions
SCL Create Extensions
SCL  Naming Extensions
SCL Ordering Extensions
SCL Statement Extensions
SCL Thread Extensions
SCL Goto Extensions
SCL Expression Extensions
SCL Dependency Extensions
SCL Basic Block Extensions

Deprecated since 0.12
This article is deprecated. The described features are no longer available in current releases.
•	Deprecated since 0.12
•	SCL Factory Extensions
•	SCL Create Extensions
•	SCL  Naming Extensions
•	SCL Ordering Extensions
•	SCL Statement Extensions
•	SCL Thread Extensions
•	SCL Goto Extensions
•	SCL Expression Extensions
•	SCL Dependency Extensions
•	SCL Basic Block Extensions
There are several extensions implemented to ease the work with a scl model. (de.cau.cs.kieler.scl.extensions)
SCL Factory Extensions
You need several Factories to handle all aspects of Yakindu (SGraph + SText) and the extended SCChart models. The SCL Factory Extension provides you with shortcuts for all factories.
Shortcut	Factory	 Description	
SGraph()	SGraphFactory::eINSTANCE	Factory for yakindu statechart models 	
SText()	StextFactory::eINSTANCE	Factory for yakindu expressions	
SyncGraph()	SyncgraphFactory::eINSTANCE	Factory for sgraph extensions	
SyncText()	SynctextFactory::eINSTANCE	Factory for stext extensions	
SCCExp()	SCChartsExpFactory::eINSTANCE	Factory for SCCharts specific expression extensions	
SCL()	SclFactory::eINSTANCE	Factory for SCL	
SCL Create Extensions
coming soon...
SCL  Naming Extensions
SCL Naming Extensions provide helper functions for ID & naming services.
Method	Description	
def void distributeStateIDs(Statechart)	Since yakindu does not make use of the ID field, one can use this method to make every ID in a statechart unique.	
def String getHierarchicalName(SyncState, String)	Generates a (most likely unique) name for a state. The name is generated from all parent states and regions, which are separated by an underscore. If a region or state has no name, the element's hash code is used instead.	
SCL Ordering Extensions
The Ordering Extensions provide functions, which can be used in the xtend sort context.
Method	Description	
def int compareSCLRegionStateOrder(SyncState, SyncState) 	Sorts states according to their type. Initial states come first, final states last.	
SCL Statement Extensions
Method	Description	
def boolean isEmpty(Statement)	Returns true, if the statement is an EmptyStatement.	
def boolean hasInstruction(Statement)	Returns true, if the statement is an InstructionStatement containing an instruction.	
def boolean isGoto(Statement)	Returns true, if the statement is an InstructionStatement containing a goto instruction.	
def EmptyStatement asEmptyStatement(Statement)	Convenently type-cast the statement to an EmptyStatement	
def InstructionStatement asInstructionStatement(Statement)	Convenently type-cast the statement to an InstructionStatement	
def getInstruction(Statement)	Type-cast the statement to an InstructionStatement an return its instruction.	
def EmptyStatement removeInstruction(Statement)	Creates a new EmptyStatement and copies the label and comment information from the old statement.	
def getStatement(Instruction)	Returns the parent statement of a given instruction.	
SCL Thread Extensions
The Thread Extensions provide functions to ease the handling of SCL threads and statements in the context of SCL threads.
Method	Description	
def AbstractThread getThread(Instruction)
def AbstractThread getThread(Statement) 	Returns the SCL thread of a SCL statement or SCL instruction.	
def AbstractThread getMainThread(Instruction)
def AbstractThread getMainThread(Statement) 	Returns the main thread of a SCL program.	
def Statement[] getControlFlow(Instruction)
def Statement[] getControlFlow(Statement)	Returns the control flow of an instruction/statement up to the parent of this control flow. In contrast to a thread this also includes control flows of conditional instructions.	
def boolean isInSameThreadAs(Instruction, Instruction)
def boolean isInSameThreadAs(Statement, Statement)	Returns true, if both instructions/statements are in the same thread.	
def boolean isInMainThread(Instruction)
def boolean isInMainThread(Statement)	Returns true, if the instruction/statement runs in the main thread.	
def boolean isInThread(Instruction, AbstractThread)
def boolean isInThread(Statement, AbstractThread)	Returns true, if the instruction/statement runs in the given thread.	
def boolean contains(AbstractThread, Instruction)
def boolean contains(AbstractThread, Statements)	Returns true, if the thread contains the given instruction/statement.	
def dropPrevious(AbstractThread, Statement)
def dropPrevious(List<Statement>, Statement) 	Drops all preceding statements in a thread or a list of statements before the given statement.	
def Statement getPreviousStatement(Statement)	Returns the preceding statement.	
def Statement getPreviousStatementHierarchical(Statement)	Returns the preceding statement or the parent statement of that control flow, if no preceding statement is present.	
def InstructionStatement getPreviousInstructionStatement(Statement)	Returns the preceding instruction statement. Empty statements are ignored.	
def InstructionStatement getPreviousInstructionStatementHierarchical(Statement)	Returns the preceding instruction statement or the parent statement of that control flow, if no preceding statement is present.	
SCL Goto Extensions
To help with the handling of the goto statement and its target instruction, use the SCL Goto Extensions.
Method	Description	
def Statement getTargetStatement(Goto)
def Statement getTargetStatement(Goto, AbstractThread)	Returns the target statement of a goto instruction (in the context of the (given) thread).	
def boolean targetExists(Goto)
def boolean targetExists(Goto, AbstractThread)	Returns true, if the target of a goto instruction exists (in the context of the (given) thread).	
def InstructionStatement getInstructionStatement(Statement) 	Returns the first valid InstructionStatement in a thread after the given statement. May return null, if no further InstructionStatement exists.
To get a valid instruction form a goto jump, one can write "goto.getTargetStatement?.getInstructionStatement?.instruction". The result value will be the instruction or null.	
def getIncomingGotos(Statement)	Returns a list of all gotos that target the given statement. If you want to retrieve the count of incoming goto jumps, use "getIncomingGotos.size".	
SCL Expression Extensions
The SCL Expression Extension holds methods to help with the manipulation and constructions of the SText (and extended) expressions.
Method	Description	
def Expression toExpression(RegularEventSpec)	Transforms a SGraph RegularEventSpec to a SText Expression. The resulting expression will be an ElementReferenceExpression.	
def Expression negate(Expression)	Negates the given expression. If the Expression is an ElementReferenceExpression the result will be a LogicalNotExpression containing the expression. Otherwise the result will be a LogicalNotExpression containing a ParenthesizedExpression, which then holds the original expression.	
def String correctSerialization(String)	Since the actual implementation of the SText parser may parse artefacts (like linebreaks) until matching a preceding delimeter, correctSerialization removes these artifacts, when serializing an expression.	
SCL Dependency Extensions
coming soon...
SCL Basic Block Extensions
The Basic Block Extensions retrieve information about basic blocks in the SCL model. A basic block can be identified by any statement in the block. Usually the first statement in the block is used.
Method	Description	
def ArrayList<Statement> getBasicBlock(Statement)
def ArrayList<Statement> getBasicBlock(Statement, List<Statement>)	Retrieves all statements of the basic block in which the given statement is located.	
def Statement getBasicBlockFirst(Statement)
def Statement getBasicBlockFirst(List<Statement>)	Returns the first statement of a basic block.	
def boolean isInBasicBlock(Statement, Statement)
def boolean isInBasicBlock(Statement, List<Statement>)	Returns true, if the caller statement is contained in the given basic block.	
def String getBasicBlockID(Statement)
def String getBasicBlockID(List<Statement>)	Returns an unique ID for the given basic block. To create this ID, the hash code of the root statement is used.	
def ArrayList<Statement> getBasicBlockRoots(Statement)	Returns a list of all basic block root statements in the contorl flow of the calling statement.	
def ArrayList<Statement> getAllBasicBlockRoots(Statement)	Returns a list of all basic block root statements in the program that contains the calling statement.	
def int getBasicBlockIndex(Statement)	Returns the index of the given basic block.	
def ArrayList<Statement> getBasicBlockPredecessors(Statement)	Returns a list of basic block root statements, that identify the predecessor basic blocks of the basic block identified by the given statement.	
SCL Basic Block Extensions Code Examples
for (predecessor : basicBlockData.BasicBlockRootStatement.getBasicBlockPredecessors) {
 goLabelText = goLabelText + 'P' + predecessor.getBasicBlockIndex + "\n"
}