34 lines
892 B
C
34 lines
892 B
C
|
|
#ifndef DSLENGINE_H
|
||
|
|
#define DSLENGINE_H
|
||
|
|
|
||
|
|
#include "interpreter.h"
|
||
|
|
|
||
|
|
struct MatchResult {
|
||
|
|
bool ok = false;
|
||
|
|
QString typeName;
|
||
|
|
QString error; // parse/criteria error
|
||
|
|
QString failReason;// require returned false
|
||
|
|
};
|
||
|
|
|
||
|
|
class DslEngine {
|
||
|
|
public:
|
||
|
|
DslEngine() = default;
|
||
|
|
|
||
|
|
// Compile script text into a module
|
||
|
|
Module compile(const QString& scriptText);
|
||
|
|
|
||
|
|
// Compile + run a type on a QIODevice
|
||
|
|
QVariantMap parse(const QString& scriptText, const QString& typeName, QIODevice* dev);
|
||
|
|
|
||
|
|
// Reuse compiled module
|
||
|
|
QVariantMap parse(const Module& mod, const QString& typeName, QIODevice* dev);
|
||
|
|
|
||
|
|
MatchResult matchType(QIODevice& dev, const QString& typeName) const;
|
||
|
|
MatchResult matchAny(QIODevice& dev, const QStringList& candidates) const;
|
||
|
|
|
||
|
|
bool parseType(QIODevice& dev, const QString& typeName, QVariantMap& outTree) const;
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
#endif // DSLENGINE_H
|