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