在这个问题:https://stackoverflow.com/a/28074334/5973816中,回答者说以下语法可以匹配以XYZ结尾的文本,并且不包含XYZ,但是我发现它不能,正确的语法应该是什么?
grammar UseLookahead;
parserRule : LexerRule;
LexerRule : .+? { (_input.LA(1) == 'X') &&
(_input.LA(2) == 'Y') &&
(_input.LA(3) == 'Z')
}?
;我在本地测试,发现‘’只匹配'B‘。
发布于 2022-02-14 09:19:29
当我用以下Java代码测试您的语法时:
String source = "Blah Blah XYZ";
UseLookaheadLexer lexer = new UseLookaheadLexer(CharStreams.fromString(source));
CommonTokenStream stream = new CommonTokenStream(lexer);
stream.fill();
for (Token t : stream.getTokens()) {
System.out.printf("%-35s `%s`%n",
UseLookaheadLexer.VOCABULARY.getSymbolicName(t.getType()),
t.getText().replace("\n", "\\n"));
}印刷内容如下:
LexerRule `Blah Blah `
EOF `<EOF>`以及stderr上的下列警告:
line 1:10 token recognition error at: 'XYZ'https://stackoverflow.com/questions/71108564
复制相似问题