改进ANTLR DSL解析错误消息

Dan*_*ich 6 error-handling dsl antlr

我正在为非程序员开发特定于域的语言(DSL).非程序员犯了很多语法错误:他们拼错了关键字,他们没有关闭括号,他们没有终止块,等等.

我正在使用ANTLR生成我的解析器; 它为处理RecognitionExceptions提供了一个很好的机制来改进错误处理.但我发现很难为我的DSL开发好的错误处理代码.

在这一点上,我正在考虑简化语言的方法,以便我更容易为用户提供高质量的错误消息,但我不确定如何解决这个问题.我想我想以某种方式减少错误的模糊性,但我不确定如何在语法中实现这个想法.

我可以通过哪些方式简化语言以改善用户的解析错误消息?

编辑:更新以澄清我对如何简化我的语言感兴趣,而不仅仅是ANTLR错误处理技巧.(虽然,谢谢你!)

per*_*iae 0

我最近读了一篇文章,介绍了一个人为他的解析器实现了一个简单的学习机制。基本上,这个想法是标记 ANTLR 为您提供的解析错误以及错误的实际原因。例如,

错误:NilClass 没有方法“bar”:foo

可以标记为:

错误:尝试在 foo 上调用“bar”,但 foo 没有值。

这个想法实际上来自 2003 年的一篇论文:Generate LR Syntax Error Messages from ExamplesResearch!rsc博客也对此进行了讨论。