|Abstract Syntax Tree ( AST)|| |
a logical representation of code in memory (and disk) in the shape of a tree forest that describes hierarchies of nodes. These nodes have a notion of a parent-child relationship. Additionally, two nodes can be mutually connected with explicit references that go across the hierarchy structure.
a projectional clone of Java 6 (with optional extensions for Java 7 and 8). It follows the Java specification and is 1:1 compatible with Java 6. Additionally, MPS provides several handy extensions to BaseLanguage, such as dates, collections, closures and many others.
|Code generation|| |
the process of transfromation code from one model (AST) into another model. For example, code describing a set of business rules can be transformed into plain Java so that it can be compiled with javac and run as part of an enterprise application.
a package of related languages that have been grouped for user convenience.
|Domain Specific Language (DSL)|| |
a language dedicated to a particular problem domain, typically created with the aim of simplicity and greater expressivity compared to a general purpose language.
|Language plugin|| |
a packaged library (a zip file) containing all the required elements in order to use a language either inside either IntelliJ IDEA or MPS.
|Projectional editor|| |
an editor that allows the user to edit the AST representation of code directly, while mimicing the behavior of a text editor to some extent. The user sees text on the screen and edits it, however, in reality the text is only an illusion (projection) of an AST.
the top-level organization element of an MPS project that typically groups several models together. It can have four basic types: Solution, Language, Generator and DevKit and may depend on other modules.
a lower-level organizational element that holds user code in one or more root nodes. A model may depend on other models and also declares languages that are used to implement code held in the model.
the fundamental building block of AST. Each node holds properties of string, integer or boolean values and participates in the hierarchical structure of the model.
a node that has no parent node, but instead is directly contained in a model.
|Runtime solution|| |
a solution that is required by a language, sometimes also called a library. Runtime solutions may contain normal models as well as stubs for Java sources, classes or jar files external to MPS.
a language aspect defining all types (concepts) of AST nodes that can be used in the language together with their relationships.
a definition that describes the abstract structure of a syntax element. E.g. the IfStatement concepts says that an if holds a boolean Expression and up-to two StatementLists.
a language aspect holding additional restrictions on concepts, their properties and relationships.
allows the language designer to define behavior of the language concepts.
holds vizualization definitions of individual language concepts. Since the way concepts are viewed and edited on the screen can be customized, the editors specify how the user will interact with the language.
the set of elements that are visible and applicable to a particular position within a program. Typically only a sub-set of all elements of a particular kind can be used at any given program location.
a set of rules that validate and infer types of concepts in a program.
user-invoked commands that may perform changes to the code. Actions can be attached to keyboard shortcuts or menu items.
|Intention actions|| |
context-sensitive actions offered to the language user through a small pop-up window triggered by the Alt + Enter key shortcut. These actions typically perform a relatively local refactoring to the code under carret or a selected block of code.
|Surround With intention actions|| |
intentions applicable to a selected block of code that wrap the block by another concept. E.g. Surround with Try-Catch.
a potentially substantial automated change in code structure triggered by a user action.
a string property of a root node expressing its "name-space" using the dot notation (such as a.b.c), which allows logical grouping of root nodes within models.