私はいくつかのantlr lexingに問題があります。ルール付きのトークンを追加しました:
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 トークンの正規表現にスペースが含まれていません...