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表達式空間...
哦,太棒了。非常感謝。我不相信我沒有注意到這一點。 – Sanuuu