我在语法中有以下主要规则:
// main rule
parse : (statments)+ EOF;
我也有这些片段:
COMMENT: '/*' .*? '*/' -> skip; // Toss out commetns
LINE_COMMENT: ('--'|'#') ~[\n]* -> skip; // Toss out full line comments
NEWLINE: '\r'? '\n' -> skip ; // Toss newlines
WS : [ \t]+ -> skip ; // Toss out whitespace
fragment DIGIT : [0-9];
fragment A : [aA];
fragment B : [bB];
fragment C : [cC];
...
fragment Z : [zZ];
我开始解析:
ANTLRInputStream input = new ANTLRInputStream(cqlQuery);
CqlLexer lexer = new CqlLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
CqlParser cqlParser = new CqlParser(tokens);
cqlParser.removeErrorListeners();
cqlParser.addErrorListener(new CqlErrorListener());
ParseTree tree = cqlParser.parse();
ParseTreeWalker walker = new ParseTreeWalker();
CqlListener listener = new CqlListener(metadata);
walker.walk(listener, tree);
为什么我有时会得到:ParseException没有可行的替代输入?