基于QScriptEngine的简单解释器

需求:

void DataFormatPipline::DataFormatPipline(QMap<QString,double> data,QStringList targer)
{
  
}

data中保存元素数据,类似Fe-1.2,Cu-2.4,Mn3.5,QStringList中的为 Fe/Cu ,Fe/Cu-Mn,Fe*Cu+Mn ,如何利用解释器或者其它简单的方法完成这个需求?

解决方案:
现在项目中添加script

QT += core script
#include 
#include 
#include 

void dataFormatPipline(QMap<QString, double> data, QStringList target)
{
    QScriptEngine engine;

    // 将 QMap 数据绑定到 JavaScript 变量
    for (auto it = data.begin(); it != data.end(); ++it) {
        engine.globalObject().setProperty(it.key(), QScriptValue(it.value()));
    }

    // 遍历 target 表达式并计算结果
    for (const QString &expr : target) {
        QScriptValue result = engine.evaluate(expr);
        if (result.isNumber()) {
            qDebug() << expr << "=" << result.toNumber();
        } else {
            qDebug() << "表达式错误:" << expr;
        }
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QMap<QString, double> data;
    data["Fe"] = 1.2;
    data["Cu"] = 2.4;
    data["Mn"] = 3.5;

    QStringList target;
    target << "Fe/Cu" << "Fe/Cu-Mn" << "Fe*Cu+Mn";

    dataFormatPipline(data, target);
    return a.exec();
}

显示结果:

Fe/Cu = 0.5
Fe/Cu-Mn = -3
Fe*Cu+Mn = 6.38

你可能感兴趣的:(qt,解释器模式)