let tokens=[2 ,'+' ,3 , '+' ,4, '*', 5 ,'+',6,'*',10]
let pos=0;
function t(){
return tokens[pos]
}
function isOperator(char) {
return ['+', '-', '*', '/'].indexOf(char) != -1;
}
function isParen(char) {
return ['(', ')'].indexOf(char) != -1;
}
function isNumber1(char) {
return /^\d+$/.test(char);
}
function isNumber(obj) {
return obj === +obj
}
function isString(obj) {
return obj === obj+''
}
function factor(){
if(isNumber(t())){
let a=t()
pos++
return a
}
return expr()
}
function term(){
let a=factor()
if(t()=='*'){
pos++
a={type:"mul",
left:a,
right:term()}
}
return a;
}
function expr(){
let a=term()
if(t()=='+'){
pos++
a={type:"add",
left:a,
right:expr()}
}
return a
}
function eval(node){
if(!isNumber(node)){
switch(node.type){
case 'add': return eval(node.left)+eval(node.right)
case "mul": return eval(node.left) * eval(node.right)
}
}
return node
}
console.log(tokens)
console.log(JSON.stringify(expr(),null,2))
pos=0;
console.log(eval(expr()))
网友评论