如何显示ANTLR树GUI [英] How to Display ANTLR Tree GUI

查看:373
本文介绍了如何显示ANTLR树GUI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果您具有控制台或摆动式这样的代码,如何显示AST GUI? 我的ANTLR是版本3.

How do you display the AST GUI if you have code like this, both of console or swing? My ANTLR is version 3.

CharStream stream = new ANTLRStringStream("program XLSample1 =\n" + 
            "constant one : Integer := 1;\n" + 
            "constant two : Integer := 2;\n" + 
            "var a, b,c : Integer := 42;\n" + 
            "begin\n" + 
            " x:= (12 + 6) - (7 * 41) - x mod y;\n" + 
            " y := 21;\n" + 
            "\n" + 
            "if x < 10 then\n" + 
            "  y :=2;\n" + 
            "  elseif x < 20 then\n" + 
            "  y := 20;\n" + 
            "  else\n" + 
            "  y := 30;\n" + 
            "end if; \n" + 
            "end XLSample1.");
    SampleLexer lexer  = new SampleLexer(stream);   
    TokenStream tokenStream = new CommonTokenStream(lexer);
    SampleParser parser = new SampleParser(tokenStream);
    parser.program();       
    System.out.println("OK");       
}

推荐答案

使用ANTLR V4(对于V3,请尝试查找类似的API),以显示GUI AST,可以使用org.antlr.v4.runtime.tree.gui.TreeViewer.

Using ANTLR V4 (for V3 try to find out the similar API),to show a gui AST, you can use org.antlr.v4.runtime.tree.gui.TreeViewer.

您可以从 ANTLR的站点上获取Hello演示.理解后,运行以下简单演示:

You can get the Hello demo from ANTLR's site. Once you got it, run this simple demo:

import java.util.Arrays;
import javax.swing.JFrame;
import javax.swing.JPanel;

import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.gui.TreeViewer;

/**
 * A simple demo to show AST GUI with ANTLR
 * @see http://www.antlr.org/api/Java/org/antlr/v4/runtime/tree/gui/TreeViewer.html
 * 
 * @author wangdq
 * 2014-5-24
 *
 */
public class HelloTestDrive {
    public static void main(String[] args) {
        //prepare token stream
        CharStream stream = new ANTLRInputStream("hello antlr");
        HelloLexer lexer  = new HelloLexer(stream);   
        TokenStream tokenStream = new CommonTokenStream(lexer);
        HelloParser parser = new HelloParser(tokenStream);
        ParseTree tree = parser.r(); 

        //show AST in console
        System.out.println(tree.toStringTree(parser));

        //show AST in GUI
        JFrame frame = new JFrame("Antlr AST");
        JPanel panel = new JPanel();
        TreeViewer viewer = new TreeViewer(Arrays.asList(
                parser.getRuleNames()),tree);
        viewer.setScale(1.5); // Scale a little
        panel.add(viewer);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

然后,您将在控制台中获得AST打印并显示在JFrame中. 更多详细信息,请参阅 ANTLR API .

Then you will get the AST print in the console and show in JFrame. more details, please refer ANTLR API.

请确保您的语法工作正常,然后您可以修改此演示以满足您的要求.

Make sure your grammar work fine, then you can modify this demo to meet your requirement.

ANTLR 4的更新:TreeViewer已从

Update for ANTLR 4: TreeViewer has moved to org.antlr.v4.gui.TreeViewer package from ANTLR 4 Tool.

使用maven时,TreeViewer需要以下依赖项:

When using maven, TreeViewer requires the following dependency:

<dependency>
    <groupId>org.antlr</groupId>
    <artifactId>antlr4</artifactId>
    <version>4.7.2</version>
</dependency>

这篇关于如何显示ANTLR树GUI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆