Add expressions and variables
This commit is contained in:
parent
95186e8154
commit
921f9836b2
@ -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
60
public_html/js/Ast.js
Normal 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);
|
||||
};
|
Loading…
Reference in New Issue
Block a user