File indexing completed on 2024-05-12 03:47:44
0001 /* 0002 File : ExpressionParser.h 0003 Project : LabPlot 0004 Description : c++ wrapper for the bison generated parser. 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2014 Alexander Semke <alexander.semke@web.de> 0007 SPDX-FileCopyrightText: 2020-2022 Stefan Gerlach <stefan.gerlach@uni.kn> 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #ifndef EXPRESSIONPARSER_H 0012 #define EXPRESSIONPARSER_H 0013 0014 #include "backend/gsl/parser.h" 0015 #include "backend/lib/Range.h" 0016 #include "backend/worksheet/plots/cartesian/XYEquationCurve.h" 0017 #include <QVector> 0018 0019 class ExpressionParser { 0020 public: 0021 static ExpressionParser* getInstance(); 0022 static int functionArgumentCount(const QString& functionName); 0023 static QString parameters(const QString& functionName); 0024 static QString functionArgumentString(const QString& functionName, const XYEquationCurve::EquationType); 0025 QString functionDescription(const QString& function); 0026 QString constantDescription(const QString& constant); 0027 void setSpecialFunction1(const char* function_name, func_t1Payload funct, std::shared_ptr<Payload> payload); 0028 void setSpecialFunction2(const char* function_name, func_t2Payload funct, std::shared_ptr<Payload> payload); 0029 0030 static bool isValid(const QString& expr, const QStringList& vars); 0031 QStringList getParameter(const QString& expr, const QStringList& vars); 0032 bool evaluateCartesian(const QString& expr, 0033 Range<double> range, 0034 int count, 0035 QVector<double>* xVector, 0036 QVector<double>* yVector, 0037 const QStringList& paramNames, 0038 const QVector<double>& paramValues); 0039 bool evaluateCartesian(const QString& expr, 0040 const QString& min, 0041 const QString& max, 0042 int count, 0043 QVector<double>* xVector, 0044 QVector<double>* yVector, 0045 const QStringList& paramNames, 0046 const QVector<double>& paramValues); 0047 bool evaluateCartesian(const QString& expr, const QString& min, const QString& max, int count, QVector<double>* xVector, QVector<double>* yVector); 0048 bool evaluateCartesian(const QString& expr, QVector<double>* xVector, QVector<double>* yVector); 0049 bool evaluateCartesian(const QString& expr, 0050 const QVector<double>* xVector, 0051 QVector<double>* yVector, 0052 const QStringList& paramNames, 0053 const QVector<double>& paramValues); 0054 static bool evaluateCartesian(const QString& expr, const QStringList& vars, const QVector<QVector<double>*>& xVectors, QVector<double>* yVector); 0055 bool evaluatePolar(const QString& expr, const QString& min, const QString& max, int count, QVector<double>* xVector, QVector<double>* yVector); 0056 bool evaluateParametric(const QString& expr1, 0057 const QString& expr2, 0058 const QString& min, 0059 const QString& max, 0060 int count, 0061 QVector<double>* xVector, 0062 QVector<double>* yVector); 0063 QString errorMessage() const; 0064 0065 const QStringList& functions(); 0066 const QStringList& functionsGroups(); 0067 const QStringList& functionsDescriptions(); 0068 const QVector<FunctionGroups>& functionsGroupIndices(); 0069 0070 const QStringList& constants(); 0071 const QStringList& constantsGroups(); 0072 const QStringList& constantsNames(); 0073 const QStringList& constantsValues(); 0074 const QStringList& constantsUnits(); 0075 const QVector<ConstantGroups>& constantsGroupIndices(); 0076 0077 private: 0078 ExpressionParser(); 0079 ~ExpressionParser(); 0080 0081 void initFunctions(); 0082 void initConstants(); 0083 0084 static ExpressionParser* m_instance; 0085 0086 QStringList m_functions; 0087 QStringList m_functionsGroups; 0088 QStringList m_functionsDescription; 0089 QVector<FunctionGroups> m_functionsGroupIndex; 0090 0091 QStringList m_constants; 0092 QStringList m_constantsGroups; 0093 QStringList m_constantsDescription; 0094 QStringList m_constantsValues; 0095 QStringList m_constantsUnits; 0096 QVector<ConstantGroups> m_constantsGroupIndex; 0097 }; 0098 #endif