微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在口译员中报告错误?

如何解决如何在口译员中报告错误?

出于学习目的,我正在用 C++ 编写算术方程的解释器。当用户输入不正确的输入时,我希望出现这样的内容:(> 是用户输入)

> 4+2*6+#-1
Lexer error: incorrect character '#' at position 7

解决这个问题的最佳方法是什么?我应该使用异常,如果是,那么我应该创建自己的异常还是只使用类似 std::runtime_error 的东西?

解决方法

诀窍是在所有编译过程中一直维护源位置数据。这样你就可以举报了

  • 语法错误,这是最微不足道的,在此阶段您可以方便地获取所有源位置数据,以及(取决于您使用的解析技术)提示您希望对此做什么点代替。很多这样的报告可以在很少提示的情况下自动推断出来。

  • 编译期间的语义错误:对于这些,您需要保留 IR 节点的源位置。例如,对于二元算术运算,您将拥有运算符本身的位置,并且子节点将能够向您显示左侧和右侧的位置。您可以在此处携带多少信息没有限制。例如,对于任何完全解析的标识符,您可能希望附加一个声明它的位置,以及迄今为止引用它的所有位置。

  • 运行时错误:这些很棘手,在此阶段您没有丰富的 IR,但您可以以 DWARF 格式等方式发出调试数据,并在需要时将其展开回源位置。

运行时错误应该由您的系统调试器处理,因此,这里没有例外。语义错误和语法错误在大多数情况下是可以恢复的,而且您可能希望显示多个,因此再次强调,没有理由使用异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。