Поисковый подход для оценки доменного выражения - PullRequest
0 голосов
/ 22 января 2019

Я работаю над инструментом в контексте проекта Java для оценки специфичного для домена выражения, подобного правилу, например

min-5 avg datalist > Number

, причем отдельные токены означаютследующее:

  • мин-5: необязательный минимум (или максимум, в этом случае макс-5) вхождений следующего термина
  • avg: необязательная функция агрегирования, которая работает в следующих случаяхсписок данных токена (также может быть суммой или чем-то похожим)
  • список данных: список данных (тип: целое / двойное), которые будут доступны до начала оценки всего выражения, может быть уменьшен до одного значенияпредыдущей функцией агрегирования
  • оператор: условный оператор <или> или =
  • Число: значение для условного оператора

Примечание (я):

  • Необязательное количество вхождений и агрегация не могут происходить одновременно, что не имеет смысла.
  • Может быть несколько из приведенных выше выражений, связанных с и / или
  • Эти выражения являются внешним вводом, не заданным заранее

Оценкаэтого выражения должно выводить логическое значение

Поскольку я довольно плохо знаком с оценкой / анализом выражений, я ищу элегантный способ решить эту проблему, возможно, с помощью Java-фреймворка / инструмента.

Что яДо сих пор пытался:

  • Разбор вручную, что оказалось не очень хорошо
  • Попытка использовать Janino Expression Evaluator, но я не знаю, как обработать это программно

Я ищу решение для элегантного решения этой проблемы, я благодарен за любые предложения

1 Ответ

0 голосов
/ 22 января 2019

то, что вы пытаетесь сделать, это DSL (предметно-ориентированный язык), и элегантный способ решить вашу проблему - создать грамматику для вашего конкретного языка, которая поможет вам при разборе функции. Взгляните на JavaCC или Antlr.

...