Fad*_*ere 6 tree user-interface swing antlr
如果你有这样的代码,如控制台还是摇摆,你如何显示AST GUI?我的ANTLR是版本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");
}
Run Code Online (Sandbox Code Playgroud)
小智 13
我喜欢ANLTR,所以我试着回答它.
使用Antlr V4(对于V3尝试找出类似的API),要显示一个gui AST,可以使用org.antlr.v4.runtime.tree.gui.TreeViewer.
你可以从ANTLR的网站上获得Hello演示,一旦你得到它,运行这个简单的演示:
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 viewr = new TreeViewer(Arrays.asList(
parser.getRuleNames()),tree);
viewr.setScale(1.5);//scale a little
panel.add(viewr);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,200);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您将在控制台中获得AST打印并在JFrame中显示.更多细节,请参考ANLTR API.
确保您的语法正常工作,然后您可以修改此演示以满足您的需求.
ANTLR 4的更新:已从ANTLR 4工具org.antlr.v4.runtime.tree.gui.TreeViewer转移到JFrame包.