Лучший алгоритм оценки математического выражения? синтаксический анализатор математических выражений в Delphi?
Мне нужна программа на Delphi, которая получает уравнение одной переменной из Edit1, например "F(x)=4*X+2*log(x)+4*power(X,2)", и получает переменную значения X из Edit2, а затем показывает результат F (X) в Edit3. Пожалуйста, помогите мне. Спасибо.
"F(x)=4*X+2*log(x)+4*power(X,2)"
Вы также можете проверить JCL , который поставляется с оценщиком выражений в файле JclExprEval.pas . Это бесплатно и с открытым исходным кодом.
Возможно, вам нужно взглянуть на этот компонент - TbcParser.
http://www.bestcode.com/html/tbcparser.html
В этот компонент включен исходный код.
Посмотрите на
http://www.efg2.com/Lab/Library/Delphi/MathFunctions/Parsers.htm
Также, если у вас установлены библиотеки JEDI и / или FastReport, вы можете использовать их анализаторы. Мы используем TParser10 из http://cc.embarcadero.com/item/15974, который является одним из самых быстрых из доступных, если не самый быстрый Это бесплатное и безупречно работает до D2007. Я слышал, что это работает и в D2009. Пока еще не проверено.
Если вы хотите написать собственную реализацию и не использовать готовую библиотеку, это займет у вас некоторое время. Просто найдите «парсер формул». Я бы начал с токенизатора, а затем построил дерево разбора из токенов.
Это сильно зависит от вашего десятичного разделителя. Используйте StrToFloat или в новых версиях Delphi - TryStrToFloat.