对一个解析树,如何遍历?
前序遍历(根左右),也即递归下降解析
将递归下降语法转换为伪代码,如图
这样我们就根据语法规则实现了递归下降算法。递归下降算法可能在解析完一个终结符就退出解析,而此时语句并未解析完,如对上面代码解析int+int,那么解析完第一个int就会卡住。
递归下降算法要注意避免出现语法左右存在相互递归的情况,如图
这时候要将左递归转化为右递归,即S->aS^
S^->aS^|空
再比如下图的重写递归
对一个解析树,如何遍历?
前序遍历(根左右),也即递归下降解析
将递归下降语法转换为伪代码,如图
这样我们就根据语法规则实现了递归下降算法。递归下降算法可能在解析完一个终结符就退出解析,而此时语句并未解析完,如对上面代码解析int+int,那么解析完第一个int就会卡住。
递归下降算法要注意避免出现语法左右存在相互递归的情况,如图
这时候要将左递归转化为右递归,即S->aS^
S^->aS^|空
再比如下图的重写递归