TDOP (Top Down Operation Precedence)语法分析技术
自顶向下算符优先语法分析技术采用自顶向下规约且通过一遍扫描得到一棵语法分析树。
我们可以给运算符不同的绑定权值(bind power)来确定操作数是先和哪个操作符运算,权值分为左权值lbp和右权值rbp,权值越大就需要越先运算,比如* / 比+ - 先运算,反应到语法分析树上就是* / 为根节点的树通常是+ - 为根的树的子树。
一个简单的例子
分析输入串 1+2*3 的过程
var expression = function(rbp){
var left; //表示下一个操作符左边的操作数
var t = token;
advance(); //读入下一个token
left = t.nud(); //将t的字面量读入left中
while(rbp < token.lbp){
t = token;
advance();
left = t.led(left);
}
return left; //返回的就是一棵树了
}
symbol("+", 50).led = function(left){
this.first = left;
this.second = expression(50);
this.arity = "binary";
return this;
}
symbol("*", 60).led = function(left){
this.first = left;
this.second = expression(60);
this.arity = "binary";
return this;
}
分析过程如下
刚开始调用expression的时候需要给定形参为0,这样就可以从左到右分析到底了。