0

私はいくつかの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 トークンの正規表現にスペースが含まれていません...

4

1 に答える 1

2

正規表現でドットをエスケープするのを忘れたと思います:

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

ドットは、何にでも一致する特別な文字です。あなたの場合の空白。

于 2013-10-06T07:25:37.310 に答える