左再帰の克服:C++デマングラーの文法修正
2025-02-02
この記事では、RizinOrgのC++デマングラーであるrz-libdemangleを書き直す際に、コンテキストフリー文法(CFG)における左再帰と相互左再帰の問題を解決した過程を詳述しています。左再帰と相互左再帰の概念を説明し、簡単な例と状態図を用いて、左再帰的な文法を右再帰的な文法に変換し、無限再帰を防ぐ方法を示しています。その後、Itanium ABIデマングラーで遭遇した現実の問題を紹介し、左再帰と相互左再帰を持つ複雑な文法と、マクロと巧妙な文法変換を用いてこれらの問題を解決し、スタックオーバーフローエラーを防いだ方法を示しています。
開発
左再帰