Child pages
  • Behavior
Skip to end of metadata
Go to start of metadata

During syntax tree manipulation, common operations are often extracted to utility methods in order to simplify the task and reuse functionality. It is possible to extract such utilities into static methods or create node wrappers holding the utility code in virtual methods. However, in MPS a better solution is available: the behavior language aspect. It makes it possible to create virtual and non-virtual instance methods, static methods, and concept instance constructors on nodes.

Concept instance methods

A Concept instance method is a method, which can be invoked on any specified concept instance. They can be both virtual and non-virtual. While virtual methods can be overridden in extending concepts, non-virtual ones cannot. Also a virtual concept method can be declared abstract, forcing the inheritors to provide an implementation.

Concept instance methods can be implemented both in concept declarations and in concept interfaces. This may lead to some method resolution issues. When MPS decides which virtual method to invoke in the inheritance hierarchy, the following algorithm is applied:

  • If the current concept implements a matching method, invoke it. Return the computed value.
  • Invoke the algorithm for an extended concept, if there is one. In case of success return the computed value.
  • Invoke the algorithm for all implemented concept interfaces. In case of success return the computed value.
  • Return failure.

Concept constructors

When a concept instance is created, it is often useful to initialize some properties/references/children to the default values. This is what concept constructors can be used for. The code inside the concept construction is invoked on each instantiation of a new node of a particular concept.

Concept static methods

Some utility methods do not belong to concept instances and so should not be created as instance methods. For concept-wide functionality, MPS provides static concept methods. See also Constraints

Previous Next

  • No labels

2 Comments

  1. Anonymous

    It would be nice if you could mention some places where examples of Behavior usage in MPS can be found.

    1. Behaviors are present in most real languages. They can be found in behavior aspect of the language.There are many of them in baseLanguage, for example.

      You can also find behaviors by finding instances of ConceptBehavior concept or by finding usages of jetbrains.mps.lang.behavior language.