レス遅くなってすみません。
みなさんレスありがとうございます。
個人的に、>>407のロジックに興味を覚えました。シンプルですね。
論理式の評価の手順にそっくりです。

そんな>>407に質問なのですが、
「Xの解析に失敗したと分かる」ためには、どうすれば良いのでしょうか。
個人的に以下の案を考えたのですが、

  1:Xの解析に失敗したことによって生じる例外をキャッチする
  2:Expression#interpret() の返り値を論理値にして、
   解析に成功したら「真」、それ以外は「偽」を返すようにする

1は、別にこの処理はエラー処理ではないので、
例外の利用を前提とするのが大げさだと思います。
2は、既存のソースの大幅な改ざんが必要となる場合があります。

他に何か良い方法はありますでしょうか?