Сопоставление с образцом в Java - PullRequest
2 голосов
/ 11 января 2010

Я работаю над Java-программой, которая может вычислить дифференцирование любого математического выражения. Когда пользователь вводит выражение, скажем Sin(Cos(x^2)), мне нужно проверить, математически оно допустимо или нет. Конечно, мы можем сделать это вручную, но это будет утомительная работа. Могу ли я сделать это, используя регулярное выражение пакет Java ??

Как ??

спасибо ..

Ответы [ 6 ]

10 голосов
/ 11 января 2010

Нет, регулярных выражений недостаточно ... (фактически это может быть математически доказано).

Для разбора математических выражений вы можете написать свой собственный анализатор (который на самом деле не так сложен) или использовать существующий, такой как Jep .

Вот несколько предыдущих SO вопросов о разборе математических выражений:

Лучший алгоритм оценки математического выражения?

Чтение и запуск математического выражения в Python

Оценка математических выражений

6 голосов
/ 11 января 2010

JEval - достойная альтернатива, поскольку JEP теперь находится под коммерческой лицензией.

2 голосов
/ 11 января 2010

Если вы хотите закодировать его самостоятельно, вы можете использовать Польская запись , которая широко используется для этой цели.

2 голосов
/ 11 января 2010

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

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

много на antlr

1 голос
/ 11 января 2010

Другой альтернативой является библиотека JScience . Абстрактный класс Функция включает метод differentiate(), который реализован для дискретных, полиномиальных и рациональных функций.

0 голосов
/ 11 января 2010

Системы компьютерной алгебры (как, например, Mathematica) используют обозначения правил, подобные следующим для дифференцирования:

  D[Cos[x_],y_]:=(-1)*Sin[x]*D[x,y]
  D[Sin[x_],y_]:=Cos[x]*D[x,y]

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

Я знаю эти проекты Java с открытым исходным кодом, которые содержат похожий механизм сопоставления с шаблоном:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...