我正在用 C# 创建一种解释性编程语言(有点像 lulz,除了玩得开心和了解编译器之外没有真正的目的),但遇到了问题。在我的词法分析器中,我记得令牌在原始文件中的位置,以提供更有用的调试错误。我保留这个“TokenPosition”对象,在程序通过编译步骤时将其复制,直到它结束在运行解释代码的同一个对象中(例如,我的命名变量的“标识符”类有一个 TokenPosition 成员)。
我的问题:如果抛出异常,我想查看堆栈,找到具有 TokenPosition 成员的最顶层对象,并打印其位置。或者,更一般地说,“我如何在异常发生后获取堆栈中的对象?这甚至可能吗?” (我可以检查它是否有一个 TokenPosition 对象/很容易得到它,我不是在问怎么做)
我不想做的最后手段:每次调用行为(经常发生)都会在 this.tokenPosition 的某处分配一个静态 tokenPosition 变量。我也可以用 try/catchs 包围一切,但同样,我真的不想这样做。