2013-10-06 59 views
0

我遇到了一些反棘手問題。我添加了一個令牌的規則:爲什麼在找到的令牌(antlr)中出現空白空間?

NUMBER : [0-9]+.?[0-9]*; 
WHITESPACE : [ \t\r\n]+ -> skip ; 

我測試使用JUnit我的程序,如果我使用下面的代碼:

@Test 
public void testWhiteSpaces() { 
    verifyLexer(" \n7 \t", new String[] {"7"}); 
} 

public void verifyLexer(String input, String[] expectedTokens) { 
    CharStream stream = new ANTLRInputStream(input); 
    ExpressionLexer lexer = new ExpressionLexer(stream); 
    lexer.reportErrorsAsExceptions(); 
    List<? extends Token> actualTokens = lexer.getAllTokens(); 

    assertEquals(expectedTokens.length, actualTokens.size()); 

    for(int i = 0; i < actualTokens.size(); i++) { 
     String actualToken = actualTokens.get(i).getText(); 
     String expectedToken = expectedTokens[i]; 
     System.out.println(actualToken + "?"); 
     assertEquals(actualToken, expectedToken); 
    } 

JUnit測試失敗,它說,該令牌,它發現是「7」而不是「7」我正在瞄準。怎麼來的?沒有參與我的NUMBER標記reg表達式空間...

回答

2

我想你忘記了逃跑的正則表達式的點:

[0-9]+\.?[0-9]* 

一個點是一個特殊的字符匹配任何內容。你的情況中的空白空間。

+0

哦,太棒了。非常感謝。我不相信我沒有注意到這一點。 – Sanuuu

相關問題