KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > apache > xerces > validators > common > CMNode


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 1999 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 1999, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package org.enhydra.apache.xerces.validators.common;
59
60 /**
61  *
62  * @version
63  */

64 public abstract class CMNode
65 {
66     // -------------------------------------------------------------------
67
// Constructors
68
// -------------------------------------------------------------------
69
CMNode(int type) throws CMException
70     {
71         fType = type;
72     }
73
74
75     // -------------------------------------------------------------------
76
// Package, abstract methods
77
// -------------------------------------------------------------------
78
abstract boolean isNullable() throws CMException;
79
80
81     // -------------------------------------------------------------------
82
// Package final methods
83
// -------------------------------------------------------------------
84
final int type()
85     {
86         return fType;
87     }
88
89     final CMStateSet firstPos() throws CMException
90     {
91         if (fFirstPos == null)
92         {
93             fFirstPos = new CMStateSet(fMaxStates);
94             calcFirstPos(fFirstPos);
95         }
96         return fFirstPos;
97     }
98
99     final CMStateSet lastPos() throws CMException
100     {
101         if (fLastPos == null)
102         {
103             fLastPos = new CMStateSet(fMaxStates);
104             calcLastPos(fLastPos);
105         }
106         return fLastPos;
107     }
108
109     final void setFollowPos(CMStateSet setToAdopt)
110     {
111         fFollowPos = setToAdopt;
112     }
113
114     final void setMaxStates(int maxStates)
115     {
116         fMaxStates = maxStates;
117     }
118
119
120     // -------------------------------------------------------------------
121
// Protected, abstract methods
122
// -------------------------------------------------------------------
123
protected abstract void calcFirstPos(CMStateSet toSet) throws CMException;
124
125     protected abstract void calcLastPos(CMStateSet toSet) throws CMException;
126
127
128     // -------------------------------------------------------------------
129
// Private data members
130
//
131
// fType
132
// The type of node. This indicates whether its a leaf or an
133
// operation. Though we also do derived classes for these types,
134
// it is too expensive to use runtime typing to find this out.
135
// This is one of the ContentSpecNode.NODE_XXX types.
136
//
137
// fFirstPos
138
// The set of NFA states that represent the entry states of this
139
// node in the DFA.
140
//
141
// fFollowPos
142
// The set of NFA states that can be gotten to from from this
143
// node in the DFA.
144
//
145
// fLastPos
146
// The set of NFA states that represent the final states of this
147
// node in the DFA.
148
//
149
// fMaxStates
150
// The maximum number of states that the NFA has, which means the
151
// max number of NFA states that have to be traced in the state
152
// sets during the building of the DFA. Its unfortunate that it
153
// has to be stored redundantly, but we need to fault in the
154
// state set members and they have to be sized to this size. We
155
// init to to -1 so it will cause an error if its used without
156
// being initialized.
157
// -------------------------------------------------------------------
158
private int fType;
159     private CMStateSet fFirstPos = null;
160     private CMStateSet fFollowPos = null;
161     private CMStateSet fLastPos = null;
162     private int fMaxStates = -1;
163 };
164
Popular Tags