私は C# で解釈されたプログラミング言語を作成しています (ちょっとしたことで、楽しんでコンパイラについて学ぶこと以外に本当の目的はありません)、問題に遭遇しました。私の字句解析器では、トークンが元のファイルのどこにあったかを覚えており、より有用なデバッグ エラーが得られます。この「TokenPosition」オブジェクトを保持し、プログラムがコンパイル手順を実行するときにコピーして、解釈されたコードを実行する同じオブジェクトになるまでコピーします (たとえば、名前付き変数の「Identifier」クラスには TokenPosition メンバーがあります)。
私の質問: 例外がスローされた場合、スタックを調べて、TokenPosition メンバーを持つ最上位のオブジェクトを見つけ、その場所を出力します。または、より一般的には、「例外後にスタック上にある/あったオブジェクトを取得するにはどうすればよいですか?これは可能ですか?」(TokenPositionオブジェクトがあるかどうかを確認できます/簡単に取得できます。その方法は尋ねていません)
やりたくない最後の手段: ビヘイビアへのすべての呼び出し (これは大量に発生します) は、静的な tokenPosition 変数を this.tokenPosition のどこかに割り当てます。また、すべてを try/catch で囲むこともできますが、これもやりたくありません。