/**
* 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 lpg.lpgjavaruntime.*;

/**
 *<b>
 *<li>Rule 252:  ValueLocalNameAST ::= IDENTIFIER
 *</b>
 */
public class ValueLocalNameAST1 extends ASTNodeToken implements IValueLocalNameAST
{
    public ValueLocalNameAST1(IToken token) { super(token); 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); }
}


