⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpastprinter.java

📁 SkipOOMiniJOOL教学语言的编译器前端
💻 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 + -