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 consisting of an identifier and an initialization expression (the angle brackets denote non-terminal symbols):

<ID> = <Expression>

or an expression by itself:

<Expression>

If we write something like this

ExpressionsModel:
  variables += Variable*
  expressions += Expression*
; 

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

To achieve the desired flexibility, we introduce an abstract class for both variable declarations and expressions; then, our model will consist of a (possibly empty) sequence of such ...

Get Implementing Domain-Specific Languages with Xtext and Xtend 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.