blob: 70473f639ea874471f6b550491f4d17c98a19f79 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gymnast.generator.core.ast;
import org.eclipse.gymnast.runtime.core.ast.ASTNode;
import org.eclipse.gymnast.runtime.core.ast.ASTNodeImpl;
import org.eclipse.gymnast.runtime.core.ast.TokenInfo;
import antlr.Token;
/**
* The superclass of all ASTNodes for language Gymnast.
*
* @generated by Gymnast from gymnast.ast on Aug 15, 2004 2:28:15 PM
*/
public abstract class GymnastASTNode extends ASTNodeImpl {
protected GymnastASTNode _parent;
/**
* @return the parent of this ASTNode or null if this is the root node of a tree
*/
public ASTNode getParent() {
return _parent;
}
/**
* Construct a new GymnastASTNode.
*/
public GymnastASTNode() {
super();
}
/**
* Construct a new GymnastASTNode.
*
* @param token a Token to initialize the offset and text for this node.
*/
public GymnastASTNode(Token token) {
super(new TokenInfo(token.getText(), token.getColumn(), token.getType()));
}
/**
* The external entry point used to initiate the visitor on this node.
*
* @param visitor the Visitor to visit this node tree
*/
public final void accept(GymnastASTNodeVisitor visitor) {
visitor.preVisit(this);
acceptImpl(visitor);
visitor.postVisit(this);
}
/**
* This method can be overridden by subclasses which should provide exactly
* the same implementation. Here <code>this</code> refers to the generic node
* class, but in the subclass implementations <code>this</code> will refer to
* the specific subclass type. Thus the correct specific <code>beginVisit</code>
* and <code>endVisit</code> methods will be invoked for each subclass and the
* generic methods will be invoked for subclasses that don't need specific visitor
* behavior.
*/
public void acceptImpl(GymnastASTNodeVisitor visitor) {
boolean visitChildren = visitor.beginVisit(this);
if (visitChildren) visitChildren(visitor);
visitor.endVisit(this);
}
/**
* Iterate through the children of this node and accept the visitor on each.
*/
protected void visitChildren(GymnastASTNodeVisitor visitor) {
for (int i = 0; i < getChildCount(); i++) {
ASTNode child = getChild(i);
if (child instanceof GymnastASTNode) {
GymnastASTNode c = (GymnastASTNode)child;
c.accept(visitor);
}
}
}
}