这是关于解释自定义脚本代码。
它在实践中的工作原理很容易通过使用对象来解释,但如果没有它们则更加困难。如果没有对象,您将需要一个能够存储谓词的自定义结构,我将给您一个简单的示例,以稍微清楚一点:
union Expression {
char type;
int number;
};
int expressionValue(const Point &curPt, const Expression &exp) {
if (type == TYPE_NUMBER) return exp.number;
else if (type == TYPE_X) return curPt.x;
else if (type == TYPE_Y) return curPT.y;
};
这样你就有了一个联合,它可以为你的表达式存储任意类型的值,可能是原始数字或当前点的坐标。
struct Comparison {
Expression exp1;
Expression exp2;
char type;
};
bool evaluateComparison(const Point &curPt, const Comparison &comp) {
int v1 = expressionValue(pt, exp1);
int v2 = expressionValue(pt, exp2);
if (type == '=') return v1 == v2;
else if (type == '<') return v1 < v2;
// so on
}
现在您有了一个能够存储单个比较的数据类型,您需要一种存储谓词的方法:
struct Predicate {
char type;
Comparison comp1;
Comparison comp2;
};
bool evaluatePredicate(const Point &curPt, const Predicate &pred) {
if (pred.type == TYPE_OR) return evaluateComparison(curPt, comp1) || evaluateComparison(curPt, comp2);
// oothers
};
当然,您可以计划所需的任何类型的表达式或谓词(可能是 n 元 AND 或 OR)。
您最后需要的是一个简单的词法分析器和解析器,将您的输入转换为谓词,然后您对您的观点进行评估,然后就完成了。