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()))
递归下降 四则计算
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 本系列为个人编译原理学习笔记,谬误之处恳请高人指点,感激不尽! 内容整理自西安电子科技大学 王小兵、张南老师的编译...
- 递归调用 先拷贝一下百科上递归调用的定义啊: 递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后...
- 一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递...
- 【实验名称】 带属性文法的递归下降子程序 【实验目的】 实现该文法的递归下降子程序 “ 属性文法把二进制无符号定点...