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