Add expressions and variables

This commit is contained in:
Victor 2015-12-07 17:10:00 +02:00
parent 95186e8154
commit 921f9836b2
2 changed files with 61 additions and 1 deletions

View File

@ -11,6 +11,7 @@
<script src="js/TokenType.js"></script>
<script src="js/Token.js"></script>
<script src="js/Lexer.js"></script>
<script src="js/Ast.js"></script>
<script src="js/Parser.js"></script>
<script src="js/Views.js"></script>
<script src="js/Main.js"></script>
@ -25,7 +26,6 @@
<div id="textAuthor"></div>
<div id="textContent"></div>
</div>
<div id="finish"><a href="/">Вернуться на главную</a></div>
</div>
</body>
</html>

60
public_html/js/Ast.js Normal file
View File

@ -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);
};