ABZ 2020 → 2021
Due to the worldwide spread of the #coronavirus SARS-CoV-2 we postponed #ABZ2020 until next year. Read more: https://t.co/BlsBEJCNCL
— ABZ 2021 Ulm (@ABZ_Conference) March 27, 2020
For participants — feedback forms:
First part: http://dsl-course.org/abz/feedback/first
Second part: http://dsl-course.org/abz/feedback/hands-on
Tutorial on “Implementing Domain-Specific Languages with JetBrains MPS” will be colocated with 8th International Conference on Rigorous State Based Methods (ABZ 2021). It will take place online on Tuesday the 8th of June, 2021.
Session 1 (Tuesday, 08.06.21, 9:00 — 10:30 (GMT+2))
-
- Zoo of domain-specific languages
formatting languages, query languages, Scratch-like languages, XML-based languages, logic programming languages, business process languages, “math-based” languages, languages supporting illustrative programming, languages supporting projectional editing - DSLs: what, why, how
- definition of a domain-specific language, advantages of using DLSs, problems with DSLs
- IDEs for DSLs (syntax highlighting, background validation, content assist, hyperlinking and hovering, quickfixes)
- Running example of an external DSL (Entities Language, semantic models, abstract syntax trees)
- Suggested material: https://medium.com/@mikhail.barash.mikbar/a-tale-about-domain-specific-languages-bde2ace22f6c
- Projectional editing in MPS
- concepts and their aspects
- Suggested material: https://medium.com/@mikhail.barash.mikbar/looking-at-code-through-the-prism-of-jetbrains-mps-8e9b70e3257d
- Zoo of domain-specific languages
Session 2 (Tuesday, 08.06.21, 11:00 – 12:30 (GMT+2))
- Implementing a language in JetBrains MPS (hands-on)
- defining abstract syntax
- concrete syntax in a projectional editor
- intentions and quickfixes
- implementing a simple type system
- code generation as a model-to-text transformation
- code generation as a model-to-model transformation
Installing JetBrains MPS
- MPS can be downloaded from: https://www.jetbrains.com/mps
The list of footnotes:
- http://dsl-course.org/abz/1 redirects to https://blogs.itemis.com/en/the-business-dsl-zurich-insurance
- http://dsl-course.org/abz/2 redirects to https://en.wikipedia.org/wiki/Clojure
- http://dsl-course.org/abz/3 redirects to https://en.wikipedia.org/wiki/Syntax_highlighting#Practical_benefits
- http://dsl-course.org/abz/4 redirects to https://www.tutorialspoint.com/eclipse/eclipse_quick_fix.htm
- http://dsl-course.org/abz/5 redirects to https://www.eclipse.org/Xtext/
- http://dsl-course.org/abz/6 redirects to https://eelcovisser.org/publications/2014/WachsmuthKV14.pdf
- http://dsl-course.org/abz/7 redirects to https://martinfowler.com/bliki/IntentionalSoftware.html
- http://dsl-course.org/abz/8 redirects to https://link.springer.com/chapter/10.1007/978-3-642-36926-1_10
- http://dsl-course.org/abz/9 redirects to https://tomassetti.me/getting-started-with-the-whole-platform-grammars/
- http://dsl-course.org/abz/10 redirects to http://cedalion.sourceforge.net/oopsla11.pdf
- http://dsl-course.org/abz/11 redirects to http://monticore.de
- http://dsl-course.org/abz/12 redirects to https://docs.google.com/presentation/d/1MD-CgzODFWzdpnYXr8bEgysfDmb8PDV6iCAjH5JIvaI/
- http://dsl-course.org/abz/13 redirects to https://astexplorer.net
- http://dsl-course.org/abz/14 redirects to https://ohmlang.github.io/editor/
- http://dsl-course.org/abz/15 redirects to https://medium.com/@mikhail.barash.mikbar/abc-of-jetbrains-mps-33bed30c330b
Hands-on part:
SlideShare doesn’t work? Click here to open as PDF.
- Start MPS and create a new project. Important: select “Create Sandbox Solution”.
- Creating a new concept: Right-click on the <language-name> (near to orange “L”) -> New -> Concept.
- Create concept Entity. Important: set
instance can be root
totrue
. - Rebuild the language. Important: remember to rebuild the language after each modification to the language definition.
- Creating a new program in our language: Right-click on the <language-name>
.sandbox
(near to pink “S”) -> New -> Entity. - Remove property
name
, and addINamedConcept
afterimplements
.
SlideShare doesn’t work? Click here to open as PDF.
- Create concept IntegerField. Important: add
INamedConcept
afterimplements
. - Add to
children
of concept Entity:fields
:IntegerField[0..n]
.
SlideShare doesn’t work? Click here to open as PDF.
- Creating an editor for concept Entity: Alt/Option + Enter -> Generate Default (Statement like)
- Creating an editor for concept IntegerField.
SlideShare doesn’t work? Click here to open as PDF.
- Playing with style of the editor of concept Entity.
SlideShare doesn’t work? Click here to open as PDF.
- Creating concept EntityReference and and editor for it.
- Add to
children
of concept Entity:parent
:EntityReference[0..1]
. - Updating the editor of concept Entity to take into account the
extends ...
part.
SlideShare doesn’t work? Click here to open as PDF.
- Creating concept Program to “combine” several Entities in one file. Important: set
instance can be root
totrue
. Children:entities
:Entity[1..n]
. - Creating an editor for concept Program.
- Creating an instance of concept Program: right-click on <language-name>
.sandbox
(near to pink “S”) -> New -> Program. - Playing with autocomplete.
SlideShare doesn’t work? Click here to open as PDF.
- Playing with the editor for IntegerField.
SlideShare doesn’t work? Click here to open as PDF.
- Creating a code generator for concept Entity.
SlideShare doesn’t work? Click here to open as PDF.
- Running the code generator.