RpyPlayerWeb/public_html/js/Ast.js
2015-12-07 17:11:11 +02:00

60 lines
2.0 KiB
JavaScript

Operator = {
ADD : function (leftVal, rightVal) { return leftVal + rightVal; },
SUBTRACT : function (leftVal, rightVal) { return leftVal - rightVal; },
MULTIPLY : function (leftVal, rightVal) { return leftVal * rightVal; },
DIVIDE : function (leftVal, rightVal) { return leftVal / rightVal; },
EQUALS : function (leftVal, rightVal) { return (leftVal == rightVal) ? 1 : 0; },
NOTEQUALS : function (leftVal, rightVal) { return (leftVal != rightVal) ? 1 : 0; },
GT : function (leftVal, rightVal) { return (leftVal > rightVal) ? 1 : 0; },
LT : function (leftVal, rightVal) { return (leftVal < rightVal) ? 1 : 0; },
GTEQ : function (leftVal, rightVal) { return (leftVal >= rightVal) ? 1 : 0; },
LTEQ : function (leftVal, rightVal) { return (leftVal <= rightVal) ? 1 : 0; },
BOOLEAN_OR : function (leftVal, rightVal) { ((leftVal != 0) || (rightVal != 0)) ? 1 : 0; },
BOOLEAN_AND : function (leftVal, rightVal) { ((leftVal != 0) && (rightVal != 0)) ? 1 : 0; }
};
function VariablesHolder() {
this.variables = {};
}
VariablesHolder.prototype.init = function () {
this.variables = {
"True": 1,
"False": 0
};
};
VariablesHolder.prototype.getVariable = function (name) {
if (name in this.variables) {
return this.variables[name];
}
return 0;
};
VariablesHolder.prototype.setVariable = function (name, value) {
this.variables[name] = value;
};
Variables = new VariablesHolder();
function BinaryExpression(op, left, right) {
this.op = op;
this.left = left;
this.right = right;
}
BinaryExpression.prototype.eval = function () {
return this.op(this.left.eval(), this.right.eval());
};
function ValueExpression(value) {
this.value = value;
}
ValueExpression.prototype.eval = function () {
return this.value;
};
function VariableExpression(variable) {
this.variable = variable;
}
VariableExpression.prototype.eval = function () {
return Variables.getVariable(this.variable);
};