TDOP自顶向下算符优先语法分析的一个小例子

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,这样就可以从左到右分析到底了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值