[英]Why is parse tree not being displayed?
我有一個ANTLR語法,並嘗試制作一個解析樹以在Java中使用jFrame進行顯示。 但是,解析樹未顯示,如下所示。
我確實注意到,如果我刪除了對訪客行Object answer = new ExpAnalyserBaseVisitor<>().visit(parser.exp());
的調用,則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);
有沒有更好的方法來顯示分析樹? 還可以刪除規則名稱以顯示在分析樹中嗎?
您正在調用parser.exp()
2次,而不parser.exp()
您的輸入流。 第一個調用消耗了所有令牌,第二個調用沒有找到任何輸入,因此無法解析任何內容。 在第二次調用tokens.reset()
之前,至少應調用parse.expr()
。 也許您還必須重置字符流和詞法分析器。 和他們一起玩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.