LeftHandSide.java
001 /*
002  *  LeftHandSide.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: LeftHandSide.java 17597 2014-03-08 15:19:43Z markagreenwood $
015  */
016 
017 
018 package gate.jape;
019 
020 import java.io.Serializable;
021 import java.util.*;
022 
023 import gate.util.Strings;
024 
025 
026 /**
027   * The LHS of a CPSL rule. The pattern part. Has a ConstraintGroup and
028   * binding information that associates labels with ComplexPatternElements.
029   * Provides the Matcher interface.
030   */
031 public class LeftHandSide implements JapeConstants, Serializable
032 {
033   private static final long serialVersionUID = -188265607327929863L;
034 
035   /** The constraint group making up this LHS. */
036   private ConstraintGroup constraintGroup;
037 
038   /** Mapping of binding names to ComplexPatternElements */
039   private Map<String, ComplexPatternElement> bindingTable;
040 
041   /** Construction from a ConstraintGroup */
042   public LeftHandSide(ConstraintGroup constraintGroup) {
043     this.constraintGroup = constraintGroup;
044     bindingTable = new HashMap<String,ComplexPatternElement>();
045   // construction from ConstraintGroup
046 
047   /** Add a binding record. */
048   public void addBinding(
049     String bindingName,
050     ComplexPatternElement binding,
051     Set<String> bindingNameSet
052   throws JapeException {
053     if(bindingTable.get(bindingName!= null)
054       throw new JapeException(
055         "LeftHandSide.addBinding: " + bindingName + " already bound"
056       );
057     bindingTable.put(bindingName, binding);
058     bindingNameSet.add(bindingName);
059   // addBinding
060 
061   /** Finish: replace dynamic data structures with Java arrays; called
062     * after parsing.
063     */
064   public void finish() {
065     constraintGroup.finish();
066   // finish
067 
068   /** Create a string representation of the object. */
069   @Override
070   public String toString() { return toString("")}
071 
072   /** Create a string representation of the object. */
073   public String toString(String pad) {
074     String newline = Strings.getNl();
075     String newPad = Strings.addPadding(pad, INDENT_PADDING);
076 
077     StringBuffer buf = new StringBuffer(pad +
078       /*"LHS: hasMatched(" + hasMatched + ")*/ 
079       "; constraintGroup(" + newline +
080       constraintGroup.toString(newPad+ newline + pad +
081       "); bindingTable(" + newline + pad
082     );
083 
084     for(Iterator<String> i = bindingTable.keySet().iterator(); i.hasNext()) {
085       String bName = i.next();
086       ComplexPatternElement cpe = (bindingTable.get(bName));
087       buf.append(
088         pad + "bT.bn(" + bName + "), cpe.bn(" + cpe.getBindingName() ")"
089       );
090     }
091 
092     buf.append(newline + pad + ") LHS." + newline);
093 
094     return buf.toString();
095   // toString
096 
097   /** Get the constraint group */
098   public ConstraintGroup getConstraintGroup(){
099     return constraintGroup;
100   }
101 
102 // class LeftHandSide
103 
104 
105 // $Log$
106 // Revision 1.10  2005/01/11 13:51:36  ian
107 // Updating copyrights to 1998-2005 in preparation for v3.0
108 //
109 // Revision 1.9  2004/07/21 17:10:08  akshay
110 // Changed copyright from 1998-2001 to 1998-2004
111 //
112 // Revision 1.8  2004/03/25 13:01:13  valyt
113 // Imports optimisation throughout the Java sources
114 // (to get rid of annoying warnings in Eclipse)
115 //
116 // Revision 1.7  2001/09/12 11:59:33  kalina
117 // Changed the old JAPE stuff to use the new Collections API,
118 // instead of com.objectspace stuff. Will eliminate that library
119 // completely very soon! Just one class left to re-implement,
120 //
121 // ParseCPSL.jj changed accordingly. All tested and no smoke.
122 //
123 // Revision 1.6  2000/11/08 16:35:03  hamish
124 // formatting
125 //
126 // Revision 1.5  2000/10/16 16:44:33  oana
127 // Changed the comment of DEBUG variable
128 //
129 // Revision 1.4  2000/10/10 15:36:36  oana
130 // Changed System.out in Out and System.err in Err;
131 // Added the DEBUG variable seted on false;
132 // Added in the header the licence;
133 //
134 // Revision 1.3  2000/05/02 16:54:26  hamish
135 // comment
136 //
137 // Revision 1.2  2000/04/14 18:02:46  valyt
138 // Added some gate.fsm classes
139 // added some accessor function in old jape classes
140 //
141 // Revision 1.1  2000/02/23 13:46:08  hamish
142 // added
143 //
144 // Revision 1.1.1.1  1999/02/03 16:23:01  hamish
145 // added gate2
146 //
147 // Revision 1.14  1998/11/01 21:21:37  hamish
148 // use Java arrays in transduction where possible
149 //
150 // Revision 1.13  1998/10/30 15:31:07  kalina
151 // Made small changes to make compile under 1.2 and 1.1.x
152 //
153 // Revision 1.12  1998/10/01 16:06:32  hamish
154 // new appelt transduction style, replacing buggy version
155 //
156 // Revision 1.11  1998/09/21 16:19:49  hamish
157 // cope with CPEs with no binding
158 //
159 // Revision 1.10  1998/09/17 16:48:32  hamish
160 // added macro defs and macro refs on LHS
161 //
162 // Revision 1.9  1998/08/19 20:21:39  hamish
163 // new RHS assignment expression stuff added
164 //
165 // Revision 1.8  1998/08/18 12:43:07  hamish
166 // fixed SPT bug, not advancing newPosition
167 //
168 // Revision 1.7  1998/08/12 19:05:45  hamish
169 // fixed multi-part CG bug; set reset to real reset and fixed multi-doc bug
170 //
171 // Revision 1.6  1998/08/12 15:39:37  hamish
172 // added padding toString methods
173 //
174 // Revision 1.5  1998/08/03 19:51:22  hamish
175 // rollback added
176 //
177 // Revision 1.4  1998/07/31 13:12:20  mks
178 // done RHS stuff, not tested
179 //
180 // Revision 1.3  1998/07/30 11:05:19  mks
181 // more jape
182 //
183 // Revision 1.2  1998/07/29 11:06:59  hamish
184 // first compiling version
185 //
186 // Revision 1.1.1.1  1998/07/28 16:37:46  hamish
187 // gate2 lives