Quotations

Last modified: 23 March 2021

A quotation is a language construct that lets you easily create a node with a required structure. Of course, you can create a node using the  smodelLanguage  and then populate it with appropriate children, properties and references by hand, using the same  smodelLanguage. However, there's a simpler - and more visual - way to accomplish this.

The two following constructs will build identical nodes, the first one uses quotation, the second plan  model API:

Quotations as well as light quotations are defined int the  jetbrains.mps.lang.quotation  language. You need this language to be set as a used language  in order to be able to use it in your models.

A quotation is an expression, whose value is the MPS node written inside the quotation. Think about a quotation as a "node literal", a construction similar to numeric constants and string literals. That is, you write a literal if you statically know what value do you mean. So inside a quotation you don't write an expression, which evaluates to a node, you rather write the node itself. For instance, an expression  2 + 3  evaluates to  5, an expression  < 2 + 3 >  (angled braces being quotation braces) evaluates to a node  PlusExpression  with  leftOperand  being an  IntegerConstant 2  and  rightOperand  being an IntegerConstant   .

The following two constructs again create the same AST, now the quotation approach yields clear benefits in code brevity:

Note that using quotation like  <Car()>   does   not  call the behavior constructor, while using the smodel constructor like  new node<Car>()  will  do  call it.