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 }