Roslyn shopping cart DSL - Part 2

In this post I will be reviewing some considerations that I usually have in mind while designing a DSL.

The audience
When you are working on a DSL, the first and most important thing to have in mind is the audience you are aiming for. It’s gonna be technical people, business executives, sales people, etc…, etc….

The syntax
If the audience is not a bunch of techies, here is set of design rules that you should follow (at least, they've worked out for me):
  • The syntax should be as much as closest to the domain terms that the user uses on a daily basis.
  • Use sentences like “when something_happen:” instead of “if (somethingHappen){..}”.
  • Use logical operators like “and”, “or” instead of “&&”, “||”.
  • Don't make your syntax case sensitive.
  • snake_case works better than PascalCase.
  • When syntax error happen (and it will happen) provide useful messages that lead the user to the right path.
  • Try to avoid the use of parentheses as much as you can. (our users are not Lisp programmers ;))
  • You are not building a general purpose language. Avoid loops, conditionals and variables as much as you can. Keep your DSL Turing incomplete.

Working with scripts
  • Build a professional script editor (Notepad sucks, big time)
  • Use different icons to differentiate conditions from actions.
  • Provide an autocomplete mechanism and syntax highlight.
  • Don't try to build your own version of VS. It will take a butt load of time, and most of the features you built will never be used.
  • Provide a versioning mechanism for scripts.

This is how it looks the editor provided with the sample app of this post.

The main component of the editor is a control called “Fast Colored TextBox” created by Pavel Torgashov, all the credits to this guy, the control is awesome and works like a charm.

How you will go from your DSL syntax to executable code
In this post I’m working with a technique called “source to source translation”, this means that I’ll be converting code from our DSL syntax into C# code in order to feed the Roslyn compiler.

Note: The code provided with this post does not cover in deep how source to source translation works nor is a full or complete solution, it’s just going to work with the example I’m showing and maybe give you a starting point, but nothing else.

You can get the source code from github using this link


  1. I compile and run your demo application. When I type "when", I don't get the autocomplete menu.

    1. In order to popup the autocompletion list you should hit Ctrl+Space. It' a pretty common shortcut in old editors. (although, it's not that friendly for end users.... my bad on that one ;))

  2. This comment has been removed by the author.


Post a Comment

Popular posts from this blog

How to create MS Word documents from Office templates using C#

Printing html using the embedded web browser control

WinForms, paging the DataGridView the right way