【发布时间】:2018-02-21 19:41:40
【问题描述】:
我有一个 ANTLR 语法,并试图在 Java 中使用 jFrame 制作一个解析树来显示。但是,解析树并未显示,如下所示。
我确实注意到,如果我删除对访问者行 Object answer = new ExpAnalyserBaseVisitor<>().visit(parser.exp()); 的调用,则解析树将正确显示。我不知道为什么这是一个问题以及如何解决它。
这是我的显示代码:
CharStream charStream = CharStreams.fromString(exp);
ExpAnalyserLexer lexer = new ExpAnalyserLexer(charStream);
lexer.removeErrorListeners();
CommonTokenStream tokens = new CommonTokenStream(lexer);
ExpAnalyserParser parser = new ExpAnalyserParser(tokens);
parser.removeErrorListeners();
try {
Object answer = new ExpAnalyserBaseVisitor<>().visit(parser.exp());
System.out.println("Postfix Expression: " + answer);
}
catch (EmptyStackException e){
System.out.println("Invalid expression!");
return;
}
ParseTree tree = parser.exp();
JFrame frame = new JFrame("Parse Tree");
JPanel panel = new JPanel();
TreeViewer treeViewer = new TreeViewer(Arrays.asList(parser.getRuleNames()), tree);
treeViewer.setScale(1.5);
panel.add(treeViewer);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setVisible(true);
有没有更好的方法来显示解析树?我也可以删除规则名称以显示在解析树中吗?
【问题讨论】:
标签: java antlr4 abstract-syntax-tree parse-tree