代码之家  ›  专栏  ›  技术社区  ›  user2408664

词汇和语法错误

  •  1
  • user2408664  · 技术社区  · 12 年前

    我已经为我的解释器项目创建了一个lexer和一个解析器。

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

    目前,我在发现第一个错误后停止lexer/parser,并将其显示在控制台上。

    但我不确定这是否正确。因此,我想问一下哪种做法更好:

    1. 只要发现第一个错误,就停止扫描仪/解析器,并在控制台上显示。

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

    非常感谢你。

    1 回复  |  直到 11 年前
        1
  •  1
  •   rici    12 年前

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

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

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

    根据我的经验,一种能很好地处理编译时错误的语言实现,其用于创建好的错误消息和从语法错误中恢复的代码数量与其他用于词法分析和解析语法正确程序的代码数量一样多。但是,和往常一样,YMMV。