用于Java的ANTLR4。如何在词法分析中显示错误
如何在词法分析期间显示错误列表(如果有)。 我尝试了以下方法,但我的输出是[org.antlr.v4.runtime]。ConsoleErrorListener@1026c84c] 我写的代码是:用于Java的ANTLR4。如何在词法分析中显示错误,java,antlr4,Java,Antlr4,如何在词法分析期间显示错误列表(如果有)。 我尝试了以下方法,但我的输出是[org.antlr.v4.runtime]。ConsoleErrorListener@1026c84c] 我写的代码是: private static String errorsOutput(String code) { Java8Lexer lexer = new Java8Lexer(new ANTLRInputStream(code)); CommonTokenStream tokens = ne
private static String errorsOutput(String code) {
Java8Lexer lexer = new Java8Lexer(new ANTLRInputStream(code));
CommonTokenStream tokens = new CommonTokenStream(lexer);
Java8Parser parser = new Java8Parser(tokens);
return ""+lexer.getErrorListeners();
}
主要类别:
String code = "public class Main {public static void main(String[] args) {System.out.println("Hello, world")}}";
System.out.println( errorsOutput(code) );
在这个例子中没有任何迹象
[;]我需要程序来显示这个错误你所描述的不是词法分析,而是语法分析 以下是添加自定义错误侦听器和收集消息的方式:
String source = "public class Main {\n" +
" public static void main(String[] args) {\n" +
" System.out.println(\"Hello, world\")\n" +
" }\n" +
"}";
Java8Lexer lexer = new Java8Lexer(CharStreams.fromString(source));
Java8Parser parser = new Java8Parser(new CommonTokenStream(lexer));
parser.removeErrorListeners();
final List<String> errorMessages = new ArrayList<>();
parser.addErrorListener(new BaseErrorListener(){
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
errorMessages.add(msg);
}
});
parser.compilationUnit();
System.out.println("errorMessages: " + errorMessages);
它无法匹配println语句,因为缺少
因此它会尝试匹配另一个
来完成方法调用,该调用也会失败。这就是语法的结构,对此没什么可做的(除了重写大部分语法)
如果您分析这个:
String source=“public class Main{\n”+
“公共静态void main(字符串[]args){\n”+
“foo()\n”+
“}\n”+
"}";
然后你会得到这样的信息:missing';'在“}”
通常你会用try/catch捕捉错误——我看不到你的。您要打印的是从错误侦听器返回的toString()
。恐怕打印侦听器对象是没有意义的。