001 package biz.hammurapi.antlr;
002
003 import javax.swing.table.DefaultTableModel;
004 import javax.swing.table.TableModel;
005 import javax.swing.tree.DefaultMutableTreeNode;
006 import javax.swing.tree.MutableTreeNode;
007
008 import biz.hammurapi.swing.Visualizable;
009
010 public class AstVisualizable implements Visualizable {
011
012 private AST ast;
013 private String[] tokenNames;
014
015 public AstVisualizable(AST ast, String[] names) {
016 super();
017 this.ast = ast;
018 tokenNames = names;
019 }
020
021 public MutableTreeNode toTree(final String title) {
022 DefaultMutableTreeNode ret=new DefaultMutableTreeNode(this) {
023 public String toString() {
024 return title+" ["+tokenNames[ast.getType()]+"] "+ast.getLine()+":"+ast.getColumn()+" "+ast.getText();
025 }
026 };
027
028 for (AST child=(AST) ast.getFirstChild(); child!=null; child=(AST) child.getNextSibling()) {
029 ret.add(new AstVisualizable(child, tokenNames).toTree(""));
030 }
031
032 return ret;
033 }
034
035 public TableModel toTable() {
036 DefaultTableModel ret=new DefaultTableModel(4, 2);
037
038 ret.setColumnIdentifiers(new String[] {"Property", "Value"});
039 setRow(ret, 0, "Type", tokenNames[ast.getType()]);
040 setRow(ret, 1, "Text", ast.getText());
041 setRow(ret, 2, "Line", String.valueOf(ast.getLine()));
042 setRow(ret, 3, "Column", String.valueOf(ast.getColumn()));
043
044 return ret;
045 }
046
047 private void setRow(DefaultTableModel ret, int row, String name, Object value) {
048 ret.setValueAt(name, row, 0);
049 ret.setValueAt(value, row, 1);
050 }
051
052 }