/*
* xtc - The eXTensible Compiler
* Copyright (C) 2007 Robert Grimm
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
package xtc.tree;
/**
* Visitor to strip parse trees. This visitor eliminates any
* formatting and tokens, replacing the former with the annotated node
* and the latter with the text.
*
* @author Robert Grimm
* @version $Revision: 1.2 $
*/
public class ParseTreeStripper extends Visitor {
/** Create a new parse tree stripper. */
public ParseTreeStripper() {
// Nothing to do.
}
/** Visit the specified generic node. */
public GNode visit(GNode n) {
final int size = n.size();
for (int i=0; i<size; i++) {
Object o = n.get(i);
if (o instanceof Node) {
o = dispatch((Node)o);
}
n.set(i, o);
}
return n;
}
/** Visit the specified annotation. */
public Annotation visit(Annotation n) {
// Preserve the annotation.
n.setNode((Node)dispatch(n.getNode()));
return n;
}
/** Visit the specified formatting. */
public Object visit(Formatting f) {
// Strip the formatting. Note that the returned object may be a
// node or a string.
return dispatch(f.getNode());
}
/** Visit the specified token. */
public String visit(Token t) {
// Strip the token.
return t.getTokenText();
}
}