All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gate.jape.ComplexPatternElement Maven / Gradle / Ivy

Go to download

ANNIE is a general purpose information extraction system that provides the building blocks of many other GATE applications.

There is a newer version: 9.1
Show newest version
/*
 *  ComplexPatternElement.java - transducer class
 *
 *  Copyright (c) 1995-2012, The University of Sheffield. See the file
 *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
 *
 *  This file is part of GATE (see http://gate.ac.uk/), and is free
 *  software, licenced under the GNU Library General Public License,
 *  Version 2, June 1991 (in the distribution as file licence.html,
 *  and also available at http://gate.ac.uk/gate/licence.html).
 *
 *  Hamish Cunningham, 24/07/98
 *
 *  $Id: ComplexPatternElement.java 17597 2014-03-08 15:19:43Z markagreenwood $
 */


package gate.jape;

import gate.util.Strings;

import java.io.Serializable;
import java.util.Iterator;


/**
  * A pattern element enclosed in round brackets. Has a
  * ConstraintGroup, optional Kleene operator and optional binding name.
  */
public class ComplexPatternElement extends PatternElement
implements JapeConstants, Serializable
{
  private static final long serialVersionUID = -1660335210282070151L;

  /** Kleene operator (defaults to none). Other values: KLEENE_STAR (*);
    * KLEENE_PLUS (+); KLEENE_QUERY (?) */
  private KleeneOperator kleeneOp = null;

  /** Binding name (may be null). */
  private String bindingName = null;

  /** Get binding name. */
  public String getBindingName() { return bindingName; }

  /** Get a list of CPEs that we contain. */
  protected Iterator getCPEs() {
    return constraintGroup.getCPEs();
  } // getCPEs

  /** The recursive definition of what pattern elements make up this one. */
  private ConstraintGroup constraintGroup;

  public ComplexPatternElement(
    ConstraintGroup constraintGroup,
    KleeneOperator.Type kleeneType,
    String bindingName
  ) {
    this(constraintGroup, new KleeneOperator(kleeneType), bindingName);
  }

  public ComplexPatternElement(
          ConstraintGroup constraintGroup,
          KleeneOperator kleeneOp,
          String bindingName
        ) {
          if (kleeneOp == null)
            kleeneOp = new KleeneOperator(KleeneOperator.Type.SINGLE);
          this.constraintGroup = constraintGroup;
          this.kleeneOp = kleeneOp;
          this.bindingName = bindingName;
        }

  /** Construction from ConstraintGroup, min and max legal occurance limits,
   * and binding name.
   */
  public ComplexPatternElement(
    ConstraintGroup constraintGroup,
    int minOccurance, int maxOccurance,
    String bindingName
  ) {
    this.constraintGroup = constraintGroup;
    this.kleeneOp = new KleeneOperator(minOccurance, maxOccurance);
    this.bindingName = bindingName;
  }

  /** Need cloning for processing of macro references. See comments on
    * PatternElement.clone()
    */
  @Override
  public Object clone() {
    ComplexPatternElement newPE = (ComplexPatternElement) super.clone();
    newPE.constraintGroup = (ConstraintGroup) constraintGroup.clone();
    return newPE;
  } // clone

  /** Finish: replace dynamic data structures with Java arrays; called
    * after parsing.
    */
  @Override
  public void finish() {
    constraintGroup.finish();
  } // finish

  /** Create a string representation of the object. */
  @Override
  public String toString() { return toString(""); }

  /** Create a string representation of the object. */
  @Override
  public String toString(String pad) {
    String newline = Strings.getNl();

    StringBuffer buf = new StringBuffer(
      pad + "CPE: bindingName(" + bindingName + "); kleeneOp("
    );

    if (kleeneOp != null)
      buf.append(kleeneOp);

    buf.append(
      "); constraintGroup(" + newline +
      constraintGroup.toString(Strings.addPadding(pad, INDENT_PADDING)) +
      newline + pad + ") CPE." + newline
    );

    return buf.toString();
  } // toString
  //needed by FSM

  public KleeneOperator getKleeneOp(){ return kleeneOp; };

  public ConstraintGroup getConstraintGroup(){ return constraintGroup; }

} // class ComplexPatternElement


// $Log$
// Revision 1.11  2005/01/11 13:51:36  ian
// Updating copyrights to 1998-2005 in preparation for v3.0
//
// Revision 1.10  2004/07/21 17:10:07  akshay
// Changed copyright from 1998-2001 to 1998-2004
//
// Revision 1.9  2004/03/25 13:01:15  valyt
// Imports optimisation throughout the Java sources
// (to get rid of annoying warnings in Eclipse)
//
// Revision 1.8  2001/09/13 12:09:49  kalina
// Removed completely the use of jgl.objectspace.Array and such.
// Instead all sources now use the new Collections, typically ArrayList.
// I ran the tests and I ran some documents and compared with keys.
// JAPE seems to work well (that's where it all was). If there are problems
// maybe look at those new structures first.
//
// Revision 1.7  2001/09/12 11:59:33  kalina
// Changed the old JAPE stuff to use the new Collections API,
// instead of com.objectspace stuff. Will eliminate that library
// completely very soon! Just one class left to re-implement,
//
// ParseCPSL.jj changed accordingly. All tested and no smoke.
//
// Revision 1.6  2000/11/08 16:35:02  hamish
// formatting
//
// Revision 1.5  2000/10/26 10:45:30  oana
// Modified in the code style
//
// Revision 1.4  2000/10/16 16:44:33  oana
// Changed the comment of DEBUG variable
//
// Revision 1.3  2000/10/10 15:36:35  oana
// Changed System.out in Out and System.err in Err;
// Added the DEBUG variable seted on false;
// Added in the header the licence;
//
// Revision 1.2  2000/04/14 18:02:46  valyt
// Added some gate.fsm classes
// added some accessor function in old jape classes
//
// Revision 1.1  2000/02/23 13:46:05  hamish
// added
//
// Revision 1.1.1.1  1999/02/03 16:23:01  hamish
// added gate2
//
// Revision 1.14  1998/11/13 13:17:16  hamish
// merged in the doc length bug fix
//
// Revision 1.13  1998/11/12 17:47:27  kalina
// A bug fixed, wasn't restoring the document length
//
// Revision 1.12  1998/11/05 13:36:29  kalina
// moved to use array of JdmAttributes for selectNextAnnotation instead
// of a sequence
//
// Revision 1.11  1998/11/01 21:21:35  hamish
// use Java arrays in transduction where possible
//
// Revision 1.10  1998/10/06 16:16:09  hamish
// negation percolation during constrain add; position advance when none at end
//
// Revision 1.9  1998/10/01 16:06:29  hamish
// new appelt transduction style, replacing buggy version
//
// Revision 1.8  1998/09/26 09:19:14  hamish
// added cloning of PE macros
//
// Revision 1.7  1998/09/17 16:48:29  hamish
// added macro defs and macro refs on LHS
//
// Revision 1.6  1998/08/12 15:39:32  hamish
// added padding toString methods
//
// Revision 1.5  1998/08/05 21:58:04  hamish
// backend works on simple test
//
// Revision 1.4  1998/08/03 19:51:19  hamish
// rollback added
//
// Revision 1.3  1998/07/30 11:05:14  hamish
// more jape
//
// Revision 1.2  1998/07/29 11:06:54  hamish
// first compiling version
//
// Revision 1.1.1.1  1998/07/28 16:37:46  hamish
// gate2 lives




© 2015 - 2024 Weber Informatics LLC | Privacy Policy