【发布时间】:2015-11-14 13:17:46
【问题描述】:
是否有任何已知方法可以为机器生成的解析器实现良好的错误处理? 这类问题是否存在“模式”或已知算法?
对于“好”,我的意思是类似于手工递归下降解析器和现代编译器可获得的结果: 解析器不会在第一个错误时停止,可以使解析器发出“有意义的”错误,而不仅仅是“xyz 行中无法识别的标记”一次错误。
理想情况下,这种方法也应该是自动化的,而不是 手工制作。
我不是在寻找一个库,我需要一种方法,它可以在不同的平台上使用,理想情况下应该尽可能独立于语言。
【问题讨论】:
-
这可能不是您想听到的,但最好还是自己编写解析器和词法分析器。这不是一项特别艰巨的任务(尤其是与编写语义分析器和代码生成器相比),并且在错误处理方面会产生最佳结果。但是不要相信我,相信第一个原生 C++ 编译器的作者和 D 编程语言的发明者 Walter Bright。他在 Dr.Dobbs here 上有一篇关于这方面的文章。 (错误恢复在第 2 页)
-
这正是我害怕听到的,没有实用的自动化方法是可能的。请将此添加为答案,即使我不喜欢答案,我也会投票,因为它很有用。据我了解,以我有限的经验,自动化工具对于分析机器生成的语法很有用,预计错误处理非常有限。例如:虚拟机反编译器、编码消息等。虽然我知道所有专业编译器都是手写的。
标签: parsing compiler-construction grammar