Parsing 词汇和语法错误

Parsing 词汇和语法错误,parsing,syntax-error,lexer,Parsing,Syntax Error,Lexer,我已经为我的解释器项目创建了一个lexer和一个解析器 我有一个关于如何实现错误处理的问题 目前,我在发现第一个错误并在控制台上显示后停止lexer/parser 但我不确定这是否正确。因此,我想问,哪种做法更好: 在发现第一个错误时停止扫描仪/解析器,并在控制台上显示它 编译所有错误并在扫描/解析完成后全部显示 非常感谢。如果您能够将策略2做得相当好,您的用户将更加欣赏它。在一次编辑中修复一系列错误要比循环检查/编辑/检查/编辑/检查/编辑每个语法错误要快得多 但是,从您的角度来看,在检测到错

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

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

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

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

在发现第一个错误时停止扫描仪/解析器,并在控制台上显示它

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


非常感谢。

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

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

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

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