自顶向下的实现方式之一递归下降的语法分析
前面已经说过了自顶向下的语法分析是什么,这篇博客,聊一下用递归的方式实现自顶向下的语法分析。
先给出伪代码:
A(){
选定A的一个产生式A→X1 X2 X3 ... Xk
for(i = 1 to k){ //遍历产生式右部
if(Xi是一个非终结符号){
调用Xi();
}else if(Xi是一个终结符号 && Xi与扫描指针指向的字符相同){
扫描指针后移;
}else{
error(语法错误)
}
}
}
这个函数就表示了非终结符号A的最左推导过程,但是这段伪代码还没有完善,但是大致的框架已经搭建了起来。
√ 需要回溯的递归下降语法分析
修改一开始给出的伪代码:
A(){
ptr = inputBufferPtr; //记录扫描指针的位置,方便回溯
for(遍历A的所有产生式){
//外层循环每次选择一个产生式A→X1 X2 X3...Xk
for(i = 1 to k){
if(Xi是一个非终结符号){
调用Xi();