1   /* 
2    *  PatternElement.java - transducer class
3    *
4    *  Copyright (c) 1998-2001, The University of Sheffield.
5    *
6    *  This file is part of GATE (see http://gate.ac.uk/), and is free
7    *  software, licenced under the GNU Library General Public License,
8    *  Version 2, June 1991 (in the distribution as file licence.html,
9    *  and also available at http://gate.ac.uk/gate/licence.html).
10   *
11   *  Hamish Cunningham, 24/07/98
12   *
13   *  $Id: PatternElement.java,v 1.4 2000/11/08 16:35:03 hamish Exp $
14   */
15  
16  
17  package gate.jape;
18  
19  import java.util.*;
20  import gate.annotation.*;
21  import gate.util.*;
22  import gate.*;
23  
24  
25  /**
26    * Superclass of the various types of pattern element, and of
27    * ConstraintGroup. Inherits from Matcher, providing matches and reset.
28    * Provides access to the annotations that are cached by subclasses, and
29    * multilevel rollback of those caches. Stores the match history.
30    */
31  abstract public class PatternElement implements Cloneable, Matcher,
32            JapeConstants, java.io.Serializable
33  {
34    /** Debug flag */
35    private static final boolean DEBUG = false;
36  
37    /** Match history stack, for use in rollback. In BasicPatternElements
38      * the objects on the stack are Integers giving the number of annots that
39      * were cached at that point in the history. In ComplexPatternElements
40      * the objects are Integers giving the number of times the component
41      * ConstraintGroup was successfully matched. In ConstraintGroups the
42      * elements are arrays representing conjunctions of PatternElement that
43      * succeeded at that point in the history.
44      */
45    protected Stack matchHistory;
46  
47    /** Anonymous construction. */
48    public PatternElement() {
49      matchHistory = new Stack();
50    } // Anonymous constructor.
51  
52    /** Cloning for processing of macro references. Note that it doesn't
53      * really clone the match history, just set it to a new Stack. This is
54      * because a) JGL doesn't have real clone methods and b) we don't
55      * actually need it anywhere but during parsing the .jape, where there
56      * is no match history yet.
57      */
58    public Object clone() {
59      try {
60        PatternElement newPE = (PatternElement) super.clone();
61        newPE.matchHistory = new Stack();
62        return newPE;
63      } catch(CloneNotSupportedException e) {
64        throw(new InternalError(e.toString()));
65      }
66    } // clone
67  
68    /** Access to the annotations that have been matched. */
69    abstract public AnnotationSet getMatchedAnnots();
70  
71    /** Multilevel rollback of annotation caches. */
72    abstract public void rollback(int arity);
73  
74    /** Reset: clear annotation caches etc. Most of the behaviour of
75      * this method is the responsibility of subclasses.
76      */
77    public void reset() {
78      matchHistory = new Stack();
79    } // reset
80  
81    /** Create a string representation of the object with padding. */
82    abstract public String toString(String pad);
83  
84  } // class PatternElement
85  
86  
87  // $Log: PatternElement.java,v $
88  // Revision 1.4  2000/11/08 16:35:03  hamish
89  // formatting
90  //
91  // Revision 1.3  2000/10/16 16:44:34  oana
92  // Changed the comment of DEBUG variable
93  //
94  // Revision 1.2  2000/10/10 15:36:36  oana
95  // Changed System.out in Out and System.err in Err;
96  // Added the DEBUG variable seted on false;
97  // Added in the header the licence;
98  //
99  // Revision 1.1  2000/02/23 13:46:09  hamish
100 // added
101 //
102 // Revision 1.1.1.1  1999/02/03 16:23:02  hamish
103 // added gate2
104 //
105 // Revision 1.8  1998/11/03 19:06:49  hamish
106 // java stack, not jgl stack for matchHistory
107 //
108 // Revision 1.7  1998/11/01 23:18:44  hamish
109 // use new instead of clear on containers
110 //
111 // Revision 1.6  1998/09/26 09:19:18  hamish
112 // added cloning of PE macros
113 //
114 // Revision 1.5  1998/08/12 15:39:41  hamish
115 // added padding toString methods
116 //
117 // Revision 1.4  1998/08/03 19:51:24  hamish
118 // rollback added
119 //
120 // Revision 1.3  1998/07/30 11:05:22  hamish
121 // more jape
122 //
123 // Revision 1.2  1998/07/29 11:07:06  hamish
124 // first compiling version
125 //
126 // Revision 1.1.1.1  1998/07/28 16:37:46  hamish
127 // gate2 lives
128