PatternElement.java
001 /* 
002  *  PatternElement.java - transducer class
003  *
004  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
005  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
006  *
007  *  This file is part of GATE (see http://gate.ac.uk/), and is free
008  *  software, licenced under the GNU Library General Public License,
009  *  Version 2, June 1991 (in the distribution as file licence.html,
010  *  and also available at http://gate.ac.uk/gate/licence.html).
011  *
012  *  Hamish Cunningham, 24/07/98
013  *
014  *  $Id: PatternElement.java 17599 2014-03-08 16:30:42Z markagreenwood $
015  */
016 
017 
018 package gate.jape;
019 
020 import java.io.Serializable;
021 import java.util.Stack;
022 
023 
024 /**
025   * Superclass of the various types of pattern element, and of
026   * ConstraintGroup. Inherits from Matcher, providing matches and reset.
027   * Provides access to the annotations that are cached by subclasses, and
028   * multilevel rollback of those caches. Stores the match history.
029   */
030 abstract public class PatternElement implements Cloneable, 
031           JapeConstants, Serializable
032 {
033   private static final long serialVersionUID = -3721781489731606247L;
034 
035   /** Match history stack, for use in rollback. In BasicPatternElements
036     * the objects on the stack are Integers giving the number of annots that
037     * were cached at that point in the history. In ComplexPatternElements
038     * the objects are Integers giving the number of times the component
039     * ConstraintGroup was successfully matched. In ConstraintGroups the
040     * elements are arrays representing conjunctions of PatternElement that
041     * succeeded at that point in the history.
042     */
043   protected Stack<Object> matchHistory;
044 
045   /** Anonymous construction. */
046   public PatternElement() {
047     matchHistory = new Stack<Object>();
048   // Anonymous constructor.
049 
050   /** Cloning for processing of macro references. Note that it doesn't
051     * really clone the match history, just set it to a new Stack. This is
052     * because a) JGL doesn't have real clone methods and b) we don't
053     * actually need it anywhere but during parsing the .jape, where there
054     * is no match history yet.
055     */
056   @Override
057   public Object clone() {
058     try {
059       PatternElement newPE = (PatternElementsuper.clone();
060       newPE.matchHistory = new Stack<Object>();
061       return newPE;
062     catch(CloneNotSupportedException e) {
063       throw(new InternalError(e.toString()));
064     }
065   // clone
066 
067 
068   /**
069    * Finishes the JAPE language parsing, building all the in-memory structures 
070    * required. 
071    */
072   public abstract void finish();
073   /** Create a string representation of the object with padding. */
074   abstract public String toString(String pad);
075 
076 // class PatternElement
077 
078 
079 // $Log$
080 // Revision 1.7  2005/01/11 13:51:36  ian
081 // Updating copyrights to 1998-2005 in preparation for v3.0
082 //
083 // Revision 1.6  2004/07/21 17:10:08  akshay
084 // Changed copyright from 1998-2001 to 1998-2004
085 //
086 // Revision 1.5  2004/03/25 13:01:14  valyt
087 // Imports optimisation throughout the Java sources
088 // (to get rid of annoying warnings in Eclipse)
089 //
090 // Revision 1.4  2000/11/08 16:35:03  hamish
091 // formatting
092 //
093 // Revision 1.3  2000/10/16 16:44:34  oana
094 // Changed the comment of DEBUG variable
095 //
096 // Revision 1.2  2000/10/10 15:36:36  oana
097 // Changed System.out in Out and System.err in Err;
098 // Added the DEBUG variable seted on false;
099 // Added in the header the licence;
100 //
101 // Revision 1.1  2000/02/23 13:46:09  hamish
102 // added
103 //
104 // Revision 1.1.1.1  1999/02/03 16:23:02  hamish
105 // added gate2
106 //
107 // Revision 1.8  1998/11/03 19:06:49  hamish
108 // java stack, not jgl stack for matchHistory
109 //
110 // Revision 1.7  1998/11/01 23:18:44  hamish
111 // use new instead of clear on containers
112 //
113 // Revision 1.6  1998/09/26 09:19:18  hamish
114 // added cloning of PE macros
115 //
116 // Revision 1.5  1998/08/12 15:39:41  hamish
117 // added padding toString methods
118 //
119 // Revision 1.4  1998/08/03 19:51:24  hamish
120 // rollback added
121 //
122 // Revision 1.3  1998/07/30 11:05:22  hamish
123 // more jape
124 //
125 // Revision 1.2  1998/07/29 11:07:06  hamish
126 // first compiling version
127 //
128 // Revision 1.1.1.1  1998/07/28 16:37:46  hamish
129 // gate2 lives