【问题标题】:Compiler actively reducing compile errors in code?编译器主动减少代码中的编译错误?
【发布时间】:2011-11-24 02:26:17
【问题描述】:

我这周刚开始上计算机科学课时想到了一些事情:

是否有编译器可以主动纠正代码中出现的编译错误(有效地减少/消除代码中的错误的反馈循环)?

在某些编程环境中,这是通过建议(例如,未知语法上的红色下划线、键入代码时自动完成)被动完成的,但是否有编译器主动执行此操作的示例(即直接重写代码)?

想到这个让我想到别的东西:

实现起来有多复杂?我想这是非常复杂的,因为它归结为分析代码和平衡精度(例如精确定位用户想要什么 - 提出问题并获得程序员反馈)和方便的通用性(例如确定“一般”用户想要什么并更改代码-然后程序员可以返回并更改代码以更具体地针对他们的任务)。这些都是粗略的想法,因为一个高度复杂、专注的程序涉及很多很多复杂的想法,它们的优先级并不总是很容易在代码中检测到(也很容易分析)。

作为一个极端的例子,可以分析一段无语法的代码,例如“绘制一个矩形”,然后根据程序员的输入(从程序员那里获得有关“在哪里绘制?”、“什么大小的矩形? ”,或“2d 或 3d 空间?”)可以编写程序(优先考虑精度而不是一般性)。或者,当发现关键字(“draw”、“rectangle”)时,可能会有用于创建代码的低级别默认值(优先考虑通用性而不是精度)。

【问题讨论】:

  • 听起来您是在讨论 IDE,而不是编译器。
  • 是的,我想它必须是一个 IDE 才能存在循环。
  • 我不希望我的编译器主动重写代码。失去控制。编译器试图过于聪明并做出错误选择的可能性。可能总是有几种不同的方法来修复错误,我不相信编译器能够解决它。 IDE 已经提供了一个“反馈循环”,它可以显示编译错误并提出修复建议(然后用户必须接受)。
  • 但是如果程序员更喜欢帮助而不是控制怎么办(即是编程新手/是一个年轻人)?我认为这就是我认为具有更多“动手”方法的 IDE 的那种程序员。
  • 一个建议更正的IDE是可以的(我认为他们中的一些人会这样做)。进行更正以响应鼠标点击可能会很方便。在没有明确许可的情况下进行更正不是我希望开发系统做的事情。

标签: compiler-construction analysis autocorrect


【解决方案1】:

大多数编译器在解析时会尝试进行某种程度的语法修复,但只是为了不针对一个错误报告 100 个语法错误。然而,猜测程序员的意图并在这样的过程之后给他们一个工作的可执行程序是充满危险的。

【讨论】:

    【解决方案2】:

    它是在 1973 年完成的。康奈尔大学的几位计算机科学研究人员为 PL/I 语言设计了一个编译器,名为 PL/C。它旨在作为一个教学系统,并将每个程序编译为语法正确且可以编译和执行的东西。它会反复重写或删除无效语句,直到它们能够正确编译。在1977 technical report 中描述了他们工作的后来更类似于 IDE 的版本。

    【讨论】:

    • 非常迷人 - 非常感谢你,罗斯!我会研究报告,看看他们是如何处理的。
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多