Monday, January 31, 2011

MPS export to Eclipse EMF

Over the last couple of days I have created an EMF export facility for MPS. You can export ecore files from language definitions, as well as XMI files from the instance models.

The export is integrated into the MPS generator facilities. Here is how you use it:

To export an ecore meta model, take any concept declaration in your language of choice and add an ecore export specification annotation (there is an intention for that). In this annotation, you have to specify the name of the to-be-created EPackage, the nsURI as well as the (absolute) path to where the file should be stored. The file's name will correspond to the name of the EPackage. Once you (re-)generate your language, the ecore file will automatically be written as well.

To export an XMI file, select any root element you want to export into an XMI file (currently it's one XMI file per root node). Once again, you create an annotation via an intention. Note that you can only annotate root nodes whose concept has an ecore export specification. In the annotation, you specify path and name, and when you generate the model, the XMI file is written as well.

Notice how nicely one can use the EMF export facility with any language (incl the meta language used for language definition) because of the annotation facility.

Note that the export currently doesn't yet support enumerations (I will work on that...).

You can find the code at
Sunday, January 23, 2011

Tutorial and Download for MEL/C MPS project

The source code for C-based Modular Embedded Language is now available as a download (as opposed to checking it out from SVN). There is also a new Hello World tutorial that shows you how to write your own litte C/state machine/tasks program in MEL. Get it here.
Saturday, January 15, 2011

SPLC Industry Track CFP

In August of 2011 the Software Product Lines Conference 2011 will take place in Munich. SPLC has traditionally been a relatively academic conference; this year, however, they are working to get industry much more involved: here is the Call for Papers.

Let me cite the industry chair Christa Schwanninger: we encourage you to submit industry papers to SPLC. If you are a PLE evangelist or consultant for other companies or within your company, helping your clients to write a joint publication could be a good way to motivate them. The revealed experience would help industry to improve the overall state of the knowledge and experience.

Nothing more to add. Please consider submitting something!
Sunday, January 09, 2011

New Book Project

Eelco Visser and I have decided to write a book - we'll track the progress at

The book will cover two main aspects: software engineering with DSLs as well as engineering DSLs, i.e., we talk about how DSLs can be used in software engineering and how to engineer good DSLs. The book will assume modern DSL engineering tools (language workbenches). It will not be a tutorial for any specific tool, but of course we will provide examples and some level of detail for the tools you expect from us (SDF/Spoofax, Xtext, MPS, and to a lesser degree, some others).

Although we have just started the book project, we have already written the Introduction as if the book was already finished to give you an impression what we are planning to do. We have not yet decided how open the writing process will be, but of course there will be some degree of openness and community integration. So please check back with this website if you want to stay informed and possibly get involved.
Wednesday, January 05, 2011

Table support in MPS 2.0 coming along nicely

MPS 2.0 will feature direct support for tables in editors. I am currently playing around with the code in the MASTER branch in the public git, and I have created a simple example for tables: decision table support for Java.

Here is an example model:

You can now comfortably insert new rows or columns, delete them, and enter expressions. The way you implement it in the editor definition is by subclassing a TableModel class, just as you know it from Swing. A couple of table model base classes exist for the various kinds of tables and matrixes you might want. In the case of this example, I map the table cells onto a linear structure, as defined in the following code (ExprHolders simply wrap/hold an arbitrary expression):

Finally, for generation, I first map it to a new generic switch expression I have added to Java - the intermediate model looks as follows:

In the last step, this is then mapped to a bunch of if statements....

Of course there are still a couple of quirks (it's an arbitrary pull from the repository, not a release!), but table support is coming along nicely.

Also the new build/make system for languages is nice. It now figures out automatically which parts of languages have to be regenerated, reducing average generation times quite a bit.

back to

This is Markus Voelter's Blog. It is not intended as a replacement for my regular web site, but rather as a companion that contains ideas, thoughts and loose ends.

December 2005 / January 2006 / February 2006 / March 2006 / April 2006 / May 2006 / June 2006 / July 2006 / August 2006 / September 2006 / October 2006 / November 2006 / December 2006 / February 2007 / March 2007 / April 2007 / May 2007 / June 2007 / July 2007 / September 2007 / October 2007 / November 2007 / December 2007 / January 2008 / February 2008 / March 2008 / April 2008 / May 2008 / June 2008 / July 2008 / August 2008 / September 2008 / October 2008 / November 2008 / December 2008 / January 2009 / February 2009 / March 2009 / April 2009 / May 2009 / June 2009 / July 2009 / August 2009 / September 2009 / October 2009 / November 2009 / December 2009 / January 2010 / February 2010 / April 2010 / May 2010 / June 2010 / July 2010 / August 2010 / September 2010 / October 2010 / November 2010 / December 2010 / January 2011 / March 2011 / April 2011 / May 2011 / June 2011 / July 2011 / October 2011 / November 2011 / December 2011 / January 2012 / February 2012 / October 2012 / January 2013 /

You can get an atom feed for this blog.