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