op.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 291 行

JAVA
291
字号
/* * The Apache Software License, Version 1.1 * * * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment:   *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written  *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    nor may "Apache" appear in their name, without prior written *    permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 1999, International * Business Machines, Inc., http://www.apache.org.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */package com.sun.org.apache.xerces.internal.impl.xpath.regex;import java.util.Vector;/** * @version $Id: Op.java,v 1.3 2002/08/09 15:18:17 neilg Exp $ */class Op {    static final int DOT = 0;    static final int CHAR = 1;                  // Single character    static final int RANGE = 3;                 // [a-zA-Z]    static final int NRANGE = 4;                // [^a-zA-Z]    static final int ANCHOR = 5;                // ^ $ ...    static final int STRING = 6;                // literal String     static final int CLOSURE = 7;               // X*    static final int NONGREEDYCLOSURE = 8;      // X*?    static final int QUESTION = 9;              // X?    static final int NONGREEDYQUESTION = 10;    // X??    static final int UNION = 11;                // X|Y    static final int CAPTURE = 15;              // ( and )    static final int BACKREFERENCE = 16;        // \1 \2 ...    static final int LOOKAHEAD = 20;            // (?=...)    static final int NEGATIVELOOKAHEAD = 21;    // (?!...)    static final int LOOKBEHIND = 22;           // (?<=...)    static final int NEGATIVELOOKBEHIND = 23;   // (?<!...)    static final int INDEPENDENT = 24;          // (?>...)    static final int MODIFIER = 25;             // (?ims-ims:...)    static final int CONDITION = 26;            // (?(..)yes|no)    static int nofinstances = 0;    static final boolean COUNT = false;    static Op createDot() {        if (Op.COUNT)  Op.nofinstances ++;        return new Op(Op.DOT);    }    static CharOp createChar(int data) {        if (Op.COUNT)  Op.nofinstances ++;        return new CharOp(Op.CHAR, data);    }    static CharOp createAnchor(int data) {        if (Op.COUNT)  Op.nofinstances ++;        return new CharOp(Op.ANCHOR, data);    }    static CharOp createCapture(int number, Op next) {        if (Op.COUNT)  Op.nofinstances ++;        CharOp op = new CharOp(Op.CAPTURE, number);        op.next = next;        return op;    }    static UnionOp createUnion(int size) {        if (Op.COUNT)  Op.nofinstances ++;        //System.err.println("Creates UnionOp");        return new UnionOp(Op.UNION, size);    }    static ChildOp createClosure(int id) {        if (Op.COUNT)  Op.nofinstances ++;        return new ModifierOp(Op.CLOSURE, id, -1);    }    static ChildOp createNonGreedyClosure() {        if (Op.COUNT)  Op.nofinstances ++;        return new ChildOp(Op.NONGREEDYCLOSURE);    }    static ChildOp createQuestion(boolean nongreedy) {        if (Op.COUNT)  Op.nofinstances ++;        return new ChildOp(nongreedy ? Op.NONGREEDYQUESTION : Op.QUESTION);    }    static RangeOp createRange(Token tok) {        if (Op.COUNT)  Op.nofinstances ++;        return new RangeOp(Op.RANGE, tok);    }    static ChildOp createLook(int type, Op next, Op branch) {        if (Op.COUNT)  Op.nofinstances ++;        ChildOp op = new ChildOp(type);        op.setChild(branch);        op.next = next;        return op;    }    static CharOp createBackReference(int refno) {        if (Op.COUNT)  Op.nofinstances ++;        return new CharOp(Op.BACKREFERENCE, refno);    }    static StringOp createString(String literal) {        if (Op.COUNT)  Op.nofinstances ++;        return new StringOp(Op.STRING, literal);    }    static ChildOp createIndependent(Op next, Op branch) {        if (Op.COUNT)  Op.nofinstances ++;        ChildOp op = new ChildOp(Op.INDEPENDENT);        op.setChild(branch);        op.next = next;        return op;    }    static ModifierOp createModifier(Op next, Op branch, int add, int mask) {        if (Op.COUNT)  Op.nofinstances ++;        ModifierOp op = new ModifierOp(Op.MODIFIER, add, mask);        op.setChild(branch);        op.next = next;        return op;    }    static ConditionOp createCondition(Op next, int ref, Op conditionflow, Op yesflow, Op noflow) {        if (Op.COUNT)  Op.nofinstances ++;        ConditionOp op = new ConditionOp(Op.CONDITION, ref, conditionflow, yesflow, noflow);        op.next = next;        return op;    }    int type;    Op next = null;    protected Op(int type) {        this.type = type;    }    int size() {                                // for UNION        return 0;    }    Op elementAt(int index) {                   // for UNIoN        throw new RuntimeException("Internal Error: type="+this.type);    }    Op getChild() {                             // for CLOSURE, QUESTION        throw new RuntimeException("Internal Error: type="+this.type);    }                                                // ModifierOp    int getData() {                             // CharOp  for CHAR, BACKREFERENCE, CAPTURE, ANCHOR,         throw new RuntimeException("Internal Error: type="+this.type);    }    int getData2() {                            // ModifierOp        throw new RuntimeException("Internal Error: type="+this.type);    }    RangeToken getToken() {                     // RANGE, NRANGE        throw new RuntimeException("Internal Error: type="+this.type);    }    String getString() {                        // STRING        throw new RuntimeException("Internal Error: type="+this.type);    }    // ================================================================    static class CharOp extends Op {        int charData;        CharOp(int type, int data) {            super(type);            this.charData = data;        }        int getData() {            return this.charData;        }    }    // ================================================================    static class UnionOp extends Op {        Vector branches;        UnionOp(int type, int size) {            super(type);            this.branches = new Vector(size);        }        void addElement(Op op) {            this.branches.addElement(op);        }        int size() {            return this.branches.size();        }        Op elementAt(int index) {            return (Op)this.branches.elementAt(index);        }    }    // ================================================================    static class ChildOp extends Op {        Op child;        ChildOp(int type) {            super(type);        }        void setChild(Op child) {            this.child = child;        }        Op getChild() {            return this.child;        }    }    // ================================================================    static class ModifierOp extends ChildOp {        int v1;        int v2;        ModifierOp(int type, int v1, int v2) {            super(type);            this.v1 = v1;            this.v2 = v2;        }        int getData() {            return this.v1;        }        int getData2() {            return this.v2;        }    }    // ================================================================    static class RangeOp extends Op {        Token tok;        RangeOp(int type, Token tok) {            super(type);            this.tok = tok;        }        RangeToken getToken() {            return (RangeToken)this.tok;        }    }    // ================================================================    static class StringOp extends Op {        String string;        StringOp(int type, String literal) {            super(type);            this.string = literal;        }        String getString() {            return this.string;        }    }    // ================================================================    static class ConditionOp extends Op {        int refNumber;        Op condition;        Op yes;        Op no;        ConditionOp(int type, int refno, Op conditionflow, Op yesflow, Op noflow) {            super(type);            this.refNumber = refno;            this.condition = conditionflow;            this.yes = yesflow;            this.no = noflow;        }    }}

⌨️ 快捷键说明

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