Может быть, посмотрите проект Attempto , который разрабатывает Attempto Controlled English (ACE). ACE позволяет вам писать правила на английском языке. Например:
If "foo" contains "foobar" and "foobar" does not contain "foo" then 4 = 2 + 2.
Анализатор ACE преобразует такие правила в логическую форму, называемую структурой представления дискурса (DRS). Для приведенного выше примера это выглядит так:
[]
[A]
predicate(A, contain, string(foo), string(foobar))-1
NOT
[B]
predicate(B, contain, string(foobar), string(foo))-1
=>
[]
formula(int(4), =, expr(+, int(2), int(2)))-1
Существует инструмент под названием DRS verbalizer, который преобразует DRS в ACE. За вышеуказанный DRS вы получите:
If "foo" contains "foobar" and it is false that "foobar" contains "foo" then 4 = ( 2 + 2 ).
В вашем случае вам придется преобразовать представление вашего правила в DRS (что должно быть довольно простым), а затем вы можете напрямую использовать вербализатор DRS. Указанные инструменты доступны под лицензией LGPL .