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

나는 방금 질문을 편집했으나 한 번에 한 줄씩 읽었으며 모든 줄은 ';'로 끝납니다. –

+0

그런 다음 'EOF'대신 세미콜론을 찾습니다. –

+0

그게 효과가! 고맙습니다. –