>>55
自分は名前空間を利用している
具体的には(Rubyで...)、トップレベルのモジュール名が M だとすれば、
その下にサブモジュール M::Exception を定義し、
このモジュールの内部で例外クラス群を定義する
例外クラスの命名は、ケースバイケースで適切だと思える具体的な名前にする

[例外クラスの例]
・M::Exception::SubclassResponsibility -- 具象クラスでメソッド未実装
・M::Exception::EmptyIdentifier -- 空の識別子
・M::Exception::CantRecognizeAsToken -- トークンとして認識できない
・M::Exception::SyntaxError -- 構文エラー

実際の参照では、EX = M::Exception とシノニム(同義語)を定義しておいて、
たとえば raise EX::SyntaxError みたいに書く