簡體   English   中英

為什么不顯示分析樹?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM