From 921f9836b2c6cd728634891b8f3f61774853d2b3 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 7 Dec 2015 17:10:00 +0200 Subject: [PATCH] Add expressions and variables --- public_html/index.html | 2 +- public_html/js/Ast.js | 60 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 public_html/js/Ast.js diff --git a/public_html/index.html b/public_html/index.html index 91d9e72..39d948d 100644 --- a/public_html/index.html +++ b/public_html/index.html @@ -11,6 +11,7 @@ + @@ -25,7 +26,6 @@
-
Вернуться на главную
diff --git a/public_html/js/Ast.js b/public_html/js/Ast.js new file mode 100644 index 0000000..b5a4425 --- /dev/null +++ b/public_html/js/Ast.js @@ -0,0 +1,60 @@ +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); +}; \ No newline at end of file