Я работаю над инструментом в контексте проекта Java для оценки специфичного для домена выражения, подобного правилу, например
min-5 avg datalist > Number
, причем отдельные токены означаютследующее:
- мин-5: необязательный минимум (или максимум, в этом случае макс-5) вхождений следующего термина
- avg: необязательная функция агрегирования, которая работает в следующих случаяхсписок данных токена (также может быть суммой или чем-то похожим)
- список данных: список данных (тип: целое / двойное), которые будут доступны до начала оценки всего выражения, может быть уменьшен до одного значенияпредыдущей функцией агрегирования
- оператор: условный оператор <или> или =
- Число: значение для условного оператора
Примечание (я):
- Необязательное количество вхождений и агрегация не могут происходить одновременно, что не имеет смысла.
- Может быть несколько из приведенных выше выражений, связанных с и / или
- Эти выражения являются внешним вводом, не заданным заранее
Оценкаэтого выражения должно выводить логическое значение
Поскольку я довольно плохо знаком с оценкой / анализом выражений, я ищу элегантный способ решить эту проблему, возможно, с помощью Java-фреймворка / инструмента.
Что яДо сих пор пытался:
- Разбор вручную, что оказалось не очень хорошо
- Попытка использовать Janino Expression Evaluator, но я не знаю, как обработать это программно
Я ищу решение для элегантного решения этой проблемы, я благодарен за любые предложения