从Shunting Yard到Pratt解析的进阶之路
Writing about pratt parsing so I remember it
我因为无聊想写一个C表达式解析器,最终决定深入探索Pratt parsing。虽然传统的龙书和计算机课程很少提及它,但它在编译器开发中非常实用。文章对比了Shunting Yard算法和Pratt parsing,解释了如何通过将显式栈转换为调用栈来简化递归逻辑。通过C语言代码示例,展示了如何轻松处理括号、一元运算符等复杂情况,让解析器的扩展变得既简单又优雅。
当遇到结合力较低的中缀或后缀运算符时,在Shunting Yard算法中弹出栈的操作,等同于在Pratt解析器中从递归调用返回。