gpt4 book ai didi

c++ - 带有错误位置的编译器运行时错误报告

转载 作者:行者123 更新时间:2023-11-28 06:52:02 26 4
gpt4 key购买 nike

我正在用 C++(Ubuntu 12.04。带有 gcc)编写编译器。到目前为止,具有相当精确的错误/警告位置行号和列号的累积错误/警告报告工作正常。

我的项目目标包括简单地学习如何执行此操作,因此我添加了一个预处理阶段(在第一步中只做最少的事情,如字符串连接、注释删除等),创建一个生成的 tmp 文件。在这一点上没有必要,因为我可以在解析时连接我的词法分析器中的字符串,并且词法分析器已经可以很好地处理注释,但我想了解如何尽可能高效和优雅地处理它。

编译时错误并不难:
(1) 进行错误检查(-> 报告编译时错误)
(2) 如果没有错误,预处理-> tmp文件
(3) 对 tmp 文件运行解析器等(编译时无错误)

但是,我还报告了带有行号的运行时错误(例如,对于数组越界检查具有整数表达式边界的数组)。由于仅在解析 tmp 文件时错误检查将添加到我的 IR 的字节码中,并且该文件可能与源文件有很大不同(特别是如果我们开始允许粘贴头文件,比如说),如何地球你能合理地报告有用的错误位置吗? gcc 是否有一个标准的技巧来处理这个问题?提到的绑定(bind)检查类型当然不会发生在 C 中;但是运行时错误报告适用于 C++ 层次结构中指针的动态解析,gcc 可以很好地获取行号。

最佳答案

您可以在预处理器生成的临时文件中记录行号信息,例如Line Controlcpp

The C preprocessor informs the C compiler of the location in your source code where each token came from. Presently, this is just the file name and line number.

关于c++ - 带有错误位置的编译器运行时错误报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com