战胜左递归:一个C++反汇编器的语法修正之旅

2025-02-02

本文讲述了作者在重写RizinOrg的C++反汇编器rz-libdemangle的过程中,如何解决上下文无关文法(CFG)中左递归和互斥左递归的问题。文章首先解释了左递归和互斥左递归的概念,并通过简单的例子和状态图演示了如何将左递归文法转换为右递归文法,避免无限递归。随后,作者分享了其在Itanium ABI反汇编器中遇到的实际问题,展示了复杂的左递归和互斥左递归的语法,以及如何使用宏定义和巧妙的语法转换来解决这些问题,最终避免了栈溢出错误。

开发 左递归