即使输入有额外的令牌,ANTLR 3.5.2也会匹配规则

时间:2016-06-13 17:49:32

标签: java parsing syntax antlr3

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

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

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

1 个答案:

答案 0 :(得分:2)

匹配输入的结尾:

SHOW DATABASES ';'

SHOW DATABASES EOF

你拥有它的方式,解析器不知道以后作为另一个语句的一部分不能“现在”。实际上,它在成功匹配规则时会停止,如果不需要则甚至不会查看下一个令牌。