DumpASTVisitor.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. package antlr;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/DumpASTVisitor.java#1 $
  7.  */
  8. import java.io.*;
  9. import antlr.collections.AST;
  10. /** Simple class to dump the contents of an AST to the output */
  11. public class DumpASTVisitor implements ASTVisitor {
  12.     protected int level = 0;
  13.     private void tabs() {
  14. for (int i = 0; i < level; i++) {
  15.     System.out.print("   ");
  16. }
  17.     }
  18.     public void visit(AST node) {
  19. // Flatten this level of the tree if it has no children
  20. boolean flatten = /*true*/ false;
  21. AST node2;
  22. for (node2 = node; node2 != null ; node2 = node2.getNextSibling()) {
  23.     if (node2.getFirstChild() != null) {
  24. flatten = false;
  25. break;
  26.     }
  27. }
  28. for (node2 = node; node2 != null; node2 = node2.getNextSibling()) {
  29.     if (!flatten || node2 == node) {
  30. tabs();
  31.     }
  32.     if ( node2.getText()==null ) {
  33. System.out.print("nil");
  34.     }
  35.     else {
  36. System.out.print(node2.getText());
  37.     }
  38.     System.out.print(" [" + node2.getType() + "] ");
  39.     if (flatten) {
  40. System.out.print(" ");
  41.     }
  42.     else {
  43. System.out.println("");
  44.     }
  45.     if ( node2.getFirstChild() != null ) {
  46. level++;
  47. visit(node2.getFirstChild());
  48. level--;
  49.     }
  50. }
  51. if (flatten) {
  52.     System.out.println("");
  53. }
  54.     }
  55. }