递归下降分析

递归下降分析算法,也称为预测分析

优点:

1).分析高效(线性时间)
2).容易实现(方便手工编码)
3).错误定位和诊断信息准确
4).被很多开源和商业的编译器所采用(如GCC 4.0, LLVM,。。。)

算法基本思想:

1).每个非终结符构造一个分析函数
2).用前看符号指导产生式规则的选择

————————————————————————————————————————————

伪代码:

这里写图片描述

parse_S()
    parse_N()
    parse_V()
    parse_N()
parse_N()
    token = tokens[i++]
    if (token==s||token==t||token==g||token==w)
        return;
    else
        error(“…”);
parse_V()
    token = tokens[i++]
    …// leave this part to you

summary:采用了“分治”思想
这里写图片描述

这里写图片描述

————————————————————————————————————————————

一般的算法框架:

这里写图片描述

这里写图片描述

parse_X()
    token = nextToken()
    switch(token)
    case …: // β 11 … β 1i
    case …: // β 21 … β 2j
    case …: // β 31 … β 3kdefault: error (“…”);

————————————————————————————————————————————

对算术表达式的递归下降分析:

这里写图片描述

// a first try
parse_E()
    token = tokens[i++]
    if (token==num)
        ? // E+T or T
    else error(“…”);
//this is a problem

这里写图片描述

// a second try
parse_E()
    parse_T()
    token = tokens[i++]
    while (token == +)
        parse_T()
        token = tokens[i++]

parse_T()
    parse_F()
    token = tokens[i++]
    while (token == *)
        parse_F()
        token = tokens[i++]

这里写图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值