astprinter.java

来自「program assegment for compiler」· Java 代码 · 共 50 行

JAVA
50
字号
package edu.berkeley.cs164.interp;
import org.eclipse.jdt.core.dom.*;
import org.eclipse.jdt.internal.corext.dom.GenericVisitor;

/** <p>
 * Dump an AST as text. Display nodes with indentation to indicate
 * nesting levels.
 * </p><p>
 * Unlike the other visitors in this project, this one returns true
 * in order to use the automatic traversal implemented by JDT. Also,
 * it uses visitNode to cover most node types. GenericVisitor calls
 * visitNode for visit methods that are not overridden.
 */
public class ASTPrinter extends GenericVisitor {
	public boolean visitNode(ASTNode node) {
		printNode(node);
		System.out.println();
		return true;
	}
	
	public boolean visit(SimpleName node) {
		printNode(node);
		System.out.println(" \"" + node.getIdentifier() + "\"");
		return true;
	}
	
	public boolean visit(NumberLiteral node) {
		printNode(node);
		System.out.println(" \"" + node.getToken() + "\"");
		return true;		
	}
	
	private static void printNode(ASTNode node) {
		// Indent according to nesting depth.
		ASTNode tempNode = node.getParent();
		while (tempNode != null) {
			System.out.print("   ");
			tempNode = tempNode.getParent();
		}
		System.out.print(getShortName(node.getClass()));		
	}
	
	private static String getShortName(Class c) {
		String fullName = c.getName();
		int pos = fullName.lastIndexOf('.');
		if (pos == -1) return fullName;
		return fullName.substring(pos + 1);
	} 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?