从Antlr4侦听器生成特定的警告/错误消息

从Antlr4侦听器生成特定的警告/错误消息,antlr4,Antlr4,我使用Antlr4来标记和解析遗留语言,我的最终目标是生成C#代码,并在模拟执行遗留语言的物理硬件的运行时环境中执行该代码 模拟器和代码生成工作得很好 我想从侦听器生成特定的错误消息或警告消息,这可能吗 例如,语言允许一行以分号结尾或不以分号结尾,如果一行缺少分号,我想发出警告 我有很多类似的场景,语言和物理硬件有很多奇怪的特性 谢谢, Gregg更好的方法可能是从解析器发出警告。在解析器的构造中,有两种方法: parser.addErrorListener(new YourErrorListe

我使用Antlr4来标记和解析遗留语言,我的最终目标是生成C#代码,并在模拟执行遗留语言的物理硬件的运行时环境中执行该代码

模拟器和代码生成工作得很好

我想从侦听器生成特定的错误消息或警告消息,这可能吗

例如,语言允许一行以分号结尾或不以分号结尾,如果一行缺少分号,我想发出警告

我有很多类似的场景,语言和物理硬件有很多奇怪的特性

谢谢,
Gregg

更好的方法可能是从解析器发出警告。在解析器的构造中,有两种方法:

parser.addErrorListener(new YourErrorListener());
parser.setErrorHandler(new YourParserErrorStrategy());

错误侦听器允许。错误策略控制解析器的方式:与令牌流重新同步或有效插入“缺少”的令牌。

您建议我在行的末尾要求一个“;”。如果该行缺少分号,我将添加分号并发出自定义错误消息。我将尝试一下。如果分号(或其他“奇怪”的环境标记)的出现使解析树的后续分析更容易/更规则,那么将其设置为非可选(猜测这就是您所说的需求),并在缺少时添加它。也可以采取另一种方式:跳过额外的/意外的令牌,这取决于ErrorStrategy是否确定它们是重要的——它可以发出警告、修复或保留。