1

我为我的解释器项目创建了一个词法分析器和一个解析器。

我有一个关于如何实现错误处理的问题。

目前,我在发现第一个错误后停止词法分析器/解析器并将其显示在控制台上。

但我不确定这是否正确。所以我想问哪个是更好的做法:

  1. 发现第一个错误时停止扫描仪/解析器并将其显示在控制台上。

  2. 编译所有错误并在扫描/解析完成后全部显示。

非常感谢你。

4

1 回答 1

1

如果您设法做得相当好,您的用户将更加欣赏策略(2)。在一次编辑中修复一堆错误比为每个语法错误循环检查/编辑/检查/编辑/检查/编辑要快得多。

但是,从您的角度来看,在检测到错误后恢复解析要困难得多。您需要弄清楚(或更准确地说,猜测)如何修复您检测到的语法错误,以便忽略它并继续解析。如果你猜错了,你最终可能会创建很多无用的语法错误报告。

大多数常用的解释器在检测到第一个错误时停止,而大多数常用的编译器会尝试继续(尽管并非所有编译器都做得特别好),并且只有在达到某个阈值时才会失败。

以我的经验,一个能够很好地处理编译时错误的语言实现与其他用于分析和解析语法正确的程序的代码相比,具有更多或更多的代码,用于创建良好的错误消息和从语法错误中恢复。但是,一如既往,YMMV。

于 2013-09-30T17:28:51.493 回答