01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.lib.contract.lang.parser;
28:
29: import java.util.*;
30:
31: import org.cougaar.lib.contract.lang.*;
32:
33: /**
34: * Uses a <code>VisitTokenizer</code> which controls a
35: * <code>TreeVisitor</code> to replay the visits.
36: */
37: public class VisitReplayer {
38:
39: TreeVisitor toVis;
40: VisitTokenizer fromTok;
41:
42: public VisitReplayer(TreeVisitor toVis, VisitTokenizer fromTok) {
43: this .toVis = toVis;
44: this .fromTok = fromTok;
45: }
46:
47: public void replay() {
48: replay(toVis, fromTok);
49: }
50:
51: public static void replay(TreeVisitor toVisitor,
52: VisitTokenizer fromTokenizer) {
53: toVisitor.initialize();
54: fromTokenizer.mark();
55: fromTokenizer.rewind();
56: while (true) {
57: switch (fromTokenizer.nextToken()) {
58: case VisitTokenizer.TT_END:
59: toVisitor.visitEnd();
60: break;
61: case VisitTokenizer.TT_END_OF_TREE:
62: toVisitor.visitEndOfTree();
63: fromTokenizer.reset();
64: return;
65: case VisitTokenizer.TT_WORD:
66: toVisitor.visitWord(fromTokenizer.getWord());
67: break;
68: case VisitTokenizer.TT_CONSTANT:
69: toVisitor.visitConstant(
70: fromTokenizer.getConstantType(), fromTokenizer
71: .getConstantValue());
72: break;
73: }
74: }
75: }
76:
77: }
|