ANTLR 3.5.2 匹配规则,即使输入有额外的标记

ANTLR 3.5.2 matches rule even though input has extra tokens

我正在编写语法来解析 sql 语句。我有以下规则:

show_databases :
    SHOW DATABASES { System.out.println("Showing databases");    
;

当我输入 show databases 时,我收到消息。但是,当我输入 show databases now 时,我确实看到了消息。我正在构建一个 REPL,所有行都以 ; 结尾。我想得到一个错误,因为语法错误。有什么想法吗?

也匹配输入的结尾:

SHOW DATABASES ';'

SHOW DATABASES EOF

按照你的方式,解析器不知道后面不能有 "now" 作为另一条语句的一部分。事实上,它会在成功匹配规则时停止,如果不需要,甚至不会查看下一个标记。