2013-10-06 23 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

相关问题