Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "VIATRA2/Examples/VTCL/ASM"

< VIATRA2‎ | Examples‎ | VTCL
(ASM functions)
(Simple rules)
Line 44: Line 44:
  
 
=== Simple rules ===
 
=== Simple rules ===
 +
 +
Simple rules include the following elementary ASM control structures:
 +
 +
* '''skip''': no operation
 +
* '''fail''': execution is terminated along the given path (with a failure)
 +
* '''print(X)''', '''println(X)''': prints term X (simply, or as a separate line). Buffered output can be initiated by '''print(B, X)''' and '''println(B, X)''', where buffer variable B should be initialized by a previous call to '''getBuffer/1'''.
 +
* '''log(Sev, X)''': prints term X to the error log with severity Sev (error, info, warning, debug, fatal)
 +
* '''update X = Y''', '''update fun(X) = Y''': assigns a new value Y to variable X or ASM function location fun(X)
 +
* '''call asmRule(X)''': calls user-defined ASM rule with actual parameter X

Revision as of 12:46, 18 February 2009

Abstract State Machines

Abstract state machines (ASMs) provide a high-level means for assembling complex transformation programs.

ASM functions

ASM functions provide a non-persistent map to store values. Each ASM function needs to be declared prior to its first use. Initial values can also be set when defining an ASM function. The values stored at a certain location of an ASM function can be updated using the update ASM construct (see later).

machine asmFuns {
 asmfunction team / 2 {
      // Initialization
	(1, "real") = "Casillas";
	(7, "real") = "Raul";
	// Any values are allowed to be used in the untyped version
	(7.1, 6) = 2;
 }
 
 asmfunction anotherFun / 1; // An ASM function without initialization
}

In the new (upcoming) VIATRA2 version, types can also be defined for ASM functions as follows.

// Import is needed if types are intended to be used by local names
import datatypes;
machine asmFuns {
 asmfunction team(Integer, datatypes.String) : String  { // FQNs can always be used for defining types
	(1, "real") = "Casillas";
	(7, "real") = "Raul";
	// The following initialization would be a type error
	// (7.1, 6) = 2;
 }
 
 rule main() = seq 
 {
	update team(1, "mu") = "van der sar";
 }
}

Simple rules

Simple rules include the following elementary ASM control structures:

  • skip: no operation
  • fail: execution is terminated along the given path (with a failure)
  • print(X), println(X): prints term X (simply, or as a separate line). Buffered output can be initiated by print(B, X) and println(B, X), where buffer variable B should be initialized by a previous call to getBuffer/1.
  • log(Sev, X): prints term X to the error log with severity Sev (error, info, warning, debug, fatal)
  • update X = Y, update fun(X) = Y: assigns a new value Y to variable X or ASM function location fun(X)
  • call asmRule(X): calls user-defined ASM rule with actual parameter X

Back to the top