您的位置:首页 > 其它

递归下降分析

2017-05-12 12:58 120 查看

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

优点:

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 … β 3k
…
default: 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++]


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: