Java 1.5: синтаксический анализатор математических формул - PullRequest
4 голосов
/ 27 октября 2010

Здравствуйте, я часто разрабатываю JTableModels, в которой некоторые ячейки должны содержать результат применения определенной простой математической формулы.Эти формулы могут иметь:

  • Операторы (+, -, *, /)
  • Числовые константы
  • Другие ссылки на ячейки (содержащие числа)
  • Параметры (числа со ссылочным именем, например, "INTEREST_RATE")

Я часто решаю это, делая небольшой класс калькулятора, который анализирует формулу, синтаксис которого я определяю.Класс калькулятора использует стек для вызовов, а синтаксис всегда использует польскую запись.

Но польская запись неестественна для меня и для моих пользователей.Итак, мой вопрос ...

Есть ли библиотека, которая работает в 1,5 JVM и может обрабатывать мои требования и использовать нормальные обозначения (с скобками, я не знаю название этого стиля обозначения)для формул?

PD предполагается, что формулы всегда синтаксически верны, и я могу предварительно обработать числа, которые не являются константами, чтобы предоставить их значения

Ответы [ 5 ]

3 голосов
/ 27 октября 2010

Задумывались ли вы о преимуществах JSR-223 ? в нескольких словах, эта спецификация позволяет разработчикам Java с легкостью интегрировать динамические языки и их синтаксические анализаторы . Используя такой синтаксический анализатор, ваша потребность в определении синтаксического анализатора превращается в необходимость определения внутреннего DSL , который сводится к созданию просто хорошего API и позволяет вашему пользователю выбирать, предпочитают ли они Javascript / Groovy / Scala / WTF синтаксис, который они предпочитают.

1 голос
/ 27 октября 2010

Попробуйте JEP .

Вы можете определить новые переменные для синтаксического анализатора, следовательно, он может содержать имена ссылок, такие как "INTEREST_RATE". Но вы должны определить его заранее.

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

0 голосов
/ 15 февраля 2013

Существует коммерческий инструмент под названием формула4j , который может быть полезен для некоторых.

Он не имеет прямой помощи для ссылок на ячейки.Вам придется обрабатывать их самостоятельно и переводить ссылки на ячейки в значения.

0 голосов
/ 23 июля 2011

я выпустил оценщик выражений, основанный на алгоритме Shijnting Yard Дейкстры на условиях Apache License 2.0 :

http://projects.congrace.de/exp4j/index.html

0 голосов
/ 27 октября 2010

Если вы не можете использовать Java 6 и его поддержку сценариев, взгляните на Apache Bean Scripting Framework (BSF). С этой страницы:

... BSF 3.x будет работать на Java 1.4+, предоставляя доступ к сценариям JSR-223 для Java 1.4 и Java 1.5.

...