Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

First Steps with DSL on Java?

Guys... Girls, I'm working on a project which I think could be enhanced by implementing a Domain Specific Language for defining a set of rules and/or conditions for some type of work-flow.

I want to get a firm grasp on the subject, fundamentals, best practices, etc. specially how to implement them somehow with Java.

What do you suggest?

like image 387
Jose Diaz Avatar asked Jul 22 '10 04:07

Jose Diaz


People also ask

What is DSL in Java?

A Domain Specific Language is a programming language with a higher level of abstraction optimized for a specific class of problems. A DSL uses the concepts and rules from the field or domain.

What is DSL pattern?

The design of a DSL using this pattern involves the addition of new language elements to an existing base language. These elements can include new data types, language block interaction mechanisms, semantic elements, or syntactic sugar.

Is Java language a domain?

Java can be suited to create internal domain-specific languages that developers can find very intuitive to read and write, and still be quite readable by business users. DSLs created in Java may be more verbose than the ones created with dynamic languages.


1 Answers

First I would recommend reading chapter 9 (Notation) of The Practice of Programming by Kernighan and Pike.

When you have done that, come back here with specific questions on how to map the concepts in that chapter to specific designs for the problems you want to solve.

The basic pattern is to write an interpreter that is passed a 'command' argument, and possibly an 'environment' argument and executes the command (in the environment). You then have the option of writing a parser, that takes a 'script' string and converts it into a valid 'command' object (ie. an external-DSL); or you provide a library to help users build the 'command' object explicitly in the same language you are using (internal-DSL).

Kernighan and Pike do a good job of showing both how trivial and how complex an interpreter can be. If you want more depth, then I would suggest reading The Essentials of Programming Languages by Daniel Friedman et al. Which builds at least one different interpreter per chapter, and demonstrates how to implement features such as variables, functions, scopes, objects, classes, static-typing, and continuations.

However I would suggest trying your hand at a trivial DSL first, otherwise it's all just theory—a book is much more interesting when it is made relevant and practical by your previous experience.

like image 118
Recurse Avatar answered Sep 28 '22 10:09

Recurse