2016-06-13 86 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

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