Подумайте об использовании «скриптового» языка, такого как Groovy, JRuby, Scala, Rhino (даже BeanShell) и т. Д. Они отлично подходят для «внутренних» DSL и могут оставаться очень удобочитаемыми.
В качестве альтернативы, хранимые выражения могут оцениваться по заданному контексту (например, объект или более глубокая структура) с использованием любого из нескольких языков выражений (EL), таких как MVEL, OGNL и т. Д.
Как только они начинают усложняться или имеют глубокие отношения друг с другом, вам лучше использовать механизм правил, такой как Drools или Jess.
Вы можете сделать некоторые очень интересные вещи, также извлекая определения правил из базы данных, включая обновление системы в реальном времени (возможно, из проверенной тестовой системы).