Как правильно реализовать оценщик выражений в Java?

У меня есть карта, которая содержит ряд свойств, например, "а", "б", "с"...

Я хочу определить шаблон, где я могу оценить выражение, такое как,

"a" && "b" &&! "c" означает следующее,

правда, если

"a" is in the map, "b" is in the map but "c" is not in the map 

ложь в противном случае

Какой способ реализовать это в Java? JUEL помогает?

Редактировать:

Чтобы сделать это понятным, мне нужно создать настраиваемый язык, в котором вы можете определить любые выражения в файле конфигурации, которые нужно будет оценивать во время выполнения.

Например, мне нужен мой код Java для анализа файла, который может содержать любые выражения, такие как,

"a" && "b"

! ("a" && "d")

Я не знаю, какие выражения нужно будет оценивать во время компиляции. Надеюсь, что это делает требование более ясным.

2 ответа

Какой способ реализовать это в Java?

Я бы использовал что-то вроде Javacc или Antlr:

  • Прочитайте учебные пособия для этого инструмента и изучите примеры (особенно если вы никогда раньше не учились / не учили о грамматиках и генераторах синтаксических анализаторов)
  • написать грамматику для вашего простого языка
  • добавить "действия" в грамматику, чтобы оценить выражения на лету
  • генерировать классы Java

У вас будет кривая обучения, но это должна быть чрезвычайно простая / не проблематичная грамматика для реализации.

JUEL помогает?

Возможно нет. Для начала, все, что основано на JUEL, будет принимать полный синтаксис EL.

Основными методами являются рекурсивный спуск, алгоритм Дейкстры Шунтинг-ярда или генерация синтаксического анализатора с помощью любой из множества систем. Если вам нужно использовать только скобки, а не ",", "и" и "или", я бы сам не пошел дальше рекурсивного спуска.

Другие вопросы по тегам