我已经使用antlr 3天了。我可以解析表达式、编写侦听器、解释解析树...这是梦想成真。
但后来我尝试匹配文字字符串“foo%”,但失败了。我可以找到很多声称可以做到这一点的例子。我都试过了。
所以我创建了一个小项目来匹配文字字符串。我一定是在做一些愚蠢的事情。
grammar Test;
clause
: stringLiteral EOF
;
fragment ESCAPED_QUOTE : '\\\'';
stringLiteral : '\'' ( ESCAPED_QUOTE | ~('\n'|'\r') ) + '\'';
Run Code Online (Sandbox Code Playgroud)
简单测试:
public class Test {
@org.junit.Test
public void test() {
String input = "'foo%'";
TestLexer lexer = new TestLexer(new ANTLRInputStream(input));
CommonTokenStream tokens = new CommonTokenStream(lexer);
TestParser parser = new TestParser(tokens);
ParseTree clause = parser.clause();
System.out.println(clause.toStringTree(parser));
ParseTreeWalker walker = new ParseTreeWalker();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Running com.example.Test
line 1:1 token recognition error at: 'f'
line 1:2 token …Run Code Online (Sandbox Code Playgroud)