ANTLR4 中的生产问题 - 无法识别多个输入

Problem with production in ANTLR4-can't recognize multiple inputs

我有关于 ANTLR4 及其语法(产品)的问题。

注意:我不会详细介绍示例,因为我的疑问是技术性的。

我有以下作品:

prog
 : stat '.'+
 ;

stat
 : word+
 ;

word
 : WORD1
 | WORD2
 ;

WORD1 : some regular expression
WORD2 : some regular expression
WS    : [ \t\r\n]+ -> skip;

所以,我的语法必须识别以“.”分隔的多个句子。每个句子都有一个或多个单词(WORD1 或 WORD2)。另外,正如您看到的,当我出现 space、制表符或新行时,我必须跳过它们。所以我的问题是这个语法只识别第一句并打印我在统计生产完成时给出的一些词。但它不会继续其他句子。我不明白为什么因为对于 main rule(prog) 我们有 stat'.'+。 如果有人能帮我解决这个问题,将不胜感激。

prog : stat '.'+; 的意思是:匹配单个 stat,后跟一个或多个 '.'。你可能想要什么:

prog : (stat '.')+;

解析器不使用所有标记(或尝试这样做)的事实是因为您没有使用 EOF 标记“锚定”您的 start-production。试试这个:

prog : (stat '.')+ EOF;

这将强制 ANTLR 消耗所有令牌(或者当它不能消耗所有令牌时产生错误)。