Skip to content

Instantly share code, notes, and snippets.

@mota57
Last active September 6, 2021 16:57
Show Gist options
  • Save mota57/a45da46df6b7f71f8497cad5aa21d5b8 to your computer and use it in GitHub Desktop.
Save mota57/a45da46df6b7f71f8497cad5aa21d5b8 to your computer and use it in GitHub Desktop.
simple javascript calculator
var PlainCalculator = (function() {
const ExpressionSide = {
LEFT: 0,
RIGHT:2
};
const ExpressionType = {
NUMBER: 0,
OPERAND: 1,
}
function ExpressionContent(val, type) {
this.val = val;
this.type = type;
}
function ExpressionMath(left,middle,right, next) {
this.left = left;
this.middle = middle;
this.right = right;
this.next = next;
}
function BuildTree(mathExpression)
{
var mathExpArray = mathExpression.split('');
var expContent = new ExpressionContent(null, null);
for(var i = 0; i < mathExpArray.length; i++)
{
var val = mathExpArray[i];
var expSide = ExpressionSide.LEFT;
if(expType === ExpressionSide.LEFT && isNumber(val)){
expContent.val = val;
expContent.
} else if(isNull(operator) && isOperator(val))
{
} else if(expType === ExpressionSide.RIGHT && isNumber(val)){
} else {
throw new Exception("ERROR NOT ABLE TO PROCESS");
}
}
}
function ProcessExpression(mathExpression) {
var total = 0;
var mathExpArray = mathExpression.split('');
var left = '', operator = null, right ='';
var expType = ExpressionSide.LEFT;
for(var i = 0; i < mathExpArray.length; i++)
{
var val = mathExpArray[i];
if(expType === ExpressionSide.LEFT && isNumber(val)){
left += val;
} else if(isNull(operator) && isOperator(val))
{
operator = val;
expType = ExpressionSide.RIGHT;
} else if(expType === ExpressionSide.RIGHT && isNumber(val)){
right += val;
} else {
throw new Exception("ERROR NOT ABLE TO PROCESS");
}
// left OPERAND right
/*
if(isNumber(left) === true && isNumber(right) === true && isOperator(operator) === true)
{
total = doMath(left, operator, right);
expType = ExpressionSide.LEFT;
left = '';
operator = null;
right = '';
}
*/
}
return left;
}
function isNumber(val){
return !isNull(val) && val !== "" && !isNaN(val);
}
function isNull(val){
return val === null;
}
function isOperator(op){
var is = false;
switch(op){
case '+':
case '-':
case '/':
is = true;
break;
}
return is;
}
function doMath(l, op, r){
console.log(l, op, r);
if(op === '+'){
return Number(l) + Number(r);
}
if(op === '-') {
return Number(l) - Number(r);
}
if(op === '/') {
return Number(l) / Number(r);
}
throw new Exception(' no operator to apply');
}
return {
'buildTree': buildTree,
'evaluate': ProcessExpression
}
})();
/*EXAMPLE */
PlainCalculator.evaluate('3+3'); //->9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment