美文网首页
递归下降 四则计算

递归下降 四则计算

作者: onedam | 来源:发表于2022-05-31 23:28 被阅读0次
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()))


相关文章

网友评论

      本文标题:递归下降 四则计算

      本文链接:https://www.haomeiwen.com/subject/egmtmrtx.html