LWC11 Submission using the Whole Platform
This is the documentation of the Whole Platform submission to the Language Workbench Competition 2011 (LWC11). The assignment can be found at . For more details and to find the others submissions see .
The solution presented below has been developed having in mind two goals:
- to exploit the benefits of a graphical language workbench by providing a solution at the domain level and
- to support an agile approach by using model interpretation instead of code generation to apply the solution.
The solution consists of 8 artifacts:
- two grammars for the Entities and the Instances DSLs
- one metamodel for the ER DSL
- two actions for defining and exposing as tooling all of the generators, validator and content assist
- a deployer to hot deploy the solution in the running workbench
- a test suite for testing the grammars and the generators
- a custom DataType parser to support the date format used in the provided examples
With graphical domain languages, lines of code is no longer a suitable metric to measure the size and thus the conciseness of a solution. Let us show you that almost all of the solution code can be visualized in a 27 inches monitor.
Phase 0 - Basics
This phase is intended to demonstrate basic language design, including IDE support (code completion, syntax coloring, outlines, etc).
- Task 0.1 Simple (structural) DSL without any fancy expression language or such.
- Task 0.2 Code generation to GPL such as Java, C#, C++ or XML
- Task 0.3 Simple constraint checks such as name-uniqueness
- Task 0.4 Show how to break down a (large) model into several parts, while still cross-referencing between the parts
Phase 1 - Advanced
This phase demonstrates advanced features not necessarily available to the same extent in every LWB.
- Task 1.1 Show the integration of several languages
- Task 1.2 Demonstrate how to implement runtime type systems
- Task 1.3 Show how to do a model-to-model transformation
- Task 1.4 Some kind of visibility/namespaces/scoping for references
- Task 1.5 Integrating manually written code (again in Java, C# or C++)
- Task 1.6 Multiple generators
Phase 2 - Non-Functional
Phase 2 is intended to show a couple of non-functional properties of the LWB. The task outlined below does not elaborate on how to do this.
- Task 2.1 How to evolve the DSL without breaking existing models
- Task 2.2 How to work with the models efficiently in the team
- Task 2.3 Demonstrate Scalability of the tools
Phase 3 - Freestyle
Every LWB has its own special "cool features". In phase three we want the participants to show off these features. Please make sure, though, that the features are built on top of the task described below, if possible.