/**
* Copyright (c) 2007 - 2009 OptXware Research and Development LLC.
* 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:
*   Daniel Varro - Initial API and implementation
*
* This file was generated automatically based upon the VTCL LPG Parser
* VTCLParser.g 
*/

package org.eclipse.viatra2.lpgparser.ast;

import org.eclipse.viatra2.lpgparser.*;
import lpg.lpgjavaruntime.*;

/**
 *<b>
 *<li>Rule 63:  GTRuleBodyAST ::= ERROR_TOKEN
 *</b>
 */
public class GTRuleBodyAST1 extends ASTNodeToken implements IGTRuleBodyAST
{
    private VTCLParser environment;
    public VTCLParser getEnvironment() { return environment; }

    public GTRuleBodyAST1(VTCLParser environment, IToken token)    {
        super(token);
        this.environment = environment;
        initialize();
    }

    public int hashCode()
    {
        return toString().hashCode();
    }

    public void accept(Visitor v) { v.visit(this); }
    public void accept(ArgumentVisitor v, Object o) { v.visit(this, o); }
    public Object accept(ResultVisitor v) { return v.visit(this); }
    public Object accept(ResultArgumentVisitor v, Object o) { return v.visit(this, o); }

	void initialize()
    {
               //reportErrorTokenMessage(getRhsTokenIndex(1), "Namespace import");
        }

    }


