📄 dpastprinter.java
字号:
package edu.ustc.cs.minijool.parser.ast;import java.util.Iterator;/** * @author manu_s * */public class DPASTPrinter extends DPVisitor { private static int indent = 0; /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.Spec) */ public boolean visit(Spec s) { printNode(s); System.out.println(); indent += 4; for (Iterator iter = s.getProductions().iterator(); iter.hasNext();) { Production prod = (Production) iter.next(); prod.accept(this); } indent -= 4; return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.Production) */ public boolean visit(Production p) { printNode(p); System.out.println(); indent += 4; p.getProdName().accept(this); for (Iterator iter = p.getRightHandSides().iterator(); iter.hasNext(); ) { RightHandSide r = (RightHandSide) iter.next(); r.accept(this); } indent -= 4; return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.RightHandSide) */ public boolean visit(RightHandSide r) { printNode(r); System.out.println(); indent += 4; for (Iterator iter = r.getTermsAndNonTerms().iterator(); iter.hasNext(); ) { NameWithAction n = (NameWithAction) iter.next(); n.accept(this); } indent -= 4; return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.SimpleName) */ public boolean visit(SimpleName s) { printNode(s); System.out.println(" " + s.getIdentifier()); return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.Action) */ public boolean visit(Action a) { printNode(a); System.out.println( " " + ((a == Action.NONE) ? "NONE" : a.getActionCode())); return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.NonTerminalRef) */ public boolean visit(NonTerminal n) { printNode(n); System.out.println(); indent += 4; n.getName().accept(this); n.getAction().accept(this); indent -= 4; return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.TerminalRef) */ public boolean visit(Terminal t) { printNode(t); System.out.println(); indent += 4; t.getName().accept(this); t.getAction().accept(this); indent -= 4; return false; } /* (non-Javadoc) * @see edu.berkeley.cs164.parser.ast.DCVisitor#visit(edu.berkeley.cs164.parser.ast.Epsilon) */ public boolean visit(Epsilon e) { printNode(e); System.out.println(); indent += 4; e.getAction().accept(this); indent -= 4; return false; } private static void printNode(DPASTNode node) { for (int i = 0; i < indent; i++) { System.out.print(' '); } 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -