Recently, I’ve faced a task of developing a tool which allows the application to have base of (not very complex) logical rules. There were three demands:
- The rules were to be written by non-programmers, so using of the languages which the program is written in (Java/Scala), wasn’t very good.
- The rule base should be changeable without redeployment of the application, ideally, should be stored in a database.
- We should have control on compilation and error emission.
The first and the second demand could be met by developing some kind of Scala- or Groovy-based DSL, extremely simple. But I’ve come with several arguments against:
- The third requirement might be hard to meet.
- The rules are quite simple, so embedding an interpreter of a general-purpose language might be overkill.
- The language which rules consumer is written in might be changed (from Java/Scala to Python e.g.)
So, I’ve decided to write a very simple rule parser/compiler. After I’d created a prototype I decided to write this post, hope it’ll be useful. I say in advance that you can see the code adapted for this post in this repository.