KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > oro > text > awk > SyntaxTree


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

59
60 import java.util.*;
61
62  /**
63  IMPORTANT!!!!!!!!!!!!!
64  Don't forget to optimize this module. The calculation of follow can
65  be accelerated by calculating first and last only once for each node and
66  saving instead of doing dynamic calculation every time.
67
68  @author <a HREF="dfs@savarese.org">Daniel F. Savarese</a>
69  @version $Id: SyntaxTree.java,v 1.1.1.1 2000/07/23 23:08:50 jon Exp $
70  */

71 final class SyntaxTree {
72   int _positions;
73   SyntaxNode _root;
74   LeafNode[] _nodes;
75   BitSet[] _followSet;
76   
77   SyntaxTree(SyntaxNode root, int positions) {
78     _root = root;
79     _positions = positions;
80   }
81
82   void _computeFollowPositions() {
83     int index;
84
85     _followSet = new BitSet[_positions];
86     _nodes = new LeafNode[_positions];
87     index = _positions;
88
89     while(0 < index--)
90       _followSet[index] = new BitSet(_positions);
91
92     _root._followPosition(_followSet, _nodes);
93   }
94
95   private void __addToFastMap(BitSet pos, boolean[] fastMap, boolean[] done){
96     int token, node;
97
98     for(node = 0; node < _positions; node++){
99       if(pos.get(node) && !done[node]){
100     done[node] = true;
101
102     for(token=0; token < LeafNode._NUM_TOKENS; token++){
103       if(!fastMap[token])
104         fastMap[token] = _nodes[node]._matches((char)token);
105     }
106       }
107     }
108   }
109
110   boolean[] createFastMap(){
111     boolean[] fastMap, done;
112     int token;
113
114     fastMap = new boolean[LeafNode._NUM_TOKENS];
115     done = new boolean[_positions];
116     __addToFastMap(_root._firstPosition(), fastMap, done);
117
118     return fastMap;
119   }
120 }
121
Popular Tags