Я считаю, что вам нужно будет поддерживать вычисление простых логических выражений - тех, которые используют предопределенный список предикатов (например, isLeapYear
, isMonday
, isEvenWeek
, et c.), Комбинируя их с логические операторы И, ИЛИ, НЕ (и позволяют скобкам изменять приоритет). Если у вас есть фрагмент кода, способный вычислять логические выражения, остальное - просто определить подходящее количество предикатов.
Предикаты могут иметь аргумент (ы) - например, isDayOfMonth(x)
или isHour(14)
.
В базе данных вы, скорее всего, будете хранить AST (абстрактное синтаксическое дерево) выражения - но также возможно сохранить выражение в виде строки, исключительно по вашему выбору.