0

私は C# で解釈されたプログラミング言語を作成しています (ちょっとしたことで、楽しんでコンパイラについて学ぶこと以外に本当の目的はありません)、問題に遭遇しました。私の字句解析器では、トークンが元のファイルのどこにあったかを覚えており、より有用なデバッグ エラーが得られます。この「TokenPosition」オブジェクトを保持し、プログラムがコンパイル手順を実行するときにコピーして、解釈されたコードを実行する同じオブジェクトになるまでコピーします (たとえば、名前付き変数の「Identifier」クラスには TokenPosition メンバーがあります)。

私の質問: 例外がスローされた場合、スタックを調べて、TokenPosition メンバーを持つ最上位のオブジェクトを見つけ、その場所を出力します。または、より一般的には、「例外後にスタック上にある/あったオブジェクトを取得するにはどうすればよいですか?これは可能ですか?」(TokenPositionオブジェクトがあるかどうかを確認できます/簡単に取得できます。その方法は尋ねていません)

やりたくない最後の手段: ビヘイビアへのすべての呼び出し (これは大量に発生します) は、静的な tokenPosition 変数を this.tokenPosition のどこかに割り当てます。また、すべてを try/catch で囲むこともできますが、これもやりたくありません。

4

1 に答える 1

2

メソッドのパラメーターは一時的です。それらは、ライブでなくなったときにローカル変数によって上書きされるか、JIT コンパイラによって未使用として最適化されるか、メソッドの実行中にガベージ コレクションが行われることさえあります。usingこの情報を自分で追跡する必要があります。たとえば、句によって自動的に巻き戻される「現在アクティブなオブジェクト」用に別のスタック データ構造を用意する必要があります。

于 2012-08-07T13:56:16.157 に答える