2016-06-13 92 views
0

我正在写一个语法来解析sql语句。我有以下规则:ANTLR 3.5.2匹配规则,即使输入有额外的令牌

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

当我输入show databases,我得到的消息。但是,当我的输入是show databases now时,我会看到消息。我正在构建REPL,并且所有行都以;结尾。由于语法错误,我想得到一个错误。有任何想法吗?

回答

2

匹配输入的结束还有:

SHOW DATABASES ';' 

SHOW DATABASES EOF 

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

+0

我刚刚编辑了这个问题,但我一次只读1行,所有行都以';'结尾。 –

+0

然后匹配分号,而不是'EOF'。 –

+0

工作正常!非常感谢你。 –