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

📄 treebuilder.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            exprType[] args = new exprType[nargs];            for (int i = 0; i < nargs; i++) {                args[i] = makeExpr(tmparr[i]);            }            keywordType[] keywords = new keywordType[l - nargs];            for (int i = nargs; i < l; i++) {                if (!(tmparr[i] instanceof keywordType))                    throw new ParseException(                        "non-keyword argument following keyword", tmparr[i]);                keywords[i - nargs] = (keywordType) tmparr[i];            }            exprType func = makeExpr();            return new Call(func, args, keywords, starargs, kwargs);        case JJTEXTRAKEYWORDVALUELIST:            return new ExtraArgValue(makeExpr(), JJTEXTRAKEYWORDVALUELIST);        case JJTEXTRAARGVALUELIST:            return new ExtraArgValue(makeExpr(), JJTEXTRAARGVALUELIST);        case JJTKEYWORD:            value = makeExpr();            name = makeIdentifier();            return new keywordType(name, value);        case JJTTUPLE:            return new Tuple(makeExprs(), Tuple.Load);        case JJTLIST:            if (stack.nodeArity() > 0 && peekNode() instanceof listcompType) {                listcompType[] generators = new listcompType[arity-1];                for (int i = arity-2; i >= 0; i--) {                    generators[i] = (listcompType) popNode();                }                return new ListComp(makeExpr(), generators);            }            return new List(makeExprs(), List.Load);        case JJTDICTIONARY:            l = arity / 2;            exprType[] keys = new exprType[l];            exprType[] vals = new exprType[l];            for (int i = l - 1; i >= 0; i--) {                vals[i] = makeExpr();                keys[i] = makeExpr();            }            return new Dict(keys, vals);        case JJTSTR_1OP:            return new Repr(makeExpr());        case JJTSTRJOIN:            String str2 = ((Str) popNode()).s;            String str1 = ((Str) popNode()).s;            return new Str(str1 + str2);        case JJTLAMBDEF:            test = makeExpr();            arguments = makeArguments(arity - 1);            return new Lambda(arguments, test);        case JJTELLIPSES:            return new Ellipsis();        case JJTSLICE:            SimpleNode[] arr = new SimpleNode[arity];            for (int i = arity-1; i >= 0; i--) {                arr[i] = popNode();            }            exprType[] values = new exprType[3];            int k = 0;            for (int j = 0; j < arity; j++) {                if (arr[j].getId() == JJTCOLON)                    k++;                else                    values[k] = makeExpr(arr[j]);            }            if (k == 0) {                return new Index(values[0]);            } else {                return new Slice(values[0], values[1], values[2]);            }        case JJTSUBSCRIPTLIST:            sliceType[] dims = new sliceType[arity];            for (int i = arity - 1; i >= 0; i--) {                dims[i] = (sliceType) popNode();            }            return new ExtSlice(dims);        case JJTAUG_PLUS:                 return makeAugAssign(AugAssign.Add);        case JJTAUG_MINUS:               return makeAugAssign(AugAssign.Sub);        case JJTAUG_MULTIPLY:              return makeAugAssign(AugAssign.Mult);        case JJTAUG_DIVIDE:               return makeAugAssign(AugAssign.Div);        case JJTAUG_MODULO:              return makeAugAssign(AugAssign.Mod);        case JJTAUG_AND:                return makeAugAssign(AugAssign.BitAnd);        case JJTAUG_OR:                return makeAugAssign(AugAssign.BitOr);        case JJTAUG_XOR:              return makeAugAssign(AugAssign.BitXor);        case JJTAUG_LSHIFT:               return makeAugAssign(AugAssign.LShift);        case JJTAUG_RSHIFT:              return makeAugAssign(AugAssign.RShift);        case JJTAUG_POWER:              return makeAugAssign(AugAssign.Pow);        case JJTAUG_FLOORDIVIDE:              return makeAugAssign(AugAssign.FloorDiv);        case JJTLIST_FOR:            exprType[] ifs = new exprType[arity-2];            for (int i = arity-3; i >= 0; i--) {                ifs[i] = makeExpr();            }            iter = makeExpr();            target = makeExpr();            ctx.setStore(target);            return new listcompType(target, iter, ifs);        case JJTIMPORTFROM:            aliasType[] aliases = makeAliases(arity - 1);            String module = makeIdentifier();            return new ImportFrom(module, aliases);        case JJTIMPORT:            return new Import(makeAliases());            case JJTDOTTED_NAME:            StringBuffer sb = new StringBuffer();            for (int i = 0; i < arity; i++) {                if (i > 0)                    sb.insert(0, '.');                sb.insert(0, makeIdentifier());            }            return new Name(sb.toString(), Name.Load);        case JJTDOTTED_AS_NAME:            String asname = null;            if (arity > 1)                asname = makeIdentifier();            return new aliasType(makeIdentifier(), asname);        case JJTIMPORT_AS_NAME:            asname = null;            if (arity > 1)                asname = makeIdentifier();            return new aliasType(makeIdentifier(), asname);        case JJTCOMMA:        case JJTCOLON:            return n;        default:            return null;        }    }    private stmtType makeAugAssign(int op) throws Exception {        exprType value = makeExpr();        exprType target = makeExpr();        ctx.setAugStore(target);        return new AugAssign(target, op, value);    }    private void dumpStack() {        int n = stack.nodeArity();        System.out.println("nodeArity:" + n);        if (n > 0) {            System.out.println("peek:" + stack.peekNode());        }    }    SimpleNode peekNode() {        return (SimpleNode) stack.peekNode();    }    SimpleNode popNode() {        return (SimpleNode) stack.popNode();    }    BinOp makeBinOp(int op) {        exprType right = makeExpr();        exprType left = makeExpr();        return new BinOp(left, op, right);    }    argumentsType makeArguments(int l) throws Exception {        String kwarg = null;        String stararg = null;        if (l > 0 && peekNode().getId() == JJTEXTRAKEYWORDLIST) {            kwarg = ((ExtraArg) popNode()).name;            l--;        }        if (l > 0 && peekNode().getId() == JJTEXTRAARGLIST) {            stararg = ((ExtraArg) popNode()).name;            l--;        }        int startofdefaults = l;        exprType fpargs[] =  new exprType[l];        exprType defaults[] =  new exprType[l];        for (int i = l-1; i >= 0; i--) {            DefaultArg node = (DefaultArg) popNode();            fpargs[i] = node.parameter;            ctx.setStore(fpargs[i]);            defaults[i] = node.value;            if (node.value != null)                startofdefaults = i;        }//System.out.println("start "+  startofdefaults + " " + l);        exprType[] newdefs = new exprType[l-startofdefaults];        System.arraycopy(defaults, startofdefaults, newdefs, 0, newdefs.length);                return new argumentsType(fpargs, stararg, kwarg, newdefs);    }}class DefaultArg extends SimpleNode {    public exprType parameter;    public exprType value;    DefaultArg(exprType parameter, exprType value) {        this.parameter = parameter;        this.value = value;    }}class ExtraArg extends SimpleNode {    public String name;    public int id;    ExtraArg(String name, int id) {        this.name = name;        this.id = id;    }    public int getId() {        return id;    }}class ExtraArgValue extends SimpleNode {    public exprType value;    public int id;    ExtraArgValue(exprType value, int id) {        this.value = value;        this.id = id;    }    public int getId() {        return id;    }}class IdentityNode extends SimpleNode {    public int id;    public Object image;    IdentityNode(int id) {        this.id = id;    }    public int getId() {        return id;    }    public void setImage(Object image) {        this.image = image;    }    public Object getImage() {        return image;    }    public String toString() {        return "IdNode[" + PythonGrammarTreeConstants.jjtNodeName[id] + ", " +                image + "]";    }}class CtxVisitor extends Visitor {    private int ctx;    public CtxVisitor() { }    public void setStore(SimpleNode node) throws Exception {        this.ctx = expr_contextType.Store;        visit(node);    }    public void setStore(SimpleNode[] nodes) throws Exception {        for (int i = 0; i < nodes.length; i++)             setStore(nodes[i]);    }    public void setDelete(SimpleNode node) throws Exception {        this.ctx = expr_contextType.Del;        visit(node);    }    public void setDelete(SimpleNode[] nodes) throws Exception {        for (int i = 0; i < nodes.length; i++)             setDelete(nodes[i]);    }    public void setAugStore(SimpleNode node) throws Exception {        this.ctx = expr_contextType.AugStore;        visit(node);    }    public Object visitName(Name node) throws Exception {        node.ctx = ctx;        return null;    }    public Object visitAttribute(Attribute node) throws Exception {        node.ctx = ctx;        return null;    }    public Object visitSubscript(Subscript node) throws Exception {        node.ctx = ctx;        return null;    }    public Object visitList(List node) throws Exception {        if (ctx == expr_contextType.AugStore) {            throw new ParseException(                    "augmented assign to list not possible", node);        }        node.ctx = ctx;        traverse(node);        return null;    }    public Object visitTuple(Tuple node) throws Exception {        if (ctx == expr_contextType.AugStore) {            throw new ParseException(                    "augmented assign to tuple not possible", node);        }        node.ctx = ctx;        traverse(node);        return null;    }    public Object visitCall(Call node) throws Exception {        throw new ParseException("can't assign to function call", node);    }    public Object visitListComp(Call node) throws Exception {        throw new ParseException("can't assign to list comprehension call",                                 node);    }    public Object unhandled_node(SimpleNode node) throws Exception {        throw new ParseException("can't assign to operator", node);    }}

⌨️ 快捷键说明

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