The grammar for the Expressions DSL

The DSL that we want to implement in this chapter should allow us to write lines containing either a variable declaration consisting of the keyword "var", an identifier and an initialization expression (the angle brackets denote non-terminal symbols):

var <ID> = <Expression>

Or the evaluation of an expression, consisting of the keyword "eval" and the expression to evaluate:

eval <Expression>

If we write something as follows:

ExpressionsModel:
  variables += Variable*
  evaluations += EvalExpression*
;

We will not be able to write a program where variables and evaluations can be defined in any order; we can only write variables first and then evaluations.

To achieve the desired flexibility, we introduce an abstract class ...

Get Implementing Domain-Specific Languages with Xtext and Xtend - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.