问题描述
如果你有这样的代码,控制台或swing,你如何显示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");
}
推荐答案
Using 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!