我是Antlr的新手。我正在尝试实现一个CSS解析器。首先,我使用this语法来生成解析器。我关注this tutorial作为指导。我使用Antlr 3.4在C#中生成代码(接下来,我将使用Antlr 4.0进行尝试)。
我面临几个问题,我无法在互联网上找到资源,以便我能清楚地理解它们。
我遇到的问题:
生成不同类型的自定义错误消息(错误,警告)。这是在Antlr中提供的吗?请提供一些资源,以了解如何实现这一目标。
在我关注的教程中,我能够捕获解析和lexing中的异常。但是在我尝试的语法中,即使我已经添加了以下代码并在错误的CSS内容上进行了测试,我也没有给出任何错误。
partial class CSS3Lexer
{
public override void ReportError(RecognitionException e)
{
base.ReportError(e);
Console.WriteLine("Error in lexer at line " + e.Line + ":" + e.CharPositionInLine + e.Message);
}
}
我想将错误列表(解析器和词法分析器错误)收集到某种数据结构(错误类型,消息,位置的错误对象列表)中,以便我可以将它们用于另一种任务。有没有更有意义的方法来做到这一点。
我也希望得到关于我的方法的建议,因为我仍然无法达到更优雅的设计。
答案 0 :(得分:2)
ANTLR唯一的内置错误报告机制非常简单,并没有提供给特定错误提供错误类别或数字的方法。通常,在分析时发生的所有语法错误都会被赋予相同的错误编号。例如,ANTLR 4工具将解析器错误报告为错误50。
初始解析完成后,您有一个可用的解析树(ANTLR 4)或AST(ANTLR 3),您可以继续执行语义评估。从那里识别的错误可以被视为错误或警告,具体取决于它们的总体影响。您为此使用的数据结构有时是特定于应用程序的,例如Visual Studio或NetBeans扩展,它需要将错误/警告报告给特定的UI组件,但您可以自由地以任何对您有意义的方式进行定义。