All Downloads are FREE. Search and download functionalities are using the official Maven repository.

yale.compiler.compiler.0.9.6.source-code.CmcEmitter Maven / Gradle / Ivy

There is a newer version: 0.9.10
Show newest version

/*  Generatedby JBurg version Set in build.properties */

package org.apache.royale.compiler.internal.as.codegen;


    import org.apache.royale.compiler.problems.ICompilerProblem;
    import org.apache.royale.compiler.problems.*;
    import org.apache.royale.compiler.exceptions.BURMAbortException;

    import static org.apache.royale.abc.ABCConstants.*;

//    import org.apache.royale.abc.semantics.Label;
    import org.apache.royale.abc.semantics.Name;
    import org.apache.royale.abc.semantics.Namespace;
    import org.apache.royale.abc.semantics.ECMASupport;
    import org.apache.royale.abc.instructionlist.InstructionList;

//    import org.apache.royale.compiler.constants.IASLanguageConstants;

    import org.apache.royale.compiler.tree.ASTNodeID;
    import static org.apache.royale.compiler.tree.ASTNodeID.*;

    import org.apache.royale.compiler.internal.semantics.SemanticUtils;

    import org.apache.royale.compiler.tree.as.IASNode;
//    import org.apache.royale.compiler.tree.as.ITryNode;

@SuppressWarnings({"rawtypes", "unchecked", "unused"})
public class CmcEmitter
	
{
	java.util.Stack __reducedValues = new java.util.Stack();

    static final boolean NEED_VALUE = true;
    static final boolean DISCARD_VALUE = false;


    /**
     *  The reducer has all the implementation
     *  logic for the rewrite; the BURM constructed
     *  by this specification drives that logic.
     */
    ABCGeneratingReducer reducer;

    /**
     *  Delegate calls to pushNumericConstant to the reducer.
     *  This routine is called from other parts of the code generator,
     *  so it's necessary to keep this layer of indirection.
     */
    public static void pushNumericConstant(long value, InstructionList result_list)
    {
        ABCGeneratingReducer.pushNumericConstant(value, result_list);
    }

    /*
     *  **  Cost functions  **
     */


    /**
     *  @return "feasible" if the reducer can reduce this to a dotted name.
     */
    int isDottedName(IASNode iNode)
    {
       return reducer.isDottedName(iNode);
    }

    /**
     *  @return "feasible" if the reducer can reduce this to a package name.
     */
    int isPackageName(IASNode iNode)
    {
       return reducer.isPackageName(iNode);
    }

    /**
     *  @return "feasible" if this node's qualifier is a compile-time constant.
     */
    int qualifierIsCompileTimeConstant(IASNode iNode)
    {
       return reducer.qualifierIsCompileTimeConstant(iNode);
    }

    /**
     *  @return "feasible" if this node can be resolved to a compile-time constant.
     */
    int isCompileTimeConstant(IASNode iNode)
    {
       return reducer.isCompileTimeConstant(iNode);
    }

    /**
     *  @return "feasible" if this node is for 'new Array()'.
     */
    int isEmptyArrayConstructor(IASNode iNode)
    {
        return reducer.isEmptyArrayConstructor(iNode);
    }

    /**
     *  @return "feasible" if this node is for 'new Object()'.
     */
    int isEmptyObjectConstructor(IASNode iNode)
    {
        return reducer.isEmptyObjectConstructor(iNode);
    }
    
    /**
     *  @return "feasible" if this node is "super(this)".
     */
    int isSuperThisForFieldAccess(IASNode iNode)
    {
        return SemanticUtils.isSuperThisForFieldAccess(iNode);
    }

    /**
     *  recordError is a convenience method for error reductions;
     *  it adds a problem to the current set of problems and
     *  returns an empty InstructionList.
     *  @return an empty InstructionList.
     */
    InstructionList recordError(ICompilerProblem problem)
    {
        reducer.getProblems().add(problem);
        return new InstructionList();
    }

	
	public static final int __non_resolving_identifier_NT = 1;
	public static final int __type_name_NT = 2;
	public static final int __integer_constant_NT = 3;
	public static final int __boolean_literal_NT = 4;
	public static final int __finally_clause_NT = 5;
	public static final int __literal_NT = 6;
	public static final int __conditionalJump_NT = 7;
	public static final int __decl_name_NT = 8;
	public static final int __runtime_name_expression_NT = 9;
	public static final int __double_constant_NT = 10;
	public static final int __function_NT = 11;
	public static final int __parameter_NT = 12;
	public static final int __statement_NT = 13;
	public static final int __return_type_name_NT = 14;
	public static final int __object_literal_NT = 15;
	public static final int __catch_block_NT = 16;
	public static final int __boolean_constant_NT = 17;
	public static final int __expression_NT = 18;
	public static final int __numeric_constant_NT = 19;
	public static final int __type_param_expression_NT = 20;
	public static final int __required_constant_value_NT = 21;
	public static final int __object_literal_element_NT = 22;
	public static final int __import_name_NT = 23;
	public static final int __void_expression_NT = 24;
	public static final int __conditionalElements_NT = 25;
	public static final int __comparison_expression_NT = 26;
	public static final int __constant_value_NT = 27;
	public static final int __e4x_literal_NT = 28;
	public static final int __vector_literal_NT = 29;
	public static final int __new_type_name_NT = 30;
	public static final int __qualifiedNamePart_NT = 31;
	public static final int __string_constant_NT = 32;
	public static final int __name_NT = 33;
	public static final int __parameterList_NT = 34;
	public static final int __mxml_data_binding_setter_expression_NT = 35;
	public static final int __var_decl_NT = 36;
	public static final int __dottedNamePart_NT = 37;
	public static final int __array_literal_NT = 38;
	public static final int __uint_constant_NT = 39;
	public static final int nStates = 39;

	private static final JBurgSubgoal[][] ___subgoals_by_rule = 
	{
		null,
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
			new JBurgSubgoal(__boolean_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
			new JBurgSubgoal(__boolean_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
			new JBurgSubgoal(__boolean_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
			new JBurgSubgoal(__boolean_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
			new JBurgSubgoal(__boolean_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
			new JBurgSubgoal(__boolean_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
			new JBurgSubgoal(__numeric_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__constant_value_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__boolean_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__numeric_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__string_constant_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
		},
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		{
			new JBurgSubgoal(__statement_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,true,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1,1),
			new JBurgSubgoal(__expression_NT,true,2,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,true,1,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,true,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,true,0,0),
		},
		{
			new JBurgSubgoal(__e4x_literal_NT,true,0,0),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__function_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,true,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__statement_NT,true,0),
		},
		{
			new JBurgSubgoal(__statement_NT,true,0),
		},
		null,
		null,
		{
			new JBurgSubgoal(__name_NT,false,0,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__void_expression_NT,true,1),
		},
		{
			new JBurgSubgoal(__statement_NT,true,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
			new JBurgSubgoal(__statement_NT,true,1),
		},
		null,
		{
			new JBurgSubgoal(__void_expression_NT,false,0,0,0),
			new JBurgSubgoal(__conditionalJump_NT,false,0,0,1),
			new JBurgSubgoal(__void_expression_NT,false,0,0,2),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__runtime_name_expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__statement_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		null,
		null,
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__var_decl_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,0,0,1),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__var_decl_NT,false,0,0,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0,1),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__void_expression_NT,true,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__statement_NT,false,0,0,1),
			new JBurgSubgoal(__conditionalElements_NT,true,1),
		},
		{
			new JBurgSubgoal(__import_name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		null,
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		null,
		null,
		{
			new JBurgSubgoal(__non_resolving_identifier_NT,false,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__statement_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__statement_NT,true,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		null,
		null,
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__string_constant_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,1),
			new JBurgSubgoal(__expression_NT,true,0,2),
		},
		{
			new JBurgSubgoal(__new_type_name_NT,false,0,1),
			new JBurgSubgoal(__expression_NT,true,0,2),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,1,1),
			new JBurgSubgoal(__expression_NT,true,0,2),
		},
		{
			new JBurgSubgoal(__vector_literal_NT,false,0,1),
		},
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		{
			new JBurgSubgoal(__object_literal_element_NT,true,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
			new JBurgSubgoal(__required_constant_value_NT,false,0,2),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__type_param_expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__parameter_NT,true,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__expression_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
			new JBurgSubgoal(__name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0),
			new JBurgSubgoal(__expression_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0),
			new JBurgSubgoal(__name_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0),
			new JBurgSubgoal(__expression_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__name_NT,false,0,1,0),
			new JBurgSubgoal(__expression_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__dottedNamePart_NT,false,0,0),
			new JBurgSubgoal(__dottedNamePart_NT,false,0,1),
		},
		null,
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0,0),
		},
		{
			new JBurgSubgoal(__void_expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		null,
		null,
		null,
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__statement_NT,true,1),
		},
		{
			new JBurgSubgoal(__statement_NT,true,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__conditionalElements_NT,true,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1),
			new JBurgSubgoal(__expression_NT,false,0,2),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__statement_NT,false,0,0),
			new JBurgSubgoal(__finally_clause_NT,false,0,1,0),
			new JBurgSubgoal(__catch_block_NT,true,2),
		},
		{
			new JBurgSubgoal(__statement_NT,false,0,0),
			new JBurgSubgoal(__catch_block_NT,true,1),
		},
		{
			new JBurgSubgoal(__statement_NT,false,0,0),
			new JBurgSubgoal(__finally_clause_NT,false,0,1,0),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
			new JBurgSubgoal(__var_decl_NT,true,2),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
			new JBurgSubgoal(__expression_NT,false,0,2),
			new JBurgSubgoal(__var_decl_NT,true,3),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__return_type_name_NT,false,0,2),
			new JBurgSubgoal(__statement_NT,false,0,3),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__return_type_name_NT,false,0,2),
			new JBurgSubgoal(__statement_NT,false,0,3),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,0,1),
			new JBurgSubgoal(__return_type_name_NT,false,0,0,2),
			new JBurgSubgoal(__statement_NT,false,0,0,3),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__return_type_name_NT,false,0,2),
			new JBurgSubgoal(__statement_NT,false,0,3),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__return_type_name_NT,false,0,2),
			new JBurgSubgoal(__statement_NT,false,0,3),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
			new JBurgSubgoal(__var_decl_NT,true,2),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
			new JBurgSubgoal(__constant_value_NT,false,0,2),
			new JBurgSubgoal(__var_decl_NT,true,3),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,1),
			new JBurgSubgoal(__expression_NT,false,0,2),
			new JBurgSubgoal(__var_decl_NT,true,3),
		},
		{
			new JBurgSubgoal(__decl_name_NT,false,0,0,0),
			new JBurgSubgoal(__type_name_NT,false,0,0,1),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__statement_NT,false,0,2),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__statement_NT,false,0,2),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,0,1),
			new JBurgSubgoal(__statement_NT,false,0,0,2),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__statement_NT,false,0,2),
		},
		{
			new JBurgSubgoal(__parameterList_NT,false,0,1),
			new JBurgSubgoal(__statement_NT,false,0,2),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,false,0,1,1),
		},
		{
			new JBurgSubgoal(__name_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__var_decl_NT,true,0),
		},
		{
			new JBurgSubgoal(__type_name_NT,false,0,0),
			new JBurgSubgoal(__expression_NT,true,0,1),
		},
		null,
		null,
		null,
		{
			new JBurgSubgoal(__constant_value_NT,false,0,0),
		},
		null,
		null,
		null,
		null,
		null,
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		{
			new JBurgSubgoal(__expression_NT,false,0,0),
			new JBurgSubgoal(__statement_NT,false,0,1),
		},
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
		null,
	};


	public static final int ERROR_TRAP = 268435456;
	
	public JBurgAnnotation label( IASNode to_be_labelled)
	{
		JBurgAnnotation result = null;

		int i;

		int arity;

		result = this.getJBurgAnnotation(to_be_labelled);
		arity = SemanticUtils.getChildCount(to_be_labelled);
		i = 0;
		while ( ( arity > i ) )
		{
			result.addChild(this.label(((IASNode)SemanticUtils.getNthChild(to_be_labelled, i))));
			i =  (i + 1) ;
		}
		return(result);
	}

	/* void_expression */
	
	private InstructionList action_1( IASNode __p) throws java.lang.Exception
	{
		InstructionList expression = (InstructionList)__reducedValues.pop();
		return reducer.transform_expression_to_void_expression(__p,expression);
	}

	/* expression */
	
	private InstructionList action_2( IASNode __p) throws java.lang.Exception
	{
		InstructionList rvalue = (InstructionList)__reducedValues.pop();
		InstructionList non_lvalue = (InstructionList)__reducedValues.pop();
		return reducer.error_reduce_Op_AssignId(__p,non_lvalue,rvalue);
	}

	/* conditionalJump */
	
	private InstructionList action_3( IASNode __p) throws java.lang.Exception
	{
		InstructionList expression = (InstructionList)__reducedValues.pop();
		return reducer.transform_expression_to_conditionalJump(__p,expression);
	}

	/* type_name */
	
	private Binding action_4( IASNode __p) throws java.lang.Exception
	{
		Binding name = (Binding)__reducedValues.pop();
		return reducer.reduce_nameToTypeName(name,true);
	}

	/* new_type_name */
	
	private Binding action_5( IASNode __p) throws java.lang.Exception
	{
		Binding type_name = (Binding)__reducedValues.pop();
		return reducer.reduce_nameToTypeName(type_name,false);
	}

	/* type_param_expression */
	
	private InstructionList action_6( IASNode __p) throws java.lang.Exception
	{
		Binding name = (Binding)__reducedValues.pop();
		return reducer.reduce_typeNameParameter(__p,name);
	}

	/* expression */
	
	private InstructionList action_7( IASNode __p) throws java.lang.Exception
	{
		Binding name = (Binding)__reducedValues.pop();
		return reducer.transform_name_to_expression(__p,name);
	}

	/* expression */
	
	private InstructionList action_8( IASNode __p) throws java.lang.Exception
	{
		ABCGeneratingReducer.RuntimeMultiname runtime_name_expression = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.transform_runtime_name_expression(__p,runtime_name_expression);
	}

	/* expression */
	
	private InstructionList action_9( IASNode __p) throws java.lang.Exception
	{
		String string_constant = (String)__reducedValues.pop();
		return reducer.transform_string_constant(__p,string_constant);
	}

	/* expression */
	
	private InstructionList action_10( IASNode __p) throws java.lang.Exception
	{
		Integer integer_constant = (Integer)__reducedValues.pop();
		return reducer.transform_integer_constant(__p,integer_constant);
	}

	/* expression */
	
	private InstructionList action_11( IASNode __p) throws java.lang.Exception
	{
		Long uint_constant = (Long)__reducedValues.pop();
		return reducer.transform_uint_constant(__p,uint_constant);
	}

	/* expression */
	
	private InstructionList action_12( IASNode __p) throws java.lang.Exception
	{
		Boolean boolean_constant = (Boolean)__reducedValues.pop();
		return reducer.transform_boolean_constant(__p,boolean_constant);
	}

	/* numeric_constant */
	
	private Number action_13( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_multiply);
		    return l.doubleValue() * r.doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_14( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_multiply);
		    return ECMASupport.toNumeric(l).doubleValue() * ECMASupport.toNumeric(r).doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_15( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_divide);
		    return l.doubleValue() / r.doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_16( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_divide);
		    return ECMASupport.toNumeric(l).doubleValue() / ECMASupport.toNumeric(r).doubleValue();
		}
	}

	/* double_constant */
	
	private Double action_17( IASNode __p) throws java.lang.Exception
	{
		Number l = (Number)__reducedValues.pop();
		{
		    return Double.NaN;
		}
	}

	/* numeric_constant */
	
	private Number action_18( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_modulo);
		    return l.doubleValue() % r.doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_19( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_modulo);
		    return ECMASupport.toNumeric(l).doubleValue() % ECMASupport.toNumeric(r).doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_20( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_add);
		    return l.doubleValue() + r.doubleValue();
		}
	}

	/* constant_value */
	
	private Object action_21( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		return reducer.reduce_constantAddition(__p,l,r);
	}

	/* string_constant */
	
	private String action_22( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		return reducer.reduce_constantStringConcatenation(__p,l,r);
	}

	/* string_constant */
	
	private String action_23( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		return reducer.reduce_constantStringConcatenation(__p,l,r);
	}

	/* string_constant */
	
	private String action_24( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		return reducer.reduce_constantStringConcatenation(__p,l,r);
	}

	/* numeric_constant */
	
	private Number action_25( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_subtract);
		    return l.doubleValue() - r.doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_26( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_subtract);
		    return ECMASupport.toNumeric(l).doubleValue() - ECMASupport.toNumeric(r).doubleValue();
		}
	}

	/* integer_constant */
	
	private Integer action_27( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_lshift);
		    return ECMASupport.leftShiftOperation(l, r);
		}
	}

	/* integer_constant */
	
	private Integer action_28( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_lshift);
		    return ECMASupport.leftShiftOperation(ECMASupport.toNumeric(l), ECMASupport.toNumeric(r));
		}
	}

	/* integer_constant */
	
	private Integer action_29( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_rshift);
		    return ECMASupport.signedRightShiftOperation(l, r);
		}
	}

	/* integer_constant */
	
	private Integer action_30( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_rshift);
		    return ECMASupport.signedRightShiftOperation(ECMASupport.toNumeric(l), ECMASupport.toNumeric(r));
		}
	}

	/* uint_constant */
	
	private Long action_31( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_urshift);
		    return ECMASupport.unsignedRightShiftOperation(l, r);
		}
	}

	/* uint_constant */
	
	private Long action_32( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_urshift);
		    return ECMASupport.unsignedRightShiftOperation(ECMASupport.toNumeric(l), ECMASupport.toNumeric(r));
		}
	}

	/* integer_constant */
	
	private Integer action_33( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_bitand);
		    return ECMASupport.toInt32(l) & ECMASupport.toInt32(r);
		}
	}

	/* integer_constant */
	
	private Integer action_34( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_bitand);
		    return ECMASupport.toInt32(l) & ECMASupport.toInt32(r);
		}
	}

	/* integer_constant */
	
	private Integer action_35( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_bitor);
		    return ECMASupport.toInt32(l) | ECMASupport.toInt32(r);
		}
	}

	/* integer_constant */
	
	private Integer action_36( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_bitor);
		    return ECMASupport.toInt32(l) | ECMASupport.toInt32(r);
		}
	}

	/* integer_constant */
	
	private Integer action_37( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_bitxor);
		    return ECMASupport.toInt32(l) ^ ECMASupport.toInt32(r);
		}
	}

	/* integer_constant */
	
	private Integer action_38( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		    reducer.checkBinaryOp(__p, OP_bitxor);
		    return ECMASupport.toInt32(l) ^ ECMASupport.toInt32(r);
		}
	}

	/* numeric_constant */
	
	private Number action_39( IASNode __p) throws java.lang.Exception
	{
		Number e = (Number)__reducedValues.pop();
		{
		    reducer.checkUnaryOp(__p, OP_negate);
		    return -e.doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_40( IASNode __p) throws java.lang.Exception
	{
		Object e = (Object)__reducedValues.pop();
		{
		    reducer.checkUnaryOp(__p, OP_negate);
		    return -(ECMASupport.toNumeric(e).doubleValue());
		}
	}

	/* numeric_constant */
	
	private Number action_41( IASNode __p) throws java.lang.Exception
	{
		Number e = (Number)__reducedValues.pop();
		{
		    reducer.checkUnaryOp(__p, reducer.op_unplus());
		    return e.doubleValue();
		}
	}

	/* numeric_constant */
	
	private Number action_42( IASNode __p) throws java.lang.Exception
	{
		Object e = (Object)__reducedValues.pop();
		{
		    reducer.checkUnaryOp(__p, reducer.op_unplus());
		    return ECMASupport.toNumeric(e);
		}
	}

	/* integer_constant */
	
	private Integer action_43( IASNode __p) throws java.lang.Exception
	{
		Number unary = (Number)__reducedValues.pop();
		{
		    reducer.checkUnaryOp(__p, OP_bitnot);
		    return ~ECMASupport.toInt32(unary);
		}
	}

	/* integer_constant */
	
	private Integer action_44( IASNode __p) throws java.lang.Exception
	{
		Object unary = (Object)__reducedValues.pop();
		{
		    reducer.checkUnaryOp(__p, OP_bitnot);
		    return ~ECMASupport.toInt32(unary);
		}
	}

	/* boolean_constant */
	
	private Boolean action_45( IASNode __p) throws java.lang.Exception
	{
		Boolean r = (Boolean)__reducedValues.pop();
		Boolean l = (Boolean)__reducedValues.pop();
		{
		     return l && r;
		 }
	}

	/* numeric_constant */
	
	private Number action_46( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		     return ECMASupport.logicalAnd(l, r);
		 }
	}

	/* string_constant */
	
	private String action_47( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		{
		     return ECMASupport.logicalAnd(l, r);
		 }
	}

	/* constant_value */
	
	private Object action_48( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		     Boolean lBool = ECMASupport.toBoolean(l);
		     if( !lBool )
		        return l;
		     return r;
		 }
	}

	/* boolean_constant */
	
	private Boolean action_49( IASNode __p) throws java.lang.Exception
	{
		Boolean r = (Boolean)__reducedValues.pop();
		Boolean l = (Boolean)__reducedValues.pop();
		{
		     return l || r;
		 }
	}

	/* numeric_constant */
	
	private Number action_50( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		     return ECMASupport.logicalOr(l, r);
		 }
	}

	/* string_constant */
	
	private String action_51( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		{
		     return ECMASupport.logicalOr(l, r);
		 }
	}

	/* constant_value */
	
	private Object action_52( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		     Boolean lBool = ECMASupport.toBoolean(l);
		     if( lBool )
		        return l;
		     return r;
		 }
	}

	/* boolean_constant */
	
	private Boolean action_53( IASNode __p) throws java.lang.Exception
	{
		Boolean r = (Boolean)__reducedValues.pop();
		Boolean l = (Boolean)__reducedValues.pop();
		{
		     return l.equals(r); // can't use == for boxed types
		 }
	}

	/* boolean_constant */
	
	private Boolean action_54( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		     return ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_55( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		{
		     return ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_56( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		     return ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_57( IASNode __p) throws java.lang.Exception
	{
		Boolean r = (Boolean)__reducedValues.pop();
		Boolean l = (Boolean)__reducedValues.pop();
		{
		 					      // for booleans, strict equals is the same as equals
		     return l.equals(r); // can't use == for boxed types
		 }
	}

	/* boolean_constant */
	
	private Boolean action_58( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		     // strict equality is the same as equality for numeric numeric_constants
		     return ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_59( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		{
		     // strict equality is the same as equality for string_constants
		     return ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_60( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		     return ECMASupport.strictEquals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_61( IASNode __p) throws java.lang.Exception
	{
		Boolean r = (Boolean)__reducedValues.pop();
		Boolean l = (Boolean)__reducedValues.pop();
		{
		     return !l.equals(r); // can't use == for boxed types
		 }
	}

	/* boolean_constant */
	
	private Boolean action_62( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		     return !ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_63( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		{
		     return !ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_64( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		     return !ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_65( IASNode __p) throws java.lang.Exception
	{
		Boolean r = (Boolean)__reducedValues.pop();
		Boolean l = (Boolean)__reducedValues.pop();
		{
		     return !l.equals(r); // can't use == for boxed types
		 }
	}

	/* boolean_constant */
	
	private Boolean action_66( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		
		     // strict equality is same as equality for numbers
		     return !ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_67( IASNode __p) throws java.lang.Exception
	{
		String r = (String)__reducedValues.pop();
		String l = (String)__reducedValues.pop();
		{
		     return !ECMASupport.equals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_68( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		      return !ECMASupport.strictEquals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_69( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		      return ECMASupport.lessThan(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_70( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		      return ECMASupport.lessThan(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_71( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		      return ECMASupport.lessThanEquals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_72( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		      return ECMASupport.lessThanEquals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_73( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		      return ECMASupport.greaterThan(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_74( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		      return ECMASupport.greaterThan(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_75( IASNode __p) throws java.lang.Exception
	{
		Number r = (Number)__reducedValues.pop();
		Number l = (Number)__reducedValues.pop();
		{
		      return ECMASupport.greaterThanEquals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_76( IASNode __p) throws java.lang.Exception
	{
		Object r = (Object)__reducedValues.pop();
		Object l = (Object)__reducedValues.pop();
		{
		      return ECMASupport.greaterThanEquals(l, r);
		 }
	}

	/* boolean_constant */
	
	private Boolean action_77( IASNode __p) throws java.lang.Exception
	{
		Boolean b = (Boolean)__reducedValues.pop();
		{
		    return !b;
		}
	}

	/* boolean_constant */
	
	private Boolean action_78( IASNode __p) throws java.lang.Exception
	{
		Number e = (Number)__reducedValues.pop();
		{
		     return ECMASupport.logicalNot(e);
		}
	}

	/* boolean_constant */
	
	private Boolean action_79( IASNode __p) throws java.lang.Exception
	{
		String e = (String)__reducedValues.pop();
		{
		     return ECMASupport.logicalNot(e);
		}
	}

	/* boolean_constant */
	
	private Boolean action_80( IASNode __p) throws java.lang.Exception
	{
		Object e = (Object)__reducedValues.pop();
		{
		     return ECMASupport.logicalNot(e);
		}
	}

	/* required_constant_value */
	
	private Object action_81( IASNode __p) throws java.lang.Exception
	{
		InstructionList expression = (InstructionList)__reducedValues.pop();
		return reducer.transform_expression_to_constant_value(__p,expression);
	}

	/* constant_value */
	
	private Object action_82( IASNode __p) throws java.lang.Exception
	{
		Binding name = (Binding)__reducedValues.pop();
		return reducer.transform_name_to_constant_value(__p);
	}

	/* integer_constant */
	
	private Integer action_83( IASNode __p) throws java.lang.Exception
	{
		return reducer.getIntegerZeroContent(__p);
	}

	/* uint_constant */
	
	private Long action_84( IASNode __p) throws java.lang.Exception
	{
		return reducer.getIntegerZeroContentAsLong(__p);
	}

	/* constant_value */
	
	private Object action_85( IASNode __p) throws java.lang.Exception
	{
		String string_constant = (String)__reducedValues.pop();
		return reducer.transform_string_constant_to_constant(__p,string_constant);
	}

	/* constant_value */
	
	private Object action_86( IASNode __p) throws java.lang.Exception
	{
		Boolean boolean_constant = (Boolean)__reducedValues.pop();
		return reducer.transform_boolean_constant_to_constant(__p,boolean_constant);
	}

	/* constant_value */
	
	private Object action_87( IASNode __p) throws java.lang.Exception
	{
		Number numeric_constant = (Number)__reducedValues.pop();
		return reducer.transform_numeric_constant_to_constant(__p,numeric_constant);
	}

	/* expression */
	
	private InstructionList action_88( IASNode __p) throws java.lang.Exception
	{
		Double double_constant = (Double)__reducedValues.pop();
		return reducer.transform_double_constant(__p,double_constant);
	}

	/* expression */
	
	private InstructionList action_89( IASNode __p) throws java.lang.Exception
	{
		Number numeric_constant = (Number)__reducedValues.pop();
		return reducer.transform_numeric_constant(__p,numeric_constant);
	}

	/* expression */
	
	private InstructionList action_90( IASNode __p) throws java.lang.Exception
	{
		Object constant_value = (Object)__reducedValues.pop();
		return reducer.transform_constant_value(__p,constant_value);
	}

	/* expression */
	
	private InstructionList action_91( IASNode __p) throws java.lang.Exception
	{
		String non_resolving_identifier = (String)__reducedValues.pop();
		return reducer.transform_non_resolving_identifier(__p,non_resolving_identifier);
	}

	/* boolean_literal */
	
	private InstructionList action_92( IASNode __p) throws java.lang.Exception
	{
		Boolean boolean_constant = (Boolean)__reducedValues.pop();
		return reducer.transform_boolean_constant(__p,boolean_constant);
	}

	/* mxml_data_binding_setter_expression */
	
	private InstructionList action_93( IASNode __p) throws java.lang.Exception
	{
		Binding name = (Binding)__reducedValues.pop();
		return reducer.reduceName_to_mxmlDataBindingSetter(__p,name);
	}

	/* mxml_data_binding_setter_expression */
	
	private InstructionList action_94( IASNode __p) throws java.lang.Exception
	{
		ABCGeneratingReducer.RuntimeMultiname runtime_name_expression = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.reduceRuntimeName_to_mxmlDataBindingSetter(__p,runtime_name_expression);
	}

	/* statement */
	
	private InstructionList action_95( IASNode __p) throws java.lang.Exception
	{
		InstructionList only_has_body = (InstructionList)__reducedValues.pop();
		{
		    return recordError(new MissingCatchOrFinallyProblem(__p));
		}
	}

	/* statement */
	
	private InstructionList action_96( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		java.util.Vector wrong_number_of_initializers = (java.util.Vector)__reducedValues.pop();
		{
		    return recordError(new CountedForLoopInitializerProblem(__p));
		}
	}

	/* statement */
	
	private InstructionList action_97( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList dont_care = (InstructionList)__reducedValues.pop();
		InstructionList not_lvalue = (InstructionList)__reducedValues.pop();
		{
		    return recordError(new InvalidLvalueProblem(__p));
		}
	}

	/* statement */
	
	private InstructionList action_98( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		java.util.Vector trailing = (java.util.Vector)__reducedValues.pop();
		InstructionList dc2 = (InstructionList)__reducedValues.pop();
		InstructionList dc1 = (InstructionList)__reducedValues.pop();
		InstructionList leading_bandit = (InstructionList)__reducedValues.pop();
		{
		    return recordError(new InvalidForInInitializerProblem(__p));
		}
	}

	/* statement */
	
	private InstructionList action_99( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		java.util.Vector trailing = (java.util.Vector)__reducedValues.pop();
		InstructionList dc2 = (InstructionList)__reducedValues.pop();
		InstructionList dc1 = (InstructionList)__reducedValues.pop();
		{
		    return recordError(new InvalidForInInitializerProblem(__p));
		}
	}

	/* expression */
	
	private InstructionList action_100( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector exprs = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_XMLContent(__p,exprs);
	}

	/* expression */
	
	private InstructionList action_101( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector exprs = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_XMLList(__p,exprs);
	}

	/* expression */
	
	private InstructionList action_102( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector elements = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_XMLListConst(__p,elements);
	}

	/* e4x_literal */
	
	private String action_103( IASNode __p) throws java.lang.Exception
	{
		return reducer.getStringLiteralContent(__p);
	}

	/* expression */
	
	private InstructionList action_104( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_add);
	}

	/* expression */
	
	private InstructionList action_105( IASNode __p) throws java.lang.Exception
	{
		InstructionList function_body = (InstructionList)__reducedValues.pop();
		return reducer.reduce_anonymousFunction(__p,function_body);
	}

	/* expression */
	
	private InstructionList action_106( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_arrayIndexExpr(__p,stem,false,index);
	}

	/* mxml_data_binding_setter_expression */
	
	private InstructionList action_107( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_arrayIndexExpr_to_mxmlDataBindingSetter(__p,stem,index,false);
	}

	/* array_literal */
	
	private InstructionList action_108( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector elements = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_arrayLiteral(__p,elements);
	}

	/* expression */
	
	private InstructionList action_109( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_bitand,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_110( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_bitand,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_111( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_bitand,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_112( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_bitand,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_113( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_bitand,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_114( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_bitand,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_115( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_bitand,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_116( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_bitand,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_117( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_bitand,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_118( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_bitand,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_119( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_bitor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_120( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_bitor,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_121( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_bitor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_122( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_bitor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_123( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_bitor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_124( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_bitor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_125( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_bitor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_126( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_bitor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_127( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_bitor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_128( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_bitor,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_129( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_bitxor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_130( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_bitxor,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_131( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_bitxor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_132( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_bitxor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_133( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_bitxor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_134( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_bitxor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_135( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_bitxor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_136( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_bitxor,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_137( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_bitxor,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_138( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_bitxor,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_139( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_divide,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_140( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_divide,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_141( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_divide,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_142( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_divide,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_143( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_divide,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_144( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_divide,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_145( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_divide,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_146( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_divide,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_147( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_divide,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_148( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_divide,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_149( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_lshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_150( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_lshift,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_151( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_lshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_152( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_lshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_153( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_lshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_154( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_lshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_155( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_lshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_156( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_lshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_157( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_lshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_158( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_lshift,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_159( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalBracketAssignment(__p,stem,index,expr,true,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_160( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalBracketAssignment(__p,stem,index,expr,true,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_161( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getdescendants,true,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_162( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getdescendants,true,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_163( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getdescendants,true,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_164( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getproperty,true,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_165( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getproperty,true,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_166( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundLogicalAssignment(__p,operand,expr,true,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_167( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundLogicalAssignment(__p,operand,expr,true,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_168( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundLogicalRuntimeNameAssignment(__p,name,expr,true,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_169( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundLogicalRuntimeNameAssignment(__p,name,expr,true,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_170( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalBracketAssignment(__p,stem,index,expr,false,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_171( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalBracketAssignment(__p,stem,index,expr,false,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_172( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getdescendants,false,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_173( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getdescendants,false,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_174( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getdescendants,false,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_175( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getproperty,false,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_176( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundLogicalMemberAssignment(__p,stem,member,expr,OP_getproperty,false,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_177( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundLogicalAssignment(__p,operand,expr,false,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_178( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundLogicalAssignment(__p,operand,expr,false,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_179( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundLogicalRuntimeNameAssignment(__p,name,expr,false,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_180( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundLogicalRuntimeNameAssignment(__p,name,expr,false,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_181( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_subtract,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_182( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_subtract,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_183( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_subtract,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_184( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_subtract,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_185( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_subtract,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_186( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_subtract,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_187( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_subtract,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_188( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_subtract,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_189( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_subtract,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_190( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_subtract,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_191( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_modulo,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_192( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_modulo,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_193( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_modulo,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_194( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_modulo,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_195( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_modulo,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_196( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_modulo,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_197( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_modulo,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_198( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_modulo,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_199( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_modulo,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_200( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_modulo,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_201( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_multiply,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_202( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_multiply,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_203( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_multiply,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_204( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_multiply,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_205( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_multiply,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_206( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_multiply,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_207( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_multiply,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_208( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_multiply,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_209( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_multiply,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_210( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_multiply,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_211( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_add,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_212( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_add,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_213( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_add,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_214( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_add,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_215( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_add,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_216( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_add,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_217( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_add,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_218( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_add,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_219( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_add,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_220( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_add,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_221( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_rshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_222( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_rshift,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_223( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_rshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_224( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_rshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_225( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_rshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_226( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_rshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_227( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_rshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_228( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_rshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_229( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_rshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_230( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_rshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_231( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToBracketExpr_to_void_expression(__p,stem,index,r,false);
	}

	/* expression */
	
	private InstructionList action_232( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToBracketExpr_to_expression(__p,stem,index,r,false);
	}

	/* void_expression */
	
	private InstructionList action_233( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToDescendantsExpr(__p,stem,member,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_234( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToDescendantsExpr(__p,stem,member,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_235( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToMemberExpr_to_void_expression(__p,stem,member,r);
	}

	/* expression */
	
	private InstructionList action_236( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToMemberExpr_to_expression(__p,stem,member,r);
	}

	/* void_expression */
	
	private InstructionList action_237( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding lval = (Binding)__reducedValues.pop();
		return reducer.reduce_assignToNameExpr_to_void_expression(__p,lval,r);
	}

	/* expression */
	
	private InstructionList action_238( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding lval = (Binding)__reducedValues.pop();
		return reducer.reduce_assignToNameExpr_to_expression(__p,lval,r);
	}

	/* void_expression */
	
	private InstructionList action_239( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding attribute = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedAttributeExpr(__p,stem,qualifier,attribute,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_240( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding attribute = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedAttributeExpr(__p,stem,qualifier,attribute,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_241( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedMemberExpr(__p,stem,qualifier,member,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_242( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedMemberExpr(__p,stem,qualifier,member,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_243( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList attribute = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedRuntimeAttributeExpr(__p,stem,qualifier,attribute,r,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_244( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList attribute = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedRuntimeAttributeExpr(__p,stem,qualifier,attribute,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_245( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedRuntimeMemberExpr(__p,stem,qualifier,member,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_246( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToQualifiedRuntimeMemberExpr(__p,stem,qualifier,member,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_247( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname lval = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.reduce_assignToRuntimeNameExpr(__p,lval,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_248( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname lval = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.reduce_assignToRuntimeNameExpr(__p,lval,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_249( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
	IASNode stem = SemanticUtils.getNthChild(SemanticUtils.getNthChild(__p, 0), 0);
		return reducer.reduce_assignToBracketExpr_to_void_expression(__p,null,index,r,true);
	}

	/* expression */
	
	private InstructionList action_250( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
	IASNode stem = SemanticUtils.getNthChild(SemanticUtils.getNthChild(__p, 0), 0);
		return reducer.reduce_assignToBracketExpr_to_expression(__p,null,index,r,true);
	}

	/* void_expression */
	
	private InstructionList action_251( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList rt_attr_name = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToUnqualifiedRuntimeAttributeExpr(__p,stem,rt_attr_name,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_252( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList rt_attr_name = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToUnqualifiedRuntimeAttributeExpr(__p,stem,rt_attr_name,r,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_253( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList rt_attr_name = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToUnqualifiedRuntimeAttributeExpr(__p,stem,rt_attr_name,r,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_254( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList rt_attr_name = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_assignToUnqualifiedRuntimeAttributeExpr(__p,stem,rt_attr_name,r,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_255( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_urshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_256( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundBracketAssignment(__p,stem,index,expr,OP_urshift,DISCARD_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_257( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_urshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_258( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getdescendants,OP_urshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_259( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_urshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_260( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.generateCompoundMemberAssignment(__p,stem,member,expr,OP_getproperty,OP_urshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_261( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_urshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_262( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		Binding operand = (Binding)__reducedValues.pop();
		return reducer.generateCompoundAssignment(__p,operand,expr,OP_urshift,NEED_VALUE);
	}

	/* void_expression */
	
	private InstructionList action_263( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_urshift,DISCARD_VALUE);
	}

	/* expression */
	
	private InstructionList action_264( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		ABCGeneratingReducer.RuntimeMultiname name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		return reducer.generateCompoundAssignmentToRuntimeName(__p,name,expr,OP_urshift,NEED_VALUE);
	}

	/* expression */
	
	private InstructionList action_265( IASNode __p) throws java.lang.Exception
	{
		InstructionList typename = (InstructionList)__reducedValues.pop();
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,expr,typename,OP_astypelate);
	}

	/* name */
	
	private Binding action_266( IASNode __p) throws java.lang.Exception
	{
		Binding attr_name = (Binding)__reducedValues.pop();
		return reducer.reduce_attributeName(__p,attr_name);
	}

	/* expression */
	
	private InstructionList action_267( IASNode __p) throws java.lang.Exception
	{
		InstructionList unary = (InstructionList)__reducedValues.pop();
		return reducer.unaryOp(__p,unary,OP_bitnot);
	}

	/* expression */
	
	private InstructionList action_268( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_bitand);
	}

	/* expression */
	
	private InstructionList action_269( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_lshift);
	}

	/* expression */
	
	private InstructionList action_270( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_bitor);
	}

	/* expression */
	
	private InstructionList action_271( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_rshift);
	}

	/* expression */
	
	private InstructionList action_272( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_urshift);
	}

	/* expression */
	
	private InstructionList action_273( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_bitxor);
	}

	/* statement */
	
	private InstructionList action_274( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector stmts = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_blockStmt_to_statement(__p,stmts);
	}

	/* finally_clause */
	
	private InstructionList action_275( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector stmts = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_blockStmt_to_finally_clause(__p,stmts);
	}

	/* boolean_constant */
	
	private Boolean action_276( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_booleanLiteral(__p);
	}

	/* statement */
	
	private InstructionList action_277( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_breakStmt(__p);
	}

	/* catch_block */
	
	private ABCGeneratingReducer.CatchPrototype action_278( IASNode __p) throws java.lang.Exception
	{
		InstructionList action = (InstructionList)__reducedValues.pop();
		Binding exception = (Binding)__reducedValues.pop();
		Binding var_name = (Binding)__reducedValues.pop();
		return reducer.reduce_catchBlockTyped(__p,var_name,exception,action);
	}

	/* catch_block */
	
	private ABCGeneratingReducer.CatchPrototype action_279( IASNode __p) throws java.lang.Exception
	{
		InstructionList action = (InstructionList)__reducedValues.pop();
		Binding var_name = (Binding)__reducedValues.pop();
		return reducer.reduce_catchBlockUntyped(__p,var_name,action);
	}

	/* expression */
	
	private InstructionList action_280( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector exprs = (java.util.Vector)__reducedValues.pop();
		InstructionList payload_expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_commaExpr(__p,payload_expr,exprs);
	}

	/* statement */
	
	private InstructionList action_281( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector stmts = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_blockStmt_to_statement(__p,stmts);
	}

	/* constant_value */
	
	private Object action_282( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.transform_name_to_constant_value(__p);
	}

	/* conditionalElements */
	
	private ABCGeneratingReducer.ConditionalFragment action_283( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector case_actions = (java.util.Vector)__reducedValues.pop();
		Object case_const_value = (Object)__reducedValues.pop();
		return reducer.reduce_constantConditionalFragment(__p,case_const_value,case_actions);
	}

	/* statement */
	
	private InstructionList action_284( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_continueStmt(__p);
	}

	/* statement */
	
	private InstructionList action_285( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList incr = (InstructionList)__reducedValues.pop();
		InstructionList test_insns = (InstructionList)__reducedValues.pop();
		InstructionList init = (InstructionList)__reducedValues.pop();
		return reducer.reduce_countedForStmt(__p,init,test_insns,incr,body);
	}

	/* statement */
	
	private InstructionList action_286( IASNode __p) throws java.lang.Exception
	{
		InstructionList ns_expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_defaultXMLNamespace(__p,ns_expr);
	}

	/* expression */
	
	private InstructionList action_287( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_deleteExprExprExpr(__p,expr);
	}

	/* expression */
	
	private InstructionList action_288( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_deleteAtBracketExpr(__p,stem,index);
	}

	/* expression */
	
	private InstructionList action_289( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_deleteBracketExpr(__p,stem,index);
	}

	/* expression */
	
	private InstructionList action_290( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_deleteDescendantsExpr(__p,stem,field);
	}

	/* expression */
	
	private InstructionList action_291( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_deleteMemberExpr(__p,stem,field);
	}

	/* expression */
	
	private InstructionList action_292( IASNode __p) throws java.lang.Exception
	{
		Binding n = (Binding)__reducedValues.pop();
		return reducer.reduce_deleteNameExpr(__p,n);
	}

	/* expression */
	
	private InstructionList action_293( IASNode __p) throws java.lang.Exception
	{
		ABCGeneratingReducer.RuntimeMultiname rt_name = (ABCGeneratingReducer.RuntimeMultiname)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_deleteRuntimeNameExpr(__p,stem,rt_name);
	}

	/* expression */
	
	private InstructionList action_294( IASNode __p) throws java.lang.Exception
	{
		Binding descendants = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_memberAccessExpr(__p,stem,descendants,OP_getdescendants);
	}

	/* expression */
	
	private InstructionList action_295( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_divide);
	}

	/* statement */
	
	private InstructionList action_296( IASNode __p) throws java.lang.Exception
	{
		InstructionList cond = (InstructionList)__reducedValues.pop();
		InstructionList body = (InstructionList)__reducedValues.pop();
		return reducer.reduce_doStmt(__p,body,cond);
	}

	/* dottedNamePart */
	
	private String action_297( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.reduce_by_concatenation(__p,first,second);
	}

	/* name */
	
	private Binding action_298( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.dottedName(__p,first,second);
	}

	/* name */
	
	private Binding action_299( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.errorPackageName(__p,first,second);
	}

	/* double_constant */
	
	private Double action_300( IASNode __p) throws java.lang.Exception
	{
		return reducer.getDoubleContent(__p);
	}

	/* expression */
	
	private InstructionList action_301( IASNode __p) throws java.lang.Exception
	{
		InstructionList filter = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_e4xFilter(__p,stem,filter);
	}

	/* expression */
	
	private InstructionList action_302( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_embed(__p);
	}

	/* expression */
	
	private InstructionList action_303( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_newEmptyArray(__p);
	}

	/* expression */
	
	private InstructionList action_304( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_newEmptyObject(__p);
	}

	/* comparison_expression */
	
	private InstructionList action_305( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_equals);
	}

	/* conditionalJump */
	
	private InstructionList action_306( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifeq);
	}

	/* statement */
	
	private InstructionList action_307( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueArrayStmt(__p,stem,index,base,body,OP_nextvalue,false);
	}

	/* statement */
	
	private InstructionList action_308( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding descendants = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueMemberStmt(__p,stem,descendants,base,body,OP_nextvalue,false);
	}

	/* statement */
	
	private InstructionList action_309( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueMemberStmt(__p,stem,member,base,body,OP_nextvalue,false);
	}

	/* statement */
	
	private InstructionList action_310( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding it = (Binding)__reducedValues.pop();
		return reducer.reduce_forKeyValueStmt(__p,it,base,body,OP_nextvalue);
	}

	/* statement */
	
	private InstructionList action_311( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueArrayStmt(__p,null,index,base,body,OP_nextvalue,true);
	}

	/* statement */
	
	private InstructionList action_312( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		return reducer.reduce_forKeyValueMemberStmt(__p,null,member,base,body,OP_nextvalue,true);
	}

	/* statement */
	
	private InstructionList action_313( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		InstructionList single_decl = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forVarDeclInStmt(__p,single_decl,base,body,OP_nextvalue);
	}

	/* statement */
	
	private InstructionList action_314( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueArrayStmt(__p,stem,index,base,body,OP_nextname,false);
	}

	/* statement */
	
	private InstructionList action_315( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding descendants = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueMemberStmt(__p,stem,descendants,base,body,OP_nextname,false);
	}

	/* statement */
	
	private InstructionList action_316( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueMemberStmt(__p,stem,member,base,body,OP_nextname,false);
	}

	/* statement */
	
	private InstructionList action_317( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding it = (Binding)__reducedValues.pop();
		return reducer.reduce_forKeyValueStmt(__p,it,base,body,OP_nextname);
	}

	/* statement */
	
	private InstructionList action_318( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forKeyValueArrayStmt(__p,null,index,base,body,OP_nextname,true);
	}

	/* statement */
	
	private InstructionList action_319( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		return reducer.reduce_forKeyValueMemberStmt(__p,null,member,base,body,OP_nextname,true);
	}

	/* statement */
	
	private InstructionList action_320( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		InstructionList single_decl = (InstructionList)__reducedValues.pop();
		return reducer.reduce_forVarDeclInStmt(__p,single_decl,base,body,OP_nextname);
	}

	/* name */
	
	private Binding action_321( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.dottedName(__p,first,second);
	}

	/* dottedNamePart */
	
	private String action_322( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.reduce_by_concatenation(__p,first,second);
	}

	/* import_name */
	
	private InstructionList action_323( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.createInstructionList(__p);
	}

	/* expression */
	
	private InstructionList action_324( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_functionAsBracketExpr(__p,stem,index,args);
	}

	/* expression */
	
	private InstructionList action_325( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_functionAsMemberExpr(__p,stem,method_name,args);
	}

	/* expression */
	
	private InstructionList action_326( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		InstructionList random_expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_functionAsRandomExpr(__p,random_expr,args);
	}

	/* expression */
	
	private InstructionList action_327( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		return reducer.reduce_functionCallExpr_to_expression(__p,method_name,args);
	}

	/* void_expression */
	
	private InstructionList action_328( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		return reducer.reduce_functionCallExpr_to_void_expression(__p,method_name,args);
	}

	/* void_expression */
	
	private InstructionList action_329( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_functionCallOfSuperclassMethod_to_void_expression(__p,stem,method_name,args);
	}

	/* expression */
	
	private InstructionList action_330( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_functionCallOfSuperclassMethod_to_expression(__p,stem,method_name,args);
	}

	/* void_expression */
	
	private InstructionList action_331( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		return reducer.reduce_functionCallOfSuperclassMethod_to_void_expression(__p,null,method_name,args);
	}

	/* expression */
	
	private InstructionList action_332( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding method_name = (Binding)__reducedValues.pop();
		return reducer.reduce_functionCallOfSuperclassMethod_to_expression(__p,null,method_name,args);
	}

	/* statement */
	
	private InstructionList action_333( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_gotoStmt(__p);
	}

	/* comparison_expression */
	
	private InstructionList action_334( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_greaterequals);
	}

	/* conditionalJump */
	
	private InstructionList action_335( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifge);
	}

	/* comparison_expression */
	
	private InstructionList action_336( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_greaterthan);
	}

	/* conditionalJump */
	
	private InstructionList action_337( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifgt);
	}

	/* void_expression */
	
	private InstructionList action_338( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector contents = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_groupedVoidExpression(__p,contents);
	}

	/* statement */
	
	private InstructionList action_339( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector if_elseif = (java.util.Vector)__reducedValues.pop();
		InstructionList then = (InstructionList)__reducedValues.pop();
		InstructionList test = (InstructionList)__reducedValues.pop();
		return reducer.reduce_ifElseIf(__p,test,then,if_elseif);
	}

	/* statement */
	
	private InstructionList action_340( IASNode __p) throws java.lang.Exception
	{
		InstructionList importName = (InstructionList)__reducedValues.pop();
		return reducer.reduce_importDirective(__p);
	}

	/* expression */
	
	private InstructionList action_341( IASNode __p) throws java.lang.Exception
	{
		InstructionList haystack = (InstructionList)__reducedValues.pop();
		InstructionList needle = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,needle,haystack,OP_in);
	}

	/* expression */
	
	private InstructionList action_342( IASNode __p) throws java.lang.Exception
	{
		InstructionList typename = (InstructionList)__reducedValues.pop();
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,expr,typename,OP_instanceof);
	}

	/* expression */
	
	private InstructionList action_343( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_instructionListExpression(__p);
	}

	/* integer_constant */
	
	private Integer action_344( IASNode __p) throws java.lang.Exception
	{
		return reducer.getIntegerContent(__p);
	}

	/* expression */
	
	private InstructionList action_345( IASNode __p) throws java.lang.Exception
	{
		InstructionList typename = (InstructionList)__reducedValues.pop();
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,expr,typename,OP_istypelate);
	}

	/* statement */
	
	private InstructionList action_346( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_labeledBreakStmt(__p);
	}

	/* statement */
	
	private InstructionList action_347( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_labeledContinueStmt(__p);
	}

	/* statement */
	
	private InstructionList action_348( IASNode __p) throws java.lang.Exception
	{
		InstructionList substatement = (InstructionList)__reducedValues.pop();
		String label = (String)__reducedValues.pop();
		return reducer.reduce_labeledStmt(__p,label,substatement);
	}

	/* conditionalElements */
	
	private ABCGeneratingReducer.ConditionalFragment action_349( IASNode __p) throws java.lang.Exception
	{
		InstructionList else_clause = (InstructionList)__reducedValues.pop();
		return reducer.reduce_lastElse(__p,else_clause);
	}

	/* comparison_expression */
	
	private InstructionList action_350( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_lessequals);
	}

	/* conditionalJump */
	
	private InstructionList action_351( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifle);
	}

	/* comparison_expression */
	
	private InstructionList action_352( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_lessthan);
	}

	/* conditionalJump */
	
	private InstructionList action_353( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_iflt);
	}

	/* expression */
	
	private InstructionList action_354( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.reduce_logicalAndExpr(__p,l,r);
	}

	/* expression */
	
	private InstructionList action_355( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_logicalNotExpr(__p,expr);
	}

	/* expression */
	
	private InstructionList action_356( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.reduce_logicalOrExpr(__p,l,r);
	}

	/* expression */
	
	private InstructionList action_357( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_memberAccessExpr(__p,stem,member,OP_getproperty);
	}

	/* mxml_data_binding_setter_expression */
	
	private InstructionList action_358( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_memberAccessExpr_to_mxmlDataBindingSetter(__p,stem,member);
	}

	/* expression */
	
	private InstructionList action_359( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_modulo);
	}

	/* expression */
	
	private InstructionList action_360( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_multiply);
	}

	/* function */
	
	private InstructionList action_361( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector stmts = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_mxmlEventSpecifier(__p,stmts);
	}

	/* name */
	
	private Binding action_362( IASNode __p) throws java.lang.Exception
	{
		Binding qualified_name = (Binding)__reducedValues.pop();
	IASNode qualifier = SemanticUtils.getNthChild(__p, 0);
		return reducer.reduce_namespaceAccess(__p,qualifier,qualified_name);
	}

	/* name */
	
	private Binding action_363( IASNode __p) throws java.lang.Exception
	{
		Binding qualified_name = (Binding)__reducedValues.pop();
	IASNode qualifier = SemanticUtils.getNthChild(__p, 0);
		return reducer.error_namespaceAccess(__p,qualifier,qualified_name);
	}

	/* name */
	
	private Binding action_364( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_namespaceAsName_to_name(__p);
	}

	/* expression */
	
	private InstructionList action_365( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_namespaceAsName_to_expression(__p);
	}

	/* statement */
	
	private InstructionList action_366( IASNode __p) throws java.lang.Exception
	{
		Binding ns_name = (Binding)__reducedValues.pop();
		return reducer.reduce_namespaceDeclaration(__p,ns_name);
	}

	/* statement */
	
	private InstructionList action_367( IASNode __p) throws java.lang.Exception
	{
		String uri = (String)__reducedValues.pop();
		Binding ns_name = (Binding)__reducedValues.pop();
		return reducer.reduce_namespaceDeclarationConstantInitializer(__p,ns_name,uri);
	}

	/* statement */
	
	private InstructionList action_368( IASNode __p) throws java.lang.Exception
	{
		Binding second_ns = (Binding)__reducedValues.pop();
		Binding ns_name = (Binding)__reducedValues.pop();
		return reducer.reduce_namespaceDeclarationInitializer(__p,ns_name,second_ns);
	}

	/* runtime_name_expression */
	
	private ABCGeneratingReducer.RuntimeMultiname action_369( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
	IASNode qualifier = SemanticUtils.getNthChild(__p, 0);
		return reducer.reduce_namespaceMultinameL(__p,qualifier,expr);
	}

	/* runtime_name_expression */
	
	private ABCGeneratingReducer.RuntimeMultiname action_370( IASNode __p) throws java.lang.Exception
	{
		Binding qualfied_name = (Binding)__reducedValues.pop();
		InstructionList qualifier = (InstructionList)__reducedValues.pop();
		return reducer.reduce_namespaceRTQName(__p,qualifier,qualfied_name);
	}

	/* runtime_name_expression */
	
	private ABCGeneratingReducer.RuntimeMultiname action_371( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList qualifier = (InstructionList)__reducedValues.pop();
		return reducer.reduce_namespaceRTQNameL(__p,qualifier,expr);
	}

	/* comparison_expression */
	
	private InstructionList action_372( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.reduce_neqExpr(__p,l,r);
	}

	/* conditionalJump */
	
	private InstructionList action_373( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifne);
	}

	/* expression */
	
	private InstructionList action_374( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		InstructionList random_expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_newAsRandomExpr(__p,random_expr,args);
	}

	/* expression */
	
	private InstructionList action_375( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding class_binding = (Binding)__reducedValues.pop();
		return reducer.reduce_newExpr(__p,class_binding,args);
	}

	/* expression */
	
	private InstructionList action_376( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		Binding member = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_newMemberProperty(__p,stem,member,args);
	}

	/* expression */
	
	private InstructionList action_377( IASNode __p) throws java.lang.Exception
	{
		InstructionList literal = (InstructionList)__reducedValues.pop();
		return reducer.reduce_newVectorLiteral(__p,literal);
	}

	/* void_expression */
	
	private InstructionList action_378( IASNode __p) throws java.lang.Exception
	{
		return reducer.createInstructionList(__p);
	}

	/* expression */
	
	private InstructionList action_379( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_nilExpr_to_expression(__p);
	}

	/* conditionalJump */
	
	private InstructionList action_380( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_nilExpr_to_conditionalJump(__p);
	}

	/* non_resolving_identifier */
	
	private String action_381( IASNode __p) throws java.lang.Exception
	{
		return reducer.getIdentifierContent(__p);
	}

	/* constant_value */
	
	private Object action_382( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_nullLiteral_to_constant_value(__p);
	}

	/* object_literal */
	
	private InstructionList action_383( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_nullLiteral_to_object_literal(__p);
	}

	/* double_constant */
	
	private Double action_384( IASNode __p) throws java.lang.Exception
	{
		return reducer.getDoubleContent(__p);
	}

	/* object_literal */
	
	private InstructionList action_385( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector elements = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_objectLiteral(__p,elements);
	}

	/* object_literal_element */
	
	private InstructionList action_386( IASNode __p) throws java.lang.Exception
	{
		InstructionList value = (InstructionList)__reducedValues.pop();
		InstructionList id = (InstructionList)__reducedValues.pop();
		return reducer.reduce_objectLiteralElement(__p,id,value);
	}

	/* parameter */
	
	private InstructionList action_387( IASNode __p) throws java.lang.Exception
	{
		Object default_value = (Object)__reducedValues.pop();
		Binding param_type = (Binding)__reducedValues.pop();
		Name param_name = (Name)__reducedValues.pop();
		return reducer.reduce_optionalParameter(__p,param_name,param_type,default_value);
	}

	/* type_name */
	
	private Binding action_388( IASNode __p) throws java.lang.Exception
	{
		Binding param = (Binding)__reducedValues.pop();
		Binding base = (Binding)__reducedValues.pop();
		return reducer.reduce_parameterizedName(__p,base,param);
	}

	/* expression */
	
	private InstructionList action_389( IASNode __p) throws java.lang.Exception
	{
		InstructionList param = (InstructionList)__reducedValues.pop();
		InstructionList base = (InstructionList)__reducedValues.pop();
		return reducer.reduce_parameterizedTypeExpression(__p,base,param);
	}

	/* parameterList */
	
	private InstructionList action_390( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector pdecl = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_plist(__p,pdecl);
	}

	/* expression */
	
	private InstructionList action_391( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postDecBracketExpr(__p,stem,index,true);
	}

	/* void_expression */
	
	private InstructionList action_392( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postDecBracketExpr(__p,stem,index,false);
	}

	/* expression */
	
	private InstructionList action_393( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postDecMemberExpr(__p,stem,field,true);
	}

	/* void_expression */
	
	private InstructionList action_394( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postDecMemberExpr(__p,stem,field,false);
	}

	/* expression */
	
	private InstructionList action_395( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_postDecNameExpr(__p,unary,true);
	}

	/* void_expression */
	
	private InstructionList action_396( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_postDecNameExpr(__p,unary,false);
	}

	/* expression */
	
	private InstructionList action_397( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postIncBracketExpr(__p,stem,index,true);
	}

	/* void_expression */
	
	private InstructionList action_398( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postIncBracketExpr(__p,stem,index,false);
	}

	/* expression */
	
	private InstructionList action_399( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postIncMemberExpr(__p,stem,field,true);
	}

	/* void_expression */
	
	private InstructionList action_400( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_postIncMemberExpr(__p,stem,field,false);
	}

	/* expression */
	
	private InstructionList action_401( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_postIncNameExpr(__p,unary,true);
	}

	/* void_expression */
	
	private InstructionList action_402( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_postIncNameExpr(__p,unary,false);
	}

	/* expression */
	
	private InstructionList action_403( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preDecBracketExpr(__p,stem,index,true);
	}

	/* void_expression */
	
	private InstructionList action_404( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preDecBracketExpr(__p,stem,index,false);
	}

	/* expression */
	
	private InstructionList action_405( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preDecMemberExpr(__p,stem,field,true);
	}

	/* void_expression */
	
	private InstructionList action_406( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preDecMemberExpr(__p,stem,field,false);
	}

	/* expression */
	
	private InstructionList action_407( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_preDecNameExpr(__p,unary,true);
	}

	/* void_expression */
	
	private InstructionList action_408( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_preDecNameExpr(__p,unary,false);
	}

	/* expression */
	
	private InstructionList action_409( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preIncBracketExpr(__p,stem,index,true);
	}

	/* void_expression */
	
	private InstructionList action_410( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preIncBracketExpr(__p,stem,index,false);
	}

	/* expression */
	
	private InstructionList action_411( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preIncMemberExpr(__p,stem,field,true);
	}

	/* void_expression */
	
	private InstructionList action_412( IASNode __p) throws java.lang.Exception
	{
		Binding field = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_preIncMemberExpr(__p,stem,field,false);
	}

	/* expression */
	
	private InstructionList action_413( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_preIncNameExpr(__p,unary,true);
	}

	/* void_expression */
	
	private InstructionList action_414( IASNode __p) throws java.lang.Exception
	{
		Binding unary = (Binding)__reducedValues.pop();
		return reducer.reduce_preIncNameExpr(__p,unary,false);
	}

	/* expression */
	
	private InstructionList action_415( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedAttributeExpr(__p,stem,qualifier,member,OP_getproperty);
	}

	/* expression */
	
	private InstructionList action_416( IASNode __p) throws java.lang.Exception
	{
		InstructionList runtime_member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedAttributeRuntimeMemberExpr(__p,stem,qualifier,runtime_member,OP_getproperty);
	}

	/* expression */
	
	private InstructionList action_417( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedAttributeExpr(__p,stem,qualifier,member,OP_getdescendants);
	}

	/* expression */
	
	private InstructionList action_418( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedMemberAccessExpr(__p,stem,qualifier,member,OP_getdescendants);
	}

	/* expression */
	
	private InstructionList action_419( IASNode __p) throws java.lang.Exception
	{
		InstructionList runtime_member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedAttributeRuntimeMemberExpr(__p,stem,qualifier,runtime_member,OP_getdescendants);
	}

	/* expression */
	
	private InstructionList action_420( IASNode __p) throws java.lang.Exception
	{
		InstructionList runtime_member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedAttributeRuntimeMemberExpr(__p,stem,qualifier,runtime_member,OP_getdescendants);
	}

	/* expression */
	
	private InstructionList action_421( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedMemberAccessExpr(__p,stem,qualifier,member,OP_getproperty);
	}

	/* mxml_data_binding_setter_expression */
	
	private InstructionList action_422( IASNode __p) throws java.lang.Exception
	{
		Binding member = (Binding)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedMemberAccessExpr_to_mxmlDataBindingSetter(__p,stem,qualifier,member);
	}

	/* expression */
	
	private InstructionList action_423( IASNode __p) throws java.lang.Exception
	{
		InstructionList runtime_member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedMemberRuntimeNameExpr(__p,stem,qualifier,runtime_member);
	}

	/* mxml_data_binding_setter_expression */
	
	private InstructionList action_424( IASNode __p) throws java.lang.Exception
	{
		InstructionList runtime_member = (InstructionList)__reducedValues.pop();
		Binding qualifier = (Binding)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_qualifiedMemberRuntimeNameExpr_to_mxmlDataBindingSetter(__p,stem,qualifier,runtime_member);
	}

	/* name */
	
	private Binding action_425( IASNode __p) throws java.lang.Exception
	{
		String second = (String)__reducedValues.pop();
		String first = (String)__reducedValues.pop();
		return reducer.dottedName(__p,first,second);
	}

	/* object_literal */
	
	private InstructionList action_426( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_regexLiteral(__p);
	}

	/* parameter */
	
	private InstructionList action_427( IASNode __p) throws java.lang.Exception
	{
		Binding param_type = (Binding)__reducedValues.pop();
		Name param_name = (Name)__reducedValues.pop();
		return reducer.reduce_requiredParameter(__p,param_name,param_type);
	}

	/* parameter */
	
	private InstructionList action_428( IASNode __p) throws java.lang.Exception
	{
		Binding param_type = (Binding)__reducedValues.pop();
		Name param_name = (Name)__reducedValues.pop();
		return reducer.reduce_restParameter(__p,param_name,param_type);
	}

	/* statement */
	
	private InstructionList action_429( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_returnVoid(__p);
	}

	/* statement */
	
	private InstructionList action_430( IASNode __p) throws java.lang.Exception
	{
		InstructionList value = (InstructionList)__reducedValues.pop();
		return reducer.reduce_returnValue(__p,value);
	}

	/* statement */
	
	private InstructionList action_431( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_returnVoid(__p);
	}

	/* statement */
	
	private InstructionList action_432( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_returnVoidSideEffect(__p,expr);
	}

	/* statement */
	
	private InstructionList action_433( IASNode __p) throws java.lang.Exception
	{
		InstructionList no_value = (InstructionList)__reducedValues.pop();
		return reducer.reduce_returnVoidValue(__p,no_value);
	}

	/* expression */
	
	private InstructionList action_434( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_runtimeAttributeExp(__p,expr);
	}

	/* expression */
	
	private InstructionList action_435( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_runtimeNameExpression(__p,expr);
	}

	/* name */
	
	private Binding action_436( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_simpleName(__p);
	}

	/* decl_name */
	
	private Name action_437( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_declName(__p);
	}

	/* qualifiedNamePart */
	
	private String action_438( IASNode __p) throws java.lang.Exception
	{
		return reducer.getIdentifierContent(__p);
	}

	/* import_name */
	
	private InstructionList action_439( IASNode __p) throws java.lang.Exception
	{
		return reducer.createInstructionList(__p);
	}

	/* comparison_expression */
	
	private InstructionList action_440( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_strictequals);
	}

	/* conditionalJump */
	
	private InstructionList action_441( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifstricteq);
	}

	/* comparison_expression */
	
	private InstructionList action_442( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.reduce_strictneqExpr(__p,l,r);
	}

	/* conditionalJump */
	
	private InstructionList action_443( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.conditionalJump(__p,l,r,OP_ifstrictne);
	}

	/* string_constant */
	
	private String action_444( IASNode __p) throws java.lang.Exception
	{
		return reducer.getStringLiteralContent(__p);
	}

	/* expression */
	
	private InstructionList action_445( IASNode __p) throws java.lang.Exception
	{
		InstructionList r = (InstructionList)__reducedValues.pop();
		InstructionList l = (InstructionList)__reducedValues.pop();
		return reducer.binaryOp(__p,l,r,OP_subtract);
	}

	/* name */
	
	private Binding action_446( IASNode __p) throws java.lang.Exception
	{
		Binding qualified_name = (Binding)__reducedValues.pop();
		return reducer.reduce_superAccess(__p,qualified_name);
	}

	/* void_expression */
	
	private InstructionList action_447( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector args = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_superCallExpr(__p,args);
	}

	/* expression */
	
	private InstructionList action_448( IASNode __p) throws java.lang.Exception
	{
		InstructionList index = (InstructionList)__reducedValues.pop();
	IASNode stem = SemanticUtils.getNthChild(__p, 0);
		return reducer.reduce_arrayIndexExpr(__p,null,true,index);
	}

	/* name */
	
	private Binding action_449( IASNode __p) throws java.lang.Exception
	{
		Binding qualified_name = (Binding)__reducedValues.pop();
		return reducer.reduce_superAccess(__p,qualified_name);
	}

	/* conditionalElements */
	
	private ABCGeneratingReducer.ConditionalFragment action_450( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector case_actions = (java.util.Vector)__reducedValues.pop();
		InstructionList case_expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_conditionalFragment(__p,case_expr,case_actions);
	}

	/* conditionalElements */
	
	private ABCGeneratingReducer.ConditionalFragment action_451( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector case_actions = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_conditionalFragment(__p,null,case_actions);
	}

	/* statement */
	
	private InstructionList action_452( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector cases = (java.util.Vector)__reducedValues.pop();
		InstructionList switch_expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_switchStmt(__p,switch_expr,cases);
	}

	/* expression */
	
	private InstructionList action_453( IASNode __p) throws java.lang.Exception
	{
		InstructionList when_false = (InstructionList)__reducedValues.pop();
		InstructionList when_true = (InstructionList)__reducedValues.pop();
		InstructionList test = (InstructionList)__reducedValues.pop();
		return reducer.reduce_ternaryExpr(__p,test,when_true,when_false);
	}

	/* statement */
	
	private InstructionList action_454( IASNode __p) throws java.lang.Exception
	{
		InstructionList tossable = (InstructionList)__reducedValues.pop();
		return reducer.reduce_throwStmt(__p,tossable);
	}

	/* statement */
	
	private InstructionList action_455( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector catch_blocks = (java.util.Vector)__reducedValues.pop();
		InstructionList finally_stmt = (InstructionList)__reducedValues.pop();
		InstructionList try_stmt = (InstructionList)__reducedValues.pop();
		return reducer.reduce_tryCatchFinallyStmt(__p,try_stmt,finally_stmt,catch_blocks);
	}

	/* statement */
	
	private InstructionList action_456( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector catch_blocks = (java.util.Vector)__reducedValues.pop();
		InstructionList try_stmt = (InstructionList)__reducedValues.pop();
		return reducer.reduce_tryCatchStmt(__p,try_stmt,catch_blocks);
	}

	/* statement */
	
	private InstructionList action_457( IASNode __p) throws java.lang.Exception
	{
		InstructionList finally_stmt = (InstructionList)__reducedValues.pop();
		InstructionList try_stmt = (InstructionList)__reducedValues.pop();
		return reducer.reduce_tryFinallyStmt(__p,try_stmt,finally_stmt);
	}

	/* var_decl */
	
	private InstructionList action_458( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector chained_decls = (java.util.Vector)__reducedValues.pop();
		Binding var_type = (Binding)__reducedValues.pop();
		Name var_name = (Name)__reducedValues.pop();
		return reducer.reduce_typedBindableVariableDecl(__p,var_name,var_type,chained_decls);
	}

	/* var_decl */
	
	private InstructionList action_459( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector chained_decls = (java.util.Vector)__reducedValues.pop();
		InstructionList var_initializer = (InstructionList)__reducedValues.pop();
		Binding var_type = (Binding)__reducedValues.pop();
		Name var_name = (Name)__reducedValues.pop();
		return reducer.reduce_typedBindableVariableDeclWithInitializer(__p,var_name,var_type,var_initializer,chained_decls);
	}

	/* function */
	
	private InstructionList action_460( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		Binding return_type = (Binding)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.generateFunctionBody(__p,block,return_type);
	}

	/* statement */
	
	private InstructionList action_461( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		Binding return_type = (Binding)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.reduce_typedFunction_to_statement(__p,plist,return_type,block);
	}

	/* expression */
	
	private InstructionList action_462( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		Binding return_type = (Binding)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
	IASNode function_name = SemanticUtils.getNthChild(SemanticUtils.getNthChild(__p, 0), 0);
		return reducer.reduce_functionObject(__p,function_name,plist,return_type,block);
	}

	/* function */
	
	private InstructionList action_463( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		Binding return_type = (Binding)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.generateFunctionBody(__p,block,return_type);
	}

	/* function */
	
	private InstructionList action_464( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		Binding return_type = (Binding)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.generateFunctionBody(__p,block,return_type);
	}

	/* var_decl */
	
	private InstructionList action_465( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector chained_decls = (java.util.Vector)__reducedValues.pop();
		Binding var_type = (Binding)__reducedValues.pop();
		Name var_name = (Name)__reducedValues.pop();
		return reducer.reduce_typedVariableDecl(__p,var_name,var_type,chained_decls);
	}

	/* var_decl */
	
	private InstructionList action_466( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector chained_decls = (java.util.Vector)__reducedValues.pop();
		Object constant_var_initializer = (Object)__reducedValues.pop();
		Binding var_type = (Binding)__reducedValues.pop();
		Name var_name = (Name)__reducedValues.pop();
		return reducer.reduce_typedVariableDeclWithConstantInitializer(__p,var_name,var_type,constant_var_initializer,chained_decls);
	}

	/* var_decl */
	
	private InstructionList action_467( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector chained_decls = (java.util.Vector)__reducedValues.pop();
		InstructionList var_initializer = (InstructionList)__reducedValues.pop();
		Binding var_type = (Binding)__reducedValues.pop();
		Name var_name = (Name)__reducedValues.pop();
		return reducer.reduce_typedVariableDeclWithInitializer(__p,var_name,var_type,var_initializer,chained_decls);
	}

	/* name */
	
	private Binding action_468( IASNode __p) throws java.lang.Exception
	{
		Binding var_type = (Binding)__reducedValues.pop();
		Name var_name = (Name)__reducedValues.pop();
		return reducer.reduce_typedVariableExpression(__p,var_name,var_type);
	}

	/* function */
	
	private InstructionList action_469( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.generateFunctionBody(__p,block,LexicalScope.anyType);
	}

	/* statement */
	
	private InstructionList action_470( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.reduce_typelessFunction(__p,plist,block);
	}

	/* expression */
	
	private InstructionList action_471( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
	IASNode function_name = SemanticUtils.getNthChild(SemanticUtils.getNthChild(__p, 0), 0);
		return reducer.reduce_functionObject(__p,function_name,plist,null,block);
	}

	/* function */
	
	private InstructionList action_472( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.generateFunctionBody(__p,block,LexicalScope.anyType);
	}

	/* function */
	
	private InstructionList action_473( IASNode __p) throws java.lang.Exception
	{
		InstructionList block = (InstructionList)__reducedValues.pop();
		InstructionList plist = (InstructionList)__reducedValues.pop();
		return reducer.generateFunctionBody(__p,block,LexicalScope.anyType);
	}

	/* expression */
	
	private InstructionList action_474( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_typeof_expr(__p,expr);
	}

	/* expression */
	
	private InstructionList action_475( IASNode __p) throws java.lang.Exception
	{
		Binding n = (Binding)__reducedValues.pop();
		return reducer.reduce_typeof_name(__p,n);
	}

	/* uint_constant */
	
	private Long action_476( IASNode __p) throws java.lang.Exception
	{
		return reducer.getUintContent(__p);
	}

	/* expression */
	
	private InstructionList action_477( IASNode __p) throws java.lang.Exception
	{
		InstructionList e = (InstructionList)__reducedValues.pop();
		return reducer.unaryOp(__p,e,OP_negate);
	}

	/* expression */
	
	private InstructionList action_478( IASNode __p) throws java.lang.Exception
	{
		InstructionList e = (InstructionList)__reducedValues.pop();
		{
		    return reducer.unaryOp(__p, e, reducer.op_unplus());
		}
	}

	/* expression */
	
	private InstructionList action_479( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_unqualifiedAttributeExpr(__p,stem,expr,OP_getproperty);
	}

	/* expression */
	
	private InstructionList action_480( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		InstructionList stem = (InstructionList)__reducedValues.pop();
		return reducer.reduce_unqualifiedAttributeExpr(__p,stem,expr,OP_getdescendants);
	}

	/* statement */
	
	private InstructionList action_481( IASNode __p) throws java.lang.Exception
	{
		Binding ns_name = (Binding)__reducedValues.pop();
		return reducer.reduce_useNamespaceDirective(__p,ns_name);
	}

	/* void_expression */
	
	private InstructionList action_482( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector decls = (java.util.Vector)__reducedValues.pop();
		return reducer.reduce_variableExpression(__p,decls);
	}

	/* vector_literal */
	
	private InstructionList action_483( IASNode __p) throws java.lang.Exception
	{
		java.util.Vector elements = (java.util.Vector)__reducedValues.pop();
		Binding type_param = (Binding)__reducedValues.pop();
		return reducer.reduce_vectorLiteral(__p,type_param,elements);
	}

	/* constant_value */
	
	private Object action_484( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_void0Literal_to_constant_value(__p);
	}

	/* object_literal */
	
	private InstructionList action_485( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_void0Literal_to_object_literal(__p);
	}

	/* object_literal */
	
	private InstructionList action_486( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_void0Operator(__p);
	}

	/* constant_value */
	
	private Object action_487( IASNode __p) throws java.lang.Exception
	{
		Object value = (Object)__reducedValues.pop();
		return reducer.reduce_voidOperator_to_constant_value(__p,value);
	}

	/* return_type_name */
	
	private Binding action_488( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_voidExpr_to_return_type_name(__p);
	}

	/* return_type_name */
	
	private Binding action_489( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_voidExpr_to_return_type_name(__p);
	}

	/* return_type_name */
	
	private Binding action_490( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_voidExpr_to_return_type_name(__p);
	}

	/* type_name */
	
	private Binding action_491( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_voidExpr_to_type_name(__p);
	}

	/* expression */
	
	private InstructionList action_492( IASNode __p) throws java.lang.Exception
	{
		return reducer.reduce_voidExpr_to_expression(__p);
	}

	/* expression */
	
	private InstructionList action_493( IASNode __p) throws java.lang.Exception
	{
		InstructionList expr = (InstructionList)__reducedValues.pop();
		return reducer.reduce_voidOperator_to_expression(__p,expr);
	}

	/* statement */
	
	private InstructionList action_494( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList cond = (InstructionList)__reducedValues.pop();
		return reducer.reduce_whileStmt(__p,cond,body);
	}

	/* statement */
	
	private InstructionList action_495( IASNode __p) throws java.lang.Exception
	{
		InstructionList body = (InstructionList)__reducedValues.pop();
		InstructionList new_scope = (InstructionList)__reducedValues.pop();
		return reducer.reduce_withStmt(__p,new_scope,body);
	}

	/* statement */
	
	private InstructionList action_496( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* literal */
	
	private InstructionList action_497( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* return_type_name */
	
	private Binding action_498( IASNode __p) throws java.lang.Exception
	{
		return((Binding)__reducedValues.pop());
	}

	/* string_constant */
	
	private String action_499( IASNode __p) throws java.lang.Exception
	{
		return((String)__reducedValues.pop());
	}

	/* numeric_constant */
	
	private Number action_500( IASNode __p) throws java.lang.Exception
	{
		return((Number)__reducedValues.pop());
	}

	/* new_type_name */
	
	private Binding action_501( IASNode __p) throws java.lang.Exception
	{
		return((Binding)__reducedValues.pop());
	}

	/* type_param_expression */
	
	private InstructionList action_502( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* literal */
	
	private InstructionList action_503( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* statement */
	
	private InstructionList action_504( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* dottedNamePart */
	
	private String action_505( IASNode __p) throws java.lang.Exception
	{
		return((String)__reducedValues.pop());
	}

	/* expression */
	
	private InstructionList action_506( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* numeric_constant */
	
	private Number action_507( IASNode __p) throws java.lang.Exception
	{
		return((Number)__reducedValues.pop());
	}

	/* literal */
	
	private InstructionList action_508( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}

	/* numeric_constant */
	
	private Number action_509( IASNode __p) throws java.lang.Exception
	{
		return((Number)__reducedValues.pop());
	}

	/* required_constant_value */
	
	private Object action_510( IASNode __p) throws java.lang.Exception
	{
		return((Object)__reducedValues.pop());
	}

	/* expression */
	
	private InstructionList action_511( IASNode __p) throws java.lang.Exception
	{
		return((InstructionList)__reducedValues.pop());
	}
	
	private void dispatchAction( JBurgAnnotation ___node, int iRule) throws java.lang.Exception
	{
		IASNode __p = ___node.getNode();

		switch( iRule )
		{
			case 1:
			{
				this.reduceAntecedent(___node, __expression_NT);
				__reducedValues.push(this.action_1(__p));
				break;
			}
			case 2:
			{
				__reducedValues.push(this.action_2(__p));
				break;
			}
			case 3:
			{
				this.reduceAntecedent(___node, __expression_NT);
				__reducedValues.push(this.action_3(__p));
				break;
			}
			case 4:
			{
				this.reduceAntecedent(___node, __name_NT);
				__reducedValues.push(this.action_4(__p));
				break;
			}
			case 5:
			{
				this.reduceAntecedent(___node, __type_name_NT);
				__reducedValues.push(this.action_5(__p));
				break;
			}
			case 6:
			{
				this.reduceAntecedent(___node, __name_NT);
				__reducedValues.push(this.action_6(__p));
				break;
			}
			case 7:
			{
				this.reduceAntecedent(___node, __name_NT);
				__reducedValues.push(this.action_7(__p));
				break;
			}
			case 8:
			{
				this.reduceAntecedent(___node, __runtime_name_expression_NT);
				__reducedValues.push(this.action_8(__p));
				break;
			}
			case 9:
			{
				this.reduceAntecedent(___node, __string_constant_NT);
				__reducedValues.push(this.action_9(__p));
				break;
			}
			case 10:
			{
				this.reduceAntecedent(___node, __integer_constant_NT);
				__reducedValues.push(this.action_10(__p));
				break;
			}
			case 11:
			{
				this.reduceAntecedent(___node, __uint_constant_NT);
				__reducedValues.push(this.action_11(__p));
				break;
			}
			case 12:
			{
				this.reduceAntecedent(___node, __boolean_constant_NT);
				__reducedValues.push(this.action_12(__p));
				break;
			}
			case 13:
			{
				__reducedValues.push(this.action_13(__p));
				break;
			}
			case 14:
			{
				__reducedValues.push(this.action_14(__p));
				break;
			}
			case 15:
			{
				__reducedValues.push(this.action_15(__p));
				break;
			}
			case 16:
			{
				__reducedValues.push(this.action_16(__p));
				break;
			}
			case 17:
			{
				__reducedValues.push(this.action_17(__p));
				break;
			}
			case 18:
			{
				__reducedValues.push(this.action_18(__p));
				break;
			}
			case 19:
			{
				__reducedValues.push(this.action_19(__p));
				break;
			}
			case 20:
			{
				__reducedValues.push(this.action_20(__p));
				break;
			}
			case 21:
			{
				__reducedValues.push(this.action_21(__p));
				break;
			}
			case 22:
			{
				__reducedValues.push(this.action_22(__p));
				break;
			}
			case 23:
			{
				__reducedValues.push(this.action_23(__p));
				break;
			}
			case 24:
			{
				__reducedValues.push(this.action_24(__p));
				break;
			}
			case 25:
			{
				__reducedValues.push(this.action_25(__p));
				break;
			}
			case 26:
			{
				__reducedValues.push(this.action_26(__p));
				break;
			}
			case 27:
			{
				__reducedValues.push(this.action_27(__p));
				break;
			}
			case 28:
			{
				__reducedValues.push(this.action_28(__p));
				break;
			}
			case 29:
			{
				__reducedValues.push(this.action_29(__p));
				break;
			}
			case 30:
			{
				__reducedValues.push(this.action_30(__p));
				break;
			}
			case 31:
			{
				__reducedValues.push(this.action_31(__p));
				break;
			}
			case 32:
			{
				__reducedValues.push(this.action_32(__p));
				break;
			}
			case 33:
			{
				__reducedValues.push(this.action_33(__p));
				break;
			}
			case 34:
			{
				__reducedValues.push(this.action_34(__p));
				break;
			}
			case 35:
			{
				__reducedValues.push(this.action_35(__p));
				break;
			}
			case 36:
			{
				__reducedValues.push(this.action_36(__p));
				break;
			}
			case 37:
			{
				__reducedValues.push(this.action_37(__p));
				break;
			}
			case 38:
			{
				__reducedValues.push(this.action_38(__p));
				break;
			}
			case 39:
			{
				__reducedValues.push(this.action_39(__p));
				break;
			}
			case 40:
			{
				__reducedValues.push(this.action_40(__p));
				break;
			}
			case 41:
			{
				__reducedValues.push(this.action_41(__p));
				break;
			}
			case 42:
			{
				__reducedValues.push(this.action_42(__p));
				break;
			}
			case 43:
			{
				__reducedValues.push(this.action_43(__p));
				break;
			}
			case 44:
			{
				__reducedValues.push(this.action_44(__p));
				break;
			}
			case 45:
			{
				__reducedValues.push(this.action_45(__p));
				break;
			}
			case 46:
			{
				__reducedValues.push(this.action_46(__p));
				break;
			}
			case 47:
			{
				__reducedValues.push(this.action_47(__p));
				break;
			}
			case 48:
			{
				__reducedValues.push(this.action_48(__p));
				break;
			}
			case 49:
			{
				__reducedValues.push(this.action_49(__p));
				break;
			}
			case 50:
			{
				__reducedValues.push(this.action_50(__p));
				break;
			}
			case 51:
			{
				__reducedValues.push(this.action_51(__p));
				break;
			}
			case 52:
			{
				__reducedValues.push(this.action_52(__p));
				break;
			}
			case 53:
			{
				__reducedValues.push(this.action_53(__p));
				break;
			}
			case 54:
			{
				__reducedValues.push(this.action_54(__p));
				break;
			}
			case 55:
			{
				__reducedValues.push(this.action_55(__p));
				break;
			}
			case 56:
			{
				__reducedValues.push(this.action_56(__p));
				break;
			}
			case 57:
			{
				__reducedValues.push(this.action_57(__p));
				break;
			}
			case 58:
			{
				__reducedValues.push(this.action_58(__p));
				break;
			}
			case 59:
			{
				__reducedValues.push(this.action_59(__p));
				break;
			}
			case 60:
			{
				__reducedValues.push(this.action_60(__p));
				break;
			}
			case 61:
			{
				__reducedValues.push(this.action_61(__p));
				break;
			}
			case 62:
			{
				__reducedValues.push(this.action_62(__p));
				break;
			}
			case 63:
			{
				__reducedValues.push(this.action_63(__p));
				break;
			}
			case 64:
			{
				__reducedValues.push(this.action_64(__p));
				break;
			}
			case 65:
			{
				__reducedValues.push(this.action_65(__p));
				break;
			}
			case 66:
			{
				__reducedValues.push(this.action_66(__p));
				break;
			}
			case 67:
			{
				__reducedValues.push(this.action_67(__p));
				break;
			}
			case 68:
			{
				__reducedValues.push(this.action_68(__p));
				break;
			}
			case 69:
			{
				__reducedValues.push(this.action_69(__p));
				break;
			}
			case 70:
			{
				__reducedValues.push(this.action_70(__p));
				break;
			}
			case 71:
			{
				__reducedValues.push(this.action_71(__p));
				break;
			}
			case 72:
			{
				__reducedValues.push(this.action_72(__p));
				break;
			}
			case 73:
			{
				__reducedValues.push(this.action_73(__p));
				break;
			}
			case 74:
			{
				__reducedValues.push(this.action_74(__p));
				break;
			}
			case 75:
			{
				__reducedValues.push(this.action_75(__p));
				break;
			}
			case 76:
			{
				__reducedValues.push(this.action_76(__p));
				break;
			}
			case 77:
			{
				__reducedValues.push(this.action_77(__p));
				break;
			}
			case 78:
			{
				__reducedValues.push(this.action_78(__p));
				break;
			}
			case 79:
			{
				__reducedValues.push(this.action_79(__p));
				break;
			}
			case 80:
			{
				__reducedValues.push(this.action_80(__p));
				break;
			}
			case 81:
			{
				this.reduceAntecedent(___node, __expression_NT);
				__reducedValues.push(this.action_81(__p));
				break;
			}
			case 82:
			{
				this.reduceAntecedent(___node, __name_NT);
				__reducedValues.push(this.action_82(__p));
				break;
			}
			case 83:
			{
				__reducedValues.push(this.action_83(__p));
				break;
			}
			case 84:
			{
				__reducedValues.push(this.action_84(__p));
				break;
			}
			case 85:
			{
				this.reduceAntecedent(___node, __string_constant_NT);
				__reducedValues.push(this.action_85(__p));
				break;
			}
			case 86:
			{
				this.reduceAntecedent(___node, __boolean_constant_NT);
				__reducedValues.push(this.action_86(__p));
				break;
			}
			case 87:
			{
				this.reduceAntecedent(___node, __numeric_constant_NT);
				__reducedValues.push(this.action_87(__p));
				break;
			}
			case 88:
			{
				this.reduceAntecedent(___node, __double_constant_NT);
				__reducedValues.push(this.action_88(__p));
				break;
			}
			case 89:
			{
				this.reduceAntecedent(___node, __numeric_constant_NT);
				__reducedValues.push(this.action_89(__p));
				break;
			}
			case 90:
			{
				this.reduceAntecedent(___node, __constant_value_NT);
				__reducedValues.push(this.action_90(__p));
				break;
			}
			case 91:
			{
				this.reduceAntecedent(___node, __non_resolving_identifier_NT);
				__reducedValues.push(this.action_91(__p));
				break;
			}
			case 92:
			{
				this.reduceAntecedent(___node, __boolean_constant_NT);
				__reducedValues.push(this.action_92(__p));
				break;
			}
			case 93:
			{
				this.reduceAntecedent(___node, __name_NT);
				__reducedValues.push(this.action_93(__p));
				break;
			}
			case 94:
			{
				this.reduceAntecedent(___node, __runtime_name_expression_NT);
				__reducedValues.push(this.action_94(__p));
				break;
			}
			case 95:
			{
				__reducedValues.push(this.action_95(__p));
				break;
			}
			case 96:
			{
				__reducedValues.push(this.action_96(__p));
				break;
			}
			case 97:
			{
				__reducedValues.push(this.action_97(__p));
				break;
			}
			case 98:
			{
				__reducedValues.push(this.action_98(__p));
				break;
			}
			case 99:
			{
				__reducedValues.push(this.action_99(__p));
				break;
			}
			case 100:
			{
				__reducedValues.push(this.action_100(__p));
				break;
			}
			case 101:
			{
				__reducedValues.push(this.action_101(__p));
				break;
			}
			case 102:
			{
				__reducedValues.push(this.action_102(__p));
				break;
			}
			case 103:
			{
				__reducedValues.push(this.action_103(__p));
				break;
			}
			case 104:
			{
				__reducedValues.push(this.action_104(__p));
				break;
			}
			case 105:
			{
				__reducedValues.push(this.action_105(__p));
				break;
			}
			case 106:
			{
				__reducedValues.push(this.action_106(__p));
				break;
			}
			case 107:
			{
				__reducedValues.push(this.action_107(__p));
				break;
			}
			case 108:
			{
				__reducedValues.push(this.action_108(__p));
				break;
			}
			case 109:
			{
				__reducedValues.push(this.action_109(__p));
				break;
			}
			case 110:
			{
				__reducedValues.push(this.action_110(__p));
				break;
			}
			case 111:
			{
				__reducedValues.push(this.action_111(__p));
				break;
			}
			case 112:
			{
				__reducedValues.push(this.action_112(__p));
				break;
			}
			case 113:
			{
				__reducedValues.push(this.action_113(__p));
				break;
			}
			case 114:
			{
				__reducedValues.push(this.action_114(__p));
				break;
			}
			case 115:
			{
				__reducedValues.push(this.action_115(__p));
				break;
			}
			case 116:
			{
				__reducedValues.push(this.action_116(__p));
				break;
			}
			case 117:
			{
				__reducedValues.push(this.action_117(__p));
				break;
			}
			case 118:
			{
				__reducedValues.push(this.action_118(__p));
				break;
			}
			case 119:
			{
				__reducedValues.push(this.action_119(__p));
				break;
			}
			case 120:
			{
				__reducedValues.push(this.action_120(__p));
				break;
			}
			case 121:
			{
				__reducedValues.push(this.action_121(__p));
				break;
			}
			case 122:
			{
				__reducedValues.push(this.action_122(__p));
				break;
			}
			case 123:
			{
				__reducedValues.push(this.action_123(__p));
				break;
			}
			case 124:
			{
				__reducedValues.push(this.action_124(__p));
				break;
			}
			case 125:
			{
				__reducedValues.push(this.action_125(__p));
				break;
			}
			case 126:
			{
				__reducedValues.push(this.action_126(__p));
				break;
			}
			case 127:
			{
				__reducedValues.push(this.action_127(__p));
				break;
			}
			case 128:
			{
				__reducedValues.push(this.action_128(__p));
				break;
			}
			case 129:
			{
				__reducedValues.push(this.action_129(__p));
				break;
			}
			case 130:
			{
				__reducedValues.push(this.action_130(__p));
				break;
			}
			case 131:
			{
				__reducedValues.push(this.action_131(__p));
				break;
			}
			case 132:
			{
				__reducedValues.push(this.action_132(__p));
				break;
			}
			case 133:
			{
				__reducedValues.push(this.action_133(__p));
				break;
			}
			case 134:
			{
				__reducedValues.push(this.action_134(__p));
				break;
			}
			case 135:
			{
				__reducedValues.push(this.action_135(__p));
				break;
			}
			case 136:
			{
				__reducedValues.push(this.action_136(__p));
				break;
			}
			case 137:
			{
				__reducedValues.push(this.action_137(__p));
				break;
			}
			case 138:
			{
				__reducedValues.push(this.action_138(__p));
				break;
			}
			case 139:
			{
				__reducedValues.push(this.action_139(__p));
				break;
			}
			case 140:
			{
				__reducedValues.push(this.action_140(__p));
				break;
			}
			case 141:
			{
				__reducedValues.push(this.action_141(__p));
				break;
			}
			case 142:
			{
				__reducedValues.push(this.action_142(__p));
				break;
			}
			case 143:
			{
				__reducedValues.push(this.action_143(__p));
				break;
			}
			case 144:
			{
				__reducedValues.push(this.action_144(__p));
				break;
			}
			case 145:
			{
				__reducedValues.push(this.action_145(__p));
				break;
			}
			case 146:
			{
				__reducedValues.push(this.action_146(__p));
				break;
			}
			case 147:
			{
				__reducedValues.push(this.action_147(__p));
				break;
			}
			case 148:
			{
				__reducedValues.push(this.action_148(__p));
				break;
			}
			case 149:
			{
				__reducedValues.push(this.action_149(__p));
				break;
			}
			case 150:
			{
				__reducedValues.push(this.action_150(__p));
				break;
			}
			case 151:
			{
				__reducedValues.push(this.action_151(__p));
				break;
			}
			case 152:
			{
				__reducedValues.push(this.action_152(__p));
				break;
			}
			case 153:
			{
				__reducedValues.push(this.action_153(__p));
				break;
			}
			case 154:
			{
				__reducedValues.push(this.action_154(__p));
				break;
			}
			case 155:
			{
				__reducedValues.push(this.action_155(__p));
				break;
			}
			case 156:
			{
				__reducedValues.push(this.action_156(__p));
				break;
			}
			case 157:
			{
				__reducedValues.push(this.action_157(__p));
				break;
			}
			case 158:
			{
				__reducedValues.push(this.action_158(__p));
				break;
			}
			case 159:
			{
				__reducedValues.push(this.action_159(__p));
				break;
			}
			case 160:
			{
				__reducedValues.push(this.action_160(__p));
				break;
			}
			case 161:
			{
				__reducedValues.push(this.action_161(__p));
				break;
			}
			case 162:
			{
				__reducedValues.push(this.action_162(__p));
				break;
			}
			case 163:
			{
				__reducedValues.push(this.action_163(__p));
				break;
			}
			case 164:
			{
				__reducedValues.push(this.action_164(__p));
				break;
			}
			case 165:
			{
				__reducedValues.push(this.action_165(__p));
				break;
			}
			case 166:
			{
				__reducedValues.push(this.action_166(__p));
				break;
			}
			case 167:
			{
				__reducedValues.push(this.action_167(__p));
				break;
			}
			case 168:
			{
				__reducedValues.push(this.action_168(__p));
				break;
			}
			case 169:
			{
				__reducedValues.push(this.action_169(__p));
				break;
			}
			case 170:
			{
				__reducedValues.push(this.action_170(__p));
				break;
			}
			case 171:
			{
				__reducedValues.push(this.action_171(__p));
				break;
			}
			case 172:
			{
				__reducedValues.push(this.action_172(__p));
				break;
			}
			case 173:
			{
				__reducedValues.push(this.action_173(__p));
				break;
			}
			case 174:
			{
				__reducedValues.push(this.action_174(__p));
				break;
			}
			case 175:
			{
				__reducedValues.push(this.action_175(__p));
				break;
			}
			case 176:
			{
				__reducedValues.push(this.action_176(__p));
				break;
			}
			case 177:
			{
				__reducedValues.push(this.action_177(__p));
				break;
			}
			case 178:
			{
				__reducedValues.push(this.action_178(__p));
				break;
			}
			case 179:
			{
				__reducedValues.push(this.action_179(__p));
				break;
			}
			case 180:
			{
				__reducedValues.push(this.action_180(__p));
				break;
			}
			case 181:
			{
				__reducedValues.push(this.action_181(__p));
				break;
			}
			case 182:
			{
				__reducedValues.push(this.action_182(__p));
				break;
			}
			case 183:
			{
				__reducedValues.push(this.action_183(__p));
				break;
			}
			case 184:
			{
				__reducedValues.push(this.action_184(__p));
				break;
			}
			case 185:
			{
				__reducedValues.push(this.action_185(__p));
				break;
			}
			case 186:
			{
				__reducedValues.push(this.action_186(__p));
				break;
			}
			case 187:
			{
				__reducedValues.push(this.action_187(__p));
				break;
			}
			case 188:
			{
				__reducedValues.push(this.action_188(__p));
				break;
			}
			case 189:
			{
				__reducedValues.push(this.action_189(__p));
				break;
			}
			case 190:
			{
				__reducedValues.push(this.action_190(__p));
				break;
			}
			case 191:
			{
				__reducedValues.push(this.action_191(__p));
				break;
			}
			case 192:
			{
				__reducedValues.push(this.action_192(__p));
				break;
			}
			case 193:
			{
				__reducedValues.push(this.action_193(__p));
				break;
			}
			case 194:
			{
				__reducedValues.push(this.action_194(__p));
				break;
			}
			case 195:
			{
				__reducedValues.push(this.action_195(__p));
				break;
			}
			case 196:
			{
				__reducedValues.push(this.action_196(__p));
				break;
			}
			case 197:
			{
				__reducedValues.push(this.action_197(__p));
				break;
			}
			case 198:
			{
				__reducedValues.push(this.action_198(__p));
				break;
			}
			case 199:
			{
				__reducedValues.push(this.action_199(__p));
				break;
			}
			case 200:
			{
				__reducedValues.push(this.action_200(__p));
				break;
			}
			case 201:
			{
				__reducedValues.push(this.action_201(__p));
				break;
			}
			case 202:
			{
				__reducedValues.push(this.action_202(__p));
				break;
			}
			case 203:
			{
				__reducedValues.push(this.action_203(__p));
				break;
			}
			case 204:
			{
				__reducedValues.push(this.action_204(__p));
				break;
			}
			case 205:
			{
				__reducedValues.push(this.action_205(__p));
				break;
			}
			case 206:
			{
				__reducedValues.push(this.action_206(__p));
				break;
			}
			case 207:
			{
				__reducedValues.push(this.action_207(__p));
				break;
			}
			case 208:
			{
				__reducedValues.push(this.action_208(__p));
				break;
			}
			case 209:
			{
				__reducedValues.push(this.action_209(__p));
				break;
			}
			case 210:
			{
				__reducedValues.push(this.action_210(__p));
				break;
			}
			case 211:
			{
				__reducedValues.push(this.action_211(__p));
				break;
			}
			case 212:
			{
				__reducedValues.push(this.action_212(__p));
				break;
			}
			case 213:
			{
				__reducedValues.push(this.action_213(__p));
				break;
			}
			case 214:
			{
				__reducedValues.push(this.action_214(__p));
				break;
			}
			case 215:
			{
				__reducedValues.push(this.action_215(__p));
				break;
			}
			case 216:
			{
				__reducedValues.push(this.action_216(__p));
				break;
			}
			case 217:
			{
				__reducedValues.push(this.action_217(__p));
				break;
			}
			case 218:
			{
				__reducedValues.push(this.action_218(__p));
				break;
			}
			case 219:
			{
				__reducedValues.push(this.action_219(__p));
				break;
			}
			case 220:
			{
				__reducedValues.push(this.action_220(__p));
				break;
			}
			case 221:
			{
				__reducedValues.push(this.action_221(__p));
				break;
			}
			case 222:
			{
				__reducedValues.push(this.action_222(__p));
				break;
			}
			case 223:
			{
				__reducedValues.push(this.action_223(__p));
				break;
			}
			case 224:
			{
				__reducedValues.push(this.action_224(__p));
				break;
			}
			case 225:
			{
				__reducedValues.push(this.action_225(__p));
				break;
			}
			case 226:
			{
				__reducedValues.push(this.action_226(__p));
				break;
			}
			case 227:
			{
				__reducedValues.push(this.action_227(__p));
				break;
			}
			case 228:
			{
				__reducedValues.push(this.action_228(__p));
				break;
			}
			case 229:
			{
				__reducedValues.push(this.action_229(__p));
				break;
			}
			case 230:
			{
				__reducedValues.push(this.action_230(__p));
				break;
			}
			case 231:
			{
				__reducedValues.push(this.action_231(__p));
				break;
			}
			case 232:
			{
				__reducedValues.push(this.action_232(__p));
				break;
			}
			case 233:
			{
				__reducedValues.push(this.action_233(__p));
				break;
			}
			case 234:
			{
				__reducedValues.push(this.action_234(__p));
				break;
			}
			case 235:
			{
				__reducedValues.push(this.action_235(__p));
				break;
			}
			case 236:
			{
				__reducedValues.push(this.action_236(__p));
				break;
			}
			case 237:
			{
				__reducedValues.push(this.action_237(__p));
				break;
			}
			case 238:
			{
				__reducedValues.push(this.action_238(__p));
				break;
			}
			case 239:
			{
				__reducedValues.push(this.action_239(__p));
				break;
			}
			case 240:
			{
				__reducedValues.push(this.action_240(__p));
				break;
			}
			case 241:
			{
				__reducedValues.push(this.action_241(__p));
				break;
			}
			case 242:
			{
				__reducedValues.push(this.action_242(__p));
				break;
			}
			case 243:
			{
				__reducedValues.push(this.action_243(__p));
				break;
			}
			case 244:
			{
				__reducedValues.push(this.action_244(__p));
				break;
			}
			case 245:
			{
				__reducedValues.push(this.action_245(__p));
				break;
			}
			case 246:
			{
				__reducedValues.push(this.action_246(__p));
				break;
			}
			case 247:
			{
				__reducedValues.push(this.action_247(__p));
				break;
			}
			case 248:
			{
				__reducedValues.push(this.action_248(__p));
				break;
			}
			case 249:
			{
				__reducedValues.push(this.action_249(__p));
				break;
			}
			case 250:
			{
				__reducedValues.push(this.action_250(__p));
				break;
			}
			case 251:
			{
				__reducedValues.push(this.action_251(__p));
				break;
			}
			case 252:
			{
				__reducedValues.push(this.action_252(__p));
				break;
			}
			case 253:
			{
				__reducedValues.push(this.action_253(__p));
				break;
			}
			case 254:
			{
				__reducedValues.push(this.action_254(__p));
				break;
			}
			case 255:
			{
				__reducedValues.push(this.action_255(__p));
				break;
			}
			case 256:
			{
				__reducedValues.push(this.action_256(__p));
				break;
			}
			case 257:
			{
				__reducedValues.push(this.action_257(__p));
				break;
			}
			case 258:
			{
				__reducedValues.push(this.action_258(__p));
				break;
			}
			case 259:
			{
				__reducedValues.push(this.action_259(__p));
				break;
			}
			case 260:
			{
				__reducedValues.push(this.action_260(__p));
				break;
			}
			case 261:
			{
				__reducedValues.push(this.action_261(__p));
				break;
			}
			case 262:
			{
				__reducedValues.push(this.action_262(__p));
				break;
			}
			case 263:
			{
				__reducedValues.push(this.action_263(__p));
				break;
			}
			case 264:
			{
				__reducedValues.push(this.action_264(__p));
				break;
			}
			case 265:
			{
				__reducedValues.push(this.action_265(__p));
				break;
			}
			case 266:
			{
				__reducedValues.push(this.action_266(__p));
				break;
			}
			case 267:
			{
				__reducedValues.push(this.action_267(__p));
				break;
			}
			case 268:
			{
				__reducedValues.push(this.action_268(__p));
				break;
			}
			case 269:
			{
				__reducedValues.push(this.action_269(__p));
				break;
			}
			case 270:
			{
				__reducedValues.push(this.action_270(__p));
				break;
			}
			case 271:
			{
				__reducedValues.push(this.action_271(__p));
				break;
			}
			case 272:
			{
				__reducedValues.push(this.action_272(__p));
				break;
			}
			case 273:
			{
				__reducedValues.push(this.action_273(__p));
				break;
			}
			case 274:
			{
				__reducedValues.push(this.action_274(__p));
				break;
			}
			case 275:
			{
				__reducedValues.push(this.action_275(__p));
				break;
			}
			case 276:
			{
				__reducedValues.push(this.action_276(__p));
				break;
			}
			case 277:
			{
				__reducedValues.push(this.action_277(__p));
				break;
			}
			case 278:
			{
				__reducedValues.push(this.action_278(__p));
				break;
			}
			case 279:
			{
				__reducedValues.push(this.action_279(__p));
				break;
			}
			case 280:
			{
				__reducedValues.push(this.action_280(__p));
				break;
			}
			case 281:
			{
				__reducedValues.push(this.action_281(__p));
				break;
			}
			case 282:
			{
				__reducedValues.push(this.action_282(__p));
				break;
			}
			case 283:
			{
				__reducedValues.push(this.action_283(__p));
				break;
			}
			case 284:
			{
				__reducedValues.push(this.action_284(__p));
				break;
			}
			case 285:
			{
				__reducedValues.push(this.action_285(__p));
				break;
			}
			case 286:
			{
				__reducedValues.push(this.action_286(__p));
				break;
			}
			case 287:
			{
				__reducedValues.push(this.action_287(__p));
				break;
			}
			case 288:
			{
				__reducedValues.push(this.action_288(__p));
				break;
			}
			case 289:
			{
				__reducedValues.push(this.action_289(__p));
				break;
			}
			case 290:
			{
				__reducedValues.push(this.action_290(__p));
				break;
			}
			case 291:
			{
				__reducedValues.push(this.action_291(__p));
				break;
			}
			case 292:
			{
				__reducedValues.push(this.action_292(__p));
				break;
			}
			case 293:
			{
				__reducedValues.push(this.action_293(__p));
				break;
			}
			case 294:
			{
				__reducedValues.push(this.action_294(__p));
				break;
			}
			case 295:
			{
				__reducedValues.push(this.action_295(__p));
				break;
			}
			case 296:
			{
				__reducedValues.push(this.action_296(__p));
				break;
			}
			case 297:
			{
				__reducedValues.push(this.action_297(__p));
				break;
			}
			case 298:
			{
				__reducedValues.push(this.action_298(__p));
				break;
			}
			case 299:
			{
				__reducedValues.push(this.action_299(__p));
				break;
			}
			case 300:
			{
				__reducedValues.push(this.action_300(__p));
				break;
			}
			case 301:
			{
				__reducedValues.push(this.action_301(__p));
				break;
			}
			case 302:
			{
				__reducedValues.push(this.action_302(__p));
				break;
			}
			case 303:
			{
				__reducedValues.push(this.action_303(__p));
				break;
			}
			case 304:
			{
				__reducedValues.push(this.action_304(__p));
				break;
			}
			case 305:
			{
				__reducedValues.push(this.action_305(__p));
				break;
			}
			case 306:
			{
				__reducedValues.push(this.action_306(__p));
				break;
			}
			case 307:
			{
				__reducedValues.push(this.action_307(__p));
				break;
			}
			case 308:
			{
				__reducedValues.push(this.action_308(__p));
				break;
			}
			case 309:
			{
				__reducedValues.push(this.action_309(__p));
				break;
			}
			case 310:
			{
				__reducedValues.push(this.action_310(__p));
				break;
			}
			case 311:
			{
				__reducedValues.push(this.action_311(__p));
				break;
			}
			case 312:
			{
				__reducedValues.push(this.action_312(__p));
				break;
			}
			case 313:
			{
				__reducedValues.push(this.action_313(__p));
				break;
			}
			case 314:
			{
				__reducedValues.push(this.action_314(__p));
				break;
			}
			case 315:
			{
				__reducedValues.push(this.action_315(__p));
				break;
			}
			case 316:
			{
				__reducedValues.push(this.action_316(__p));
				break;
			}
			case 317:
			{
				__reducedValues.push(this.action_317(__p));
				break;
			}
			case 318:
			{
				__reducedValues.push(this.action_318(__p));
				break;
			}
			case 319:
			{
				__reducedValues.push(this.action_319(__p));
				break;
			}
			case 320:
			{
				__reducedValues.push(this.action_320(__p));
				break;
			}
			case 321:
			{
				__reducedValues.push(this.action_321(__p));
				break;
			}
			case 322:
			{
				__reducedValues.push(this.action_322(__p));
				break;
			}
			case 323:
			{
				__reducedValues.push(this.action_323(__p));
				break;
			}
			case 324:
			{
				__reducedValues.push(this.action_324(__p));
				break;
			}
			case 325:
			{
				__reducedValues.push(this.action_325(__p));
				break;
			}
			case 326:
			{
				__reducedValues.push(this.action_326(__p));
				break;
			}
			case 327:
			{
				__reducedValues.push(this.action_327(__p));
				break;
			}
			case 328:
			{
				__reducedValues.push(this.action_328(__p));
				break;
			}
			case 329:
			{
				__reducedValues.push(this.action_329(__p));
				break;
			}
			case 330:
			{
				__reducedValues.push(this.action_330(__p));
				break;
			}
			case 331:
			{
				__reducedValues.push(this.action_331(__p));
				break;
			}
			case 332:
			{
				__reducedValues.push(this.action_332(__p));
				break;
			}
			case 333:
			{
				__reducedValues.push(this.action_333(__p));
				break;
			}
			case 334:
			{
				__reducedValues.push(this.action_334(__p));
				break;
			}
			case 335:
			{
				__reducedValues.push(this.action_335(__p));
				break;
			}
			case 336:
			{
				__reducedValues.push(this.action_336(__p));
				break;
			}
			case 337:
			{
				__reducedValues.push(this.action_337(__p));
				break;
			}
			case 338:
			{
				__reducedValues.push(this.action_338(__p));
				break;
			}
			case 339:
			{
				__reducedValues.push(this.action_339(__p));
				break;
			}
			case 340:
			{
				__reducedValues.push(this.action_340(__p));
				break;
			}
			case 341:
			{
				__reducedValues.push(this.action_341(__p));
				break;
			}
			case 342:
			{
				__reducedValues.push(this.action_342(__p));
				break;
			}
			case 343:
			{
				__reducedValues.push(this.action_343(__p));
				break;
			}
			case 344:
			{
				__reducedValues.push(this.action_344(__p));
				break;
			}
			case 345:
			{
				__reducedValues.push(this.action_345(__p));
				break;
			}
			case 346:
			{
				__reducedValues.push(this.action_346(__p));
				break;
			}
			case 347:
			{
				__reducedValues.push(this.action_347(__p));
				break;
			}
			case 348:
			{
				__reducedValues.push(this.action_348(__p));
				break;
			}
			case 349:
			{
				__reducedValues.push(this.action_349(__p));
				break;
			}
			case 350:
			{
				__reducedValues.push(this.action_350(__p));
				break;
			}
			case 351:
			{
				__reducedValues.push(this.action_351(__p));
				break;
			}
			case 352:
			{
				__reducedValues.push(this.action_352(__p));
				break;
			}
			case 353:
			{
				__reducedValues.push(this.action_353(__p));
				break;
			}
			case 354:
			{
				__reducedValues.push(this.action_354(__p));
				break;
			}
			case 355:
			{
				__reducedValues.push(this.action_355(__p));
				break;
			}
			case 356:
			{
				__reducedValues.push(this.action_356(__p));
				break;
			}
			case 357:
			{
				__reducedValues.push(this.action_357(__p));
				break;
			}
			case 358:
			{
				__reducedValues.push(this.action_358(__p));
				break;
			}
			case 359:
			{
				__reducedValues.push(this.action_359(__p));
				break;
			}
			case 360:
			{
				__reducedValues.push(this.action_360(__p));
				break;
			}
			case 361:
			{
				__reducedValues.push(this.action_361(__p));
				break;
			}
			case 362:
			{
				__reducedValues.push(this.action_362(__p));
				break;
			}
			case 363:
			{
				__reducedValues.push(this.action_363(__p));
				break;
			}
			case 364:
			{
				__reducedValues.push(this.action_364(__p));
				break;
			}
			case 365:
			{
				__reducedValues.push(this.action_365(__p));
				break;
			}
			case 366:
			{
				__reducedValues.push(this.action_366(__p));
				break;
			}
			case 367:
			{
				__reducedValues.push(this.action_367(__p));
				break;
			}
			case 368:
			{
				__reducedValues.push(this.action_368(__p));
				break;
			}
			case 369:
			{
				__reducedValues.push(this.action_369(__p));
				break;
			}
			case 370:
			{
				__reducedValues.push(this.action_370(__p));
				break;
			}
			case 371:
			{
				__reducedValues.push(this.action_371(__p));
				break;
			}
			case 372:
			{
				__reducedValues.push(this.action_372(__p));
				break;
			}
			case 373:
			{
				__reducedValues.push(this.action_373(__p));
				break;
			}
			case 374:
			{
				__reducedValues.push(this.action_374(__p));
				break;
			}
			case 375:
			{
				__reducedValues.push(this.action_375(__p));
				break;
			}
			case 376:
			{
				__reducedValues.push(this.action_376(__p));
				break;
			}
			case 377:
			{
				__reducedValues.push(this.action_377(__p));
				break;
			}
			case 378:
			{
				__reducedValues.push(this.action_378(__p));
				break;
			}
			case 379:
			{
				__reducedValues.push(this.action_379(__p));
				break;
			}
			case 380:
			{
				__reducedValues.push(this.action_380(__p));
				break;
			}
			case 381:
			{
				__reducedValues.push(this.action_381(__p));
				break;
			}
			case 382:
			{
				__reducedValues.push(this.action_382(__p));
				break;
			}
			case 383:
			{
				__reducedValues.push(this.action_383(__p));
				break;
			}
			case 384:
			{
				__reducedValues.push(this.action_384(__p));
				break;
			}
			case 385:
			{
				__reducedValues.push(this.action_385(__p));
				break;
			}
			case 386:
			{
				__reducedValues.push(this.action_386(__p));
				break;
			}
			case 387:
			{
				__reducedValues.push(this.action_387(__p));
				break;
			}
			case 388:
			{
				__reducedValues.push(this.action_388(__p));
				break;
			}
			case 389:
			{
				__reducedValues.push(this.action_389(__p));
				break;
			}
			case 390:
			{
				__reducedValues.push(this.action_390(__p));
				break;
			}
			case 391:
			{
				__reducedValues.push(this.action_391(__p));
				break;
			}
			case 392:
			{
				__reducedValues.push(this.action_392(__p));
				break;
			}
			case 393:
			{
				__reducedValues.push(this.action_393(__p));
				break;
			}
			case 394:
			{
				__reducedValues.push(this.action_394(__p));
				break;
			}
			case 395:
			{
				__reducedValues.push(this.action_395(__p));
				break;
			}
			case 396:
			{
				__reducedValues.push(this.action_396(__p));
				break;
			}
			case 397:
			{
				__reducedValues.push(this.action_397(__p));
				break;
			}
			case 398:
			{
				__reducedValues.push(this.action_398(__p));
				break;
			}
			case 399:
			{
				__reducedValues.push(this.action_399(__p));
				break;
			}
			case 400:
			{
				__reducedValues.push(this.action_400(__p));
				break;
			}
			case 401:
			{
				__reducedValues.push(this.action_401(__p));
				break;
			}
			case 402:
			{
				__reducedValues.push(this.action_402(__p));
				break;
			}
			case 403:
			{
				__reducedValues.push(this.action_403(__p));
				break;
			}
			case 404:
			{
				__reducedValues.push(this.action_404(__p));
				break;
			}
			case 405:
			{
				__reducedValues.push(this.action_405(__p));
				break;
			}
			case 406:
			{
				__reducedValues.push(this.action_406(__p));
				break;
			}
			case 407:
			{
				__reducedValues.push(this.action_407(__p));
				break;
			}
			case 408:
			{
				__reducedValues.push(this.action_408(__p));
				break;
			}
			case 409:
			{
				__reducedValues.push(this.action_409(__p));
				break;
			}
			case 410:
			{
				__reducedValues.push(this.action_410(__p));
				break;
			}
			case 411:
			{
				__reducedValues.push(this.action_411(__p));
				break;
			}
			case 412:
			{
				__reducedValues.push(this.action_412(__p));
				break;
			}
			case 413:
			{
				__reducedValues.push(this.action_413(__p));
				break;
			}
			case 414:
			{
				__reducedValues.push(this.action_414(__p));
				break;
			}
			case 415:
			{
				__reducedValues.push(this.action_415(__p));
				break;
			}
			case 416:
			{
				__reducedValues.push(this.action_416(__p));
				break;
			}
			case 417:
			{
				__reducedValues.push(this.action_417(__p));
				break;
			}
			case 418:
			{
				__reducedValues.push(this.action_418(__p));
				break;
			}
			case 419:
			{
				__reducedValues.push(this.action_419(__p));
				break;
			}
			case 420:
			{
				__reducedValues.push(this.action_420(__p));
				break;
			}
			case 421:
			{
				__reducedValues.push(this.action_421(__p));
				break;
			}
			case 422:
			{
				__reducedValues.push(this.action_422(__p));
				break;
			}
			case 423:
			{
				__reducedValues.push(this.action_423(__p));
				break;
			}
			case 424:
			{
				__reducedValues.push(this.action_424(__p));
				break;
			}
			case 425:
			{
				__reducedValues.push(this.action_425(__p));
				break;
			}
			case 426:
			{
				__reducedValues.push(this.action_426(__p));
				break;
			}
			case 427:
			{
				__reducedValues.push(this.action_427(__p));
				break;
			}
			case 428:
			{
				__reducedValues.push(this.action_428(__p));
				break;
			}
			case 429:
			{
				__reducedValues.push(this.action_429(__p));
				break;
			}
			case 430:
			{
				__reducedValues.push(this.action_430(__p));
				break;
			}
			case 431:
			{
				__reducedValues.push(this.action_431(__p));
				break;
			}
			case 432:
			{
				__reducedValues.push(this.action_432(__p));
				break;
			}
			case 433:
			{
				__reducedValues.push(this.action_433(__p));
				break;
			}
			case 434:
			{
				__reducedValues.push(this.action_434(__p));
				break;
			}
			case 435:
			{
				__reducedValues.push(this.action_435(__p));
				break;
			}
			case 436:
			{
				__reducedValues.push(this.action_436(__p));
				break;
			}
			case 437:
			{
				__reducedValues.push(this.action_437(__p));
				break;
			}
			case 438:
			{
				__reducedValues.push(this.action_438(__p));
				break;
			}
			case 439:
			{
				__reducedValues.push(this.action_439(__p));
				break;
			}
			case 440:
			{
				__reducedValues.push(this.action_440(__p));
				break;
			}
			case 441:
			{
				__reducedValues.push(this.action_441(__p));
				break;
			}
			case 442:
			{
				__reducedValues.push(this.action_442(__p));
				break;
			}
			case 443:
			{
				__reducedValues.push(this.action_443(__p));
				break;
			}
			case 444:
			{
				__reducedValues.push(this.action_444(__p));
				break;
			}
			case 445:
			{
				__reducedValues.push(this.action_445(__p));
				break;
			}
			case 446:
			{
				__reducedValues.push(this.action_446(__p));
				break;
			}
			case 447:
			{
				__reducedValues.push(this.action_447(__p));
				break;
			}
			case 448:
			{
				__reducedValues.push(this.action_448(__p));
				break;
			}
			case 449:
			{
				__reducedValues.push(this.action_449(__p));
				break;
			}
			case 450:
			{
				__reducedValues.push(this.action_450(__p));
				break;
			}
			case 451:
			{
				__reducedValues.push(this.action_451(__p));
				break;
			}
			case 452:
			{
				__reducedValues.push(this.action_452(__p));
				break;
			}
			case 453:
			{
				__reducedValues.push(this.action_453(__p));
				break;
			}
			case 454:
			{
				__reducedValues.push(this.action_454(__p));
				break;
			}
			case 455:
			{
				__reducedValues.push(this.action_455(__p));
				break;
			}
			case 456:
			{
				__reducedValues.push(this.action_456(__p));
				break;
			}
			case 457:
			{
				__reducedValues.push(this.action_457(__p));
				break;
			}
			case 458:
			{
				__reducedValues.push(this.action_458(__p));
				break;
			}
			case 459:
			{
				__reducedValues.push(this.action_459(__p));
				break;
			}
			case 460:
			{
				__reducedValues.push(this.action_460(__p));
				break;
			}
			case 461:
			{
				__reducedValues.push(this.action_461(__p));
				break;
			}
			case 462:
			{
				__reducedValues.push(this.action_462(__p));
				break;
			}
			case 463:
			{
				__reducedValues.push(this.action_463(__p));
				break;
			}
			case 464:
			{
				__reducedValues.push(this.action_464(__p));
				break;
			}
			case 465:
			{
				__reducedValues.push(this.action_465(__p));
				break;
			}
			case 466:
			{
				__reducedValues.push(this.action_466(__p));
				break;
			}
			case 467:
			{
				__reducedValues.push(this.action_467(__p));
				break;
			}
			case 468:
			{
				__reducedValues.push(this.action_468(__p));
				break;
			}
			case 469:
			{
				__reducedValues.push(this.action_469(__p));
				break;
			}
			case 470:
			{
				__reducedValues.push(this.action_470(__p));
				break;
			}
			case 471:
			{
				__reducedValues.push(this.action_471(__p));
				break;
			}
			case 472:
			{
				__reducedValues.push(this.action_472(__p));
				break;
			}
			case 473:
			{
				__reducedValues.push(this.action_473(__p));
				break;
			}
			case 474:
			{
				__reducedValues.push(this.action_474(__p));
				break;
			}
			case 475:
			{
				__reducedValues.push(this.action_475(__p));
				break;
			}
			case 476:
			{
				__reducedValues.push(this.action_476(__p));
				break;
			}
			case 477:
			{
				__reducedValues.push(this.action_477(__p));
				break;
			}
			case 478:
			{
				__reducedValues.push(this.action_478(__p));
				break;
			}
			case 479:
			{
				__reducedValues.push(this.action_479(__p));
				break;
			}
			case 480:
			{
				__reducedValues.push(this.action_480(__p));
				break;
			}
			case 481:
			{
				__reducedValues.push(this.action_481(__p));
				break;
			}
			case 482:
			{
				__reducedValues.push(this.action_482(__p));
				break;
			}
			case 483:
			{
				__reducedValues.push(this.action_483(__p));
				break;
			}
			case 484:
			{
				__reducedValues.push(this.action_484(__p));
				break;
			}
			case 485:
			{
				__reducedValues.push(this.action_485(__p));
				break;
			}
			case 486:
			{
				__reducedValues.push(this.action_486(__p));
				break;
			}
			case 487:
			{
				__reducedValues.push(this.action_487(__p));
				break;
			}
			case 488:
			{
				__reducedValues.push(this.action_488(__p));
				break;
			}
			case 489:
			{
				__reducedValues.push(this.action_489(__p));
				break;
			}
			case 490:
			{
				__reducedValues.push(this.action_490(__p));
				break;
			}
			case 491:
			{
				__reducedValues.push(this.action_491(__p));
				break;
			}
			case 492:
			{
				__reducedValues.push(this.action_492(__p));
				break;
			}
			case 493:
			{
				__reducedValues.push(this.action_493(__p));
				break;
			}
			case 494:
			{
				__reducedValues.push(this.action_494(__p));
				break;
			}
			case 495:
			{
				__reducedValues.push(this.action_495(__p));
				break;
			}
			case 496:
			{
				this.reduceAntecedent(___node, __void_expression_NT);
				__reducedValues.push(this.action_496(__p));
				break;
			}
			case 497:
			{
				this.reduceAntecedent(___node, __array_literal_NT);
				__reducedValues.push(this.action_497(__p));
				break;
			}
			case 498:
			{
				this.reduceAntecedent(___node, __type_name_NT);
				__reducedValues.push(this.action_498(__p));
				break;
			}
			case 499:
			{
				this.reduceAntecedent(___node, __e4x_literal_NT);
				__reducedValues.push(this.action_499(__p));
				break;
			}
			case 500:
			{
				this.reduceAntecedent(___node, __uint_constant_NT);
				__reducedValues.push(this.action_500(__p));
				break;
			}
			case 501:
			{
				this.reduceAntecedent(___node, __name_NT);
				__reducedValues.push(this.action_501(__p));
				break;
			}
			case 502:
			{
				this.reduceAntecedent(___node, __expression_NT);
				__reducedValues.push(this.action_502(__p));
				break;
			}
			case 503:
			{
				this.reduceAntecedent(___node, __object_literal_NT);
				__reducedValues.push(this.action_503(__p));
				break;
			}
			case 504:
			{
				this.reduceAntecedent(___node, __var_decl_NT);
				__reducedValues.push(this.action_504(__p));
				break;
			}
			case 505:
			{
				this.reduceAntecedent(___node, __qualifiedNamePart_NT);
				__reducedValues.push(this.action_505(__p));
				break;
			}
			case 506:
			{
				this.reduceAntecedent(___node, __literal_NT);
				__reducedValues.push(this.action_506(__p));
				break;
			}
			case 507:
			{
				this.reduceAntecedent(___node, __double_constant_NT);
				__reducedValues.push(this.action_507(__p));
				break;
			}
			case 508:
			{
				this.reduceAntecedent(___node, __boolean_literal_NT);
				__reducedValues.push(this.action_508(__p));
				break;
			}
			case 509:
			{
				this.reduceAntecedent(___node, __integer_constant_NT);
				__reducedValues.push(this.action_509(__p));
				break;
			}
			case 510:
			{
				this.reduceAntecedent(___node, __constant_value_NT);
				__reducedValues.push(this.action_510(__p));
				break;
			}
			case 511:
			{
				this.reduceAntecedent(___node, __comparison_expression_NT);
				__reducedValues.push(this.action_511(__p));
				break;
			}
			default:
			{
				throw new IllegalStateException("Unmatched reduce action " + iRule);
			}
		}
	}

	class JBurgAnnotation_AnonymousFunctionID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_AnonymousFunctionID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule0(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule0(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 105;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule0( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__function_NT))));
		}
	}

	class JBurgAnnotation_ArgumentID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_ArgumentID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_parameter = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __parameter_NT:
				{
					if ( cachedCostFor_parameter == -1 )
					{
						cachedCostFor_parameter = getCostForRule1(goalState);

					}
					return(cachedCostFor_parameter);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __parameter_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 427;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule1( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__type_name_NT)) + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
		}
	}

	class JBurgAnnotation_ArgumentID_3 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		JBurgAnnotation_ArgumentID_3(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_parameter = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __parameter_NT:
				{
					if ( cachedCostFor_parameter == -1 )
					{
						cachedCostFor_parameter = getCostForRule2(goalState);

					}
					return(cachedCostFor_parameter);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __parameter_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule2(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 387;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(3);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule2( int goalState)
		{

			return(normalizeCost((long)0 + (long) ( (((long)this.getNthChild(2).getCost(__required_constant_value_NT)) + ((long)this.getNthChild(1).getCost(__type_name_NT)))  + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
		}
	}

	class JBurgAnnotation_ArgumentRestID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_ArgumentRestID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_parameter = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __parameter_NT:
				{
					if ( cachedCostFor_parameter == -1 )
					{
						cachedCostFor_parameter = getCostForRule3(goalState);

					}
					return(cachedCostFor_parameter);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __parameter_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule3(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 428;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule3( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__type_name_NT)) + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
		}
	}

	class JBurgAnnotation_ArrayIndexExpressionID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_ArrayIndexExpressionID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_mxml_data_binding_setter_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule4(goalState);

						int currentCost = getCostForRule5(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule6(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					if ( cachedCostFor_mxml_data_binding_setter_expression == -1 )
					{
						cachedCostFor_mxml_data_binding_setter_expression = getCostForRule7(goalState);

					}
					return(cachedCostFor_mxml_data_binding_setter_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule4(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 106;
					}
					currentCost = getCostForRule5(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 434;
					}
					currentCost = getCostForRule6(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 448;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule7(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 107;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule4( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule7( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule5( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long)((long)this.getNthChild(1).getCost(__expression_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule6( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)1 + (long)((long)this.getNthChild(1).getCost(__expression_NT))));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_ArrayLiteralID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_ArrayLiteralID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_array_literal = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __array_literal_NT:
				{
					if ( cachedCostFor_array_literal == -1 )
					{
						cachedCostFor_array_literal = getCostForRule8(goalState);

					}
					return(cachedCostFor_array_literal);
				}
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					return(getCost(__literal_NT));
				}
				case __literal_NT:
				{
					return(getCost(__array_literal_NT));
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __array_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule8(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 108;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 506;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__array_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 497;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule8( int goalState)
		{

			if ( this.getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)1 + (long)((long)getNaryCost(this.getNthChild(0), __expression_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_BindableVariableID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_BindableVariableID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_var_decl = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(getCost(__var_decl_NT));
				}
				case __var_decl_NT:
				{
					if ( cachedCostFor_var_decl == -1 )
					{
						cachedCostFor_var_decl = getCostForRule9(goalState);

						int currentCost = getCostForRulea(goalState);

						if ( ( cachedCostFor_var_decl > currentCost )  )
							cachedCostFor_var_decl = currentCost;
					}
					return(cachedCostFor_var_decl);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__var_decl_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 504;
					}
					return(rule);
				}
				case __var_decl_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule9(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 458;
					}
					currentCost = getCostForRulea(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 459;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule9( int goalState)
		{

			if ( (this.getArity() >= 2) )
				return(normalizeCost((long)0 + (long) ( (((long)getNaryCost(this, __var_decl_NT, 2)) + ((long)this.getNthChild(1).getCost(__type_name_NT)))  + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea( int goalState)
		{

			if ( (this.getArity() >= 3) )
				return(normalizeCost((long)0 + (long) ( ( (((long)getNaryCost(this, __var_decl_NT, 3)) + ((long)this.getNthChild(2).getCost(__expression_NT)))  + ((long)this.getNthChild(1).getCost(__type_name_NT)))  + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_BlockID_0_n extends JBurgSpecializedAnnotation
	{
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_BlockID_0_n(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __finally_clause_NT:
				{
					return(normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0))));
				}
				case __statement_NT:
				{
					return(normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0))));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __finally_clause_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						rule = 275;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						rule = 274;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				default:
				{
					return narySubtrees.get(index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
				narySubtrees.add(child);
		}
	}

	class JBurgAnnotation_BreakID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_BreakID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(1);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(277);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_BreakID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_BreakID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRuleb(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleb(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 346;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuleb( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(0);
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_CatchID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_CatchID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_catch_block = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __catch_block_NT:
				{
					if ( cachedCostFor_catch_block == -1 )
					{
						cachedCostFor_catch_block = getCostForRulec(goalState);

						int currentCost = getCostForRuled(goalState);

						if ( ( cachedCostFor_catch_block > currentCost )  )
							cachedCostFor_catch_block = currentCost;
					}
					return(cachedCostFor_catch_block);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __catch_block_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulec(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 278;
					}
					currentCost = getCostForRuled(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 279;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulec( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArgumentID )
				return(normalizeCost((long)0 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__type_name_NT)))  + ((long)factoredPath_0.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuled( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ArgumentID )
				return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_0.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_ConditionalID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_ConditionalID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalElements = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalElements_NT:
				{
					if ( cachedCostFor_conditionalElements == -1 )
					{
						cachedCostFor_conditionalElements = getCostForRulee(goalState);

						int currentCost = getCostForRulef(goalState);

						if ( ( cachedCostFor_conditionalElements > currentCost )  )
							cachedCostFor_conditionalElements = currentCost;
					}
					return(cachedCostFor_conditionalElements);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalElements_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 283;
					}
					currentCost = getCostForRulef(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 450;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRulee( int goalState)
		{

			if ( (this.getArity() >= 1) )
				return(normalizeCost((long)0 + (long) (((long)getNaryCost(this, __statement_NT, 1)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulef( int goalState)
		{

			if ( (this.getArity() >= 1) )
				return(normalizeCost((long)0 + (long) (((long)getNaryCost(this, __statement_NT, 1)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_ConfigBlockID_0_n extends JBurgSpecializedAnnotation
	{
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_ConfigBlockID_0_n(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0))));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						rule = 281;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				default:
				{
					return narySubtrees.get(index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
				narySubtrees.add(child);
		}
	}

	class JBurgAnnotation_ContainerID_0_n extends JBurgSpecializedAnnotation
	{
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_ContainerID_0_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __parameterList_NT:
				{
					return(normalizeCost((long)0 + (long)((long)getNaryCost(this, __parameter_NT, 0))));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = normalizeCost((long)0 + (long)((long)getNaryCost(this, __void_expression_NT, 0)));

					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __parameterList_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __parameter_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						rule = 390;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __void_expression_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						rule = 338;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				default:
				{
					return narySubtrees.get(index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
				narySubtrees.add(child);
		}
	}

	class JBurgAnnotation_ContinueID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_ContinueID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(1);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(284);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_ContinueID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_ContinueID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule10(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule10(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 347;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule10( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(0);
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_DefaultID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_DefaultID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalElements = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalElements_NT:
				{
					if ( cachedCostFor_conditionalElements == -1 )
					{
						cachedCostFor_conditionalElements = getCostForRule11(goalState);

					}
					return(cachedCostFor_conditionalElements);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalElements_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 451;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule11( int goalState)
		{

			if ( this.getArity() == 1 && this.getNthChild(0).getOperator() == BlockID )
				return(normalizeCost((long)0 + (long)((long)getNaryCost(this.getNthChild(0), __statement_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_DefaultXMLStatementID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_DefaultXMLStatementID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule12(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule12(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 286;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule12( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_DoWhileLoopID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_DoWhileLoopID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule13(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule13(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 296;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule13( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__statement_NT))) ));
		}
	}

	class JBurgAnnotation_E4XFilterID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_E4XFilterID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule14(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule14(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 301;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule14( int goalState)
		{

			return(normalizeCost((long)3 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_ElseID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_ElseID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalElements = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalElements_NT:
				{
					if ( cachedCostFor_conditionalElements == -1 )
					{
						cachedCostFor_conditionalElements = getCostForRule15(goalState);

					}
					return(cachedCostFor_conditionalElements);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalElements_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule15(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 349;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule15( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__statement_NT))));
		}
	}

	class JBurgAnnotation_EmbedID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_EmbedID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(2);
				}
				case __required_constant_value_NT:
				{
					return(268435458);
				}
				case __statement_NT:
				{
					return(3);
				}
				case __type_param_expression_NT:
				{
					return(2);
				}
				case __void_expression_NT:
				{
					return(3);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(302);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __statement_NT:
				{
					return(496);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(1);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_ForEachLoopID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_ForEachLoopID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule16(goalState);

						int currentCost = getCostForRule17(goalState);

						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule18(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule19(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule1a(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule1b(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule1c(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule16(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 307;
					}
					currentCost = getCostForRule17(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 308;
					}
					currentCost = getCostForRule18(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 309;
					}
					currentCost = getCostForRule19(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 310;
					}
					currentCost = getCostForRule1a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 311;
					}
					currentCost = getCostForRule1b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 312;
					}
					currentCost = getCostForRule1c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 313;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule16( int goalState)
		{
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_2 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)10 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_2.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule17( int goalState)
		{
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_2 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)10 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__name_NT)))  + ((long)factoredPath_2.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule18( int goalState)
		{
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_2 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__name_NT)))  + ((long)factoredPath_2.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule19( int goalState)
		{
			JBurgAnnotation factoredPath_0 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1a( int goalState)
		{
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_3 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1b( int goalState)
		{
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_3 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1c( int goalState)
		{
			JBurgAnnotation factoredPath_1 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_2 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 1 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == VariableExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_2.getCost(__var_decl_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_ForLoopID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_ForLoopID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule1d(goalState);

						int currentCost = getCostForRule1e(goalState);

						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule1f(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule20(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule21(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule22(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule23(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule24(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule25(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule26(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule27(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule28(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 96;
					}
					currentCost = getCostForRule1e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 97;
					}
					currentCost = getCostForRule1f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 98;
					}
					currentCost = getCostForRule20(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 99;
					}
					currentCost = getCostForRule21(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 285;
					}
					currentCost = getCostForRule22(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 314;
					}
					currentCost = getCostForRule23(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 315;
					}
					currentCost = getCostForRule24(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 316;
					}
					currentCost = getCostForRule25(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 317;
					}
					currentCost = getCostForRule26(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 318;
					}
					currentCost = getCostForRule27(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 319;
					}
					currentCost = getCostForRule28(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 320;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule1d( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)ERROR_TRAP + (long) (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)getNaryCost(this.getNthChild(0), __expression_NT, 0))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1e( int goalState)
		{
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID )
				return(normalizeCost((long)ERROR_TRAP + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1f( int goalState)
		{
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_7 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_8 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && (this.getNthChild(0).getNthChild(0).getArity() >= 2) && this.getNthChild(0).getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(1).getOperator() == Op_InID )
				return(normalizeCost((long)ERROR_TRAP + (long) ( ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)getNaryCost(this.getNthChild(0).getNthChild(0), __expression_NT, 2)))  + ((long)factoredPath_8.getCost(__expression_NT)))  + ((long)factoredPath_7.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule20( int goalState)
		{
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_6 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && (this.getNthChild(0).getNthChild(0).getArity() >= 2) && this.getNthChild(0).getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == Op_InID )
				return(normalizeCost((long)ERROR_TRAP + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)getNaryCost(this.getNthChild(0).getNthChild(0), __expression_NT, 1)))  + ((long)factoredPath_6.getCost(__expression_NT)))  + ((long)factoredPath_5.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule21( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_2 = (this.getNthChild(0).getArity() > 2? this.getNthChild(0).getNthChild(2): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 3 && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_2.getCost(__void_expression_NT)))  + ((long)factoredPath_1.getCost(__conditionalJump_NT)))  + ((long)factoredPath_0.getCost(__void_expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule22( int goalState)
		{
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_6 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)10 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_6.getCost(__expression_NT)))  + ((long)factoredPath_5.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule23( int goalState)
		{
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_6 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)10 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_6.getCost(__name_NT)))  + ((long)factoredPath_5.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule24( int goalState)
		{
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_6 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_6.getCost(__name_NT)))  + ((long)factoredPath_5.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule25( int goalState)
		{
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_3.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule26( int goalState)
		{
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_6 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_6.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule27( int goalState)
		{
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_6 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_6.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule28( int goalState)
		{
			JBurgAnnotation factoredPath_4 = ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == Op_InID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 1 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == VariableExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)factoredPath_4.getCost(__expression_NT)))  + ((long)factoredPath_5.getCost(__var_decl_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_FullNameID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_FullNameID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_name = -1;
		private int cachedCostFor_import_name = -1;
		private int cachedCostFor_dottedNamePart = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __dottedNamePart_NT:
				{
					if ( cachedCostFor_dottedNamePart == -1 )
					{
						cachedCostFor_dottedNamePart = getCostForRule29(goalState);

					}
					return(cachedCostFor_dottedNamePart);
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __import_name_NT:
				{
					if ( cachedCostFor_import_name == -1 )
					{
						cachedCostFor_import_name = getCostForRule2a(goalState);

					}
					return(cachedCostFor_import_name);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __name_NT:
				{
					if ( cachedCostFor_name == -1 )
					{
						cachedCostFor_name = getCostForRule2b(goalState);

					}
					return(cachedCostFor_name);
				}
				case __new_type_name_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					int currentCost = getCost(__name_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __dottedNamePart_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule29(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 322;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 7;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __import_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule2a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 323;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 93;
					}
					return(rule);
				}
				case __name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule2b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 321;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 5;
					}
					currentCost = getCost(__name_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 501;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 4;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 6;
					}
					currentCost = getCost(__expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
		
		private int getCostForRule2b( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
		
		private int getCostForRule29( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
		
		private int getCostForRule2a( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
	}

	class JBurgAnnotation_FunctionCallID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_FunctionCallID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule2c(goalState);

						int currentCost = getCostForRule2d(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule2e(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule2f(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule30(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule31(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule32(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule33(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule34(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule35(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule36(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule37(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule38(goalState);

						int currentCost = getCostForRule39(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule3a(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule3b(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule2c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 303;
					}
					currentCost = getCostForRule2d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 304;
					}
					currentCost = getCostForRule2e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 324;
					}
					currentCost = getCostForRule2f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 325;
					}
					currentCost = getCostForRule30(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 326;
					}
					currentCost = getCostForRule31(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 327;
					}
					currentCost = getCostForRule32(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 330;
					}
					currentCost = getCostForRule33(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 332;
					}
					currentCost = getCostForRule34(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 374;
					}
					currentCost = getCostForRule35(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 375;
					}
					currentCost = getCostForRule36(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 376;
					}
					currentCost = getCostForRule37(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 377;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule38(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 328;
					}
					currentCost = getCostForRule39(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 329;
					}
					currentCost = getCostForRule3a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 331;
					}
					currentCost = getCostForRule3b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 447;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule2c( int goalState)
		{

			if ( this.getArity() == 3 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == KeywordNewID && this.getNthChild(1).getArity() == 0 && this.getNthChild(1).getOperator() == IdentifierID && this.getNthChild(2).getArity() == 0 && this.getNthChild(2).getOperator() == ContainerID )
				return(cachedCost_a9b7bfd());
			else
				return(Integer.MAX_VALUE);
		}
		private int cachedCostFunctionResult_163a5743 = -1;
		
		private int cachedCost_a9b7bfd( )
		{
			if ( cachedCostFunctionResult_163a5743 == -1 )
				cachedCostFunctionResult_163a5743 = isEmptyArrayConstructor(m_node);
			return(cachedCostFunctionResult_163a5743);
		}
		
		private int getCostForRule2d( int goalState)
		{

			if ( this.getArity() == 3 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == KeywordNewID && this.getNthChild(1).getArity() == 0 && this.getNthChild(1).getOperator() == IdentifierID && this.getNthChild(2).getArity() == 0 && this.getNthChild(2).getOperator() == ContainerID )
				return(cachedCost_26616589());
			else
				return(Integer.MAX_VALUE);
		}
		private int cachedCostFunctionResult_b4881caf = -1;
		
		private int cachedCost_26616589( )
		{
			if ( cachedCostFunctionResult_b4881caf == -1 )
				cachedCostFunctionResult_b4881caf = isEmptyObjectConstructor(m_node);
			return(cachedCostFunctionResult_b4881caf);
		}
		
		private int getCostForRule2e( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)4 + (long) ( (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule2f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)4 + (long) ( (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule30( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)30 + (long) (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule31( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)3 + (long) (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule38( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long) (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule39( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_4 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == FunctionCallID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == SuperID && this.getNthChild(0).getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(0).getNthChild(1).getOperator() == ContainerID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long) ( (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_4.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule32( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_4 = (((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(0).getOperator() == FunctionCallID && this.getNthChild(0).getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getNthChild(0).getOperator() == SuperID && this.getNthChild(0).getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(0).getNthChild(1).getOperator() == ContainerID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long) ( (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_4.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule3a( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == SuperID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)1 + (long) (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)factoredPath_1.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule33( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == SuperID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long) (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)factoredPath_1.getCost(__name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule34( int goalState)
		{

			if ( this.getArity() == 3 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == KeywordNewID && this.getNthChild(2).getOperator() == ContainerID )
				return(normalizeCost((long)30 + (long) (((long)getNaryCost(this.getNthChild(2), __expression_NT, 0)) + ((long)this.getNthChild(1).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule35( int goalState)
		{

			if ( this.getArity() == 3 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == KeywordNewID && this.getNthChild(2).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long) (((long)getNaryCost(this.getNthChild(2), __expression_NT, 0)) + ((long)this.getNthChild(1).getCost(__new_type_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule36( int goalState)
		{
			JBurgAnnotation factoredPath_2 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 3 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == KeywordNewID && this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == MemberAccessExpressionID && this.getNthChild(2).getOperator() == ContainerID )
				return(normalizeCost((long)10 + (long) ( (((long)getNaryCost(this.getNthChild(2), __expression_NT, 0)) + ((long)factoredPath_3.getCost(__name_NT)))  + ((long)factoredPath_2.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule37( int goalState)
		{

			if ( this.getArity() == 3 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == KeywordNewID && this.getNthChild(2).getArity() == 0 && this.getNthChild(2).getOperator() == ContainerID )
				return(normalizeCost((long)0 + (long)((long)this.getNthChild(1).getCost(__vector_literal_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule3b( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == SuperID && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long)((long)getNaryCost(this.getNthChild(1), __expression_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_FunctionID_3 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		JBurgAnnotation_FunctionID_3(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_function = -1;
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					if ( cachedCostFor_function == -1 )
					{
						cachedCostFor_function = getCostForRule3c(goalState);

					}
					return(cachedCostFor_function);
				}
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule3d(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule3c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 469;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule3d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 470;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(3);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule3c( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) (((long)this.getNthChild(2).getCost(__statement_NT)) + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule3d( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) (((long)this.getNthChild(2).getCost(__statement_NT)) + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_FunctionID_4 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		private JBurgAnnotation subtree3;
		JBurgAnnotation_FunctionID_4(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_function = -1;
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					if ( cachedCostFor_function == -1 )
					{
						cachedCostFor_function = getCostForRule3e(goalState);

					}
					return(cachedCostFor_function);
				}
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule3f(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule3e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 460;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule3f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 461;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(4);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				case 3:
					return subtree3;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else if ( subtree3 == null )
				subtree3 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule3e( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) ( (((long)this.getNthChild(3).getCost(__statement_NT)) + ((long)this.getNthChild(2).getCost(__return_type_name_NT)))  + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule3f( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) ( (((long)this.getNthChild(3).getCost(__statement_NT)) + ((long)this.getNthChild(2).getCost(__return_type_name_NT)))  + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_FunctionObjectID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_FunctionObjectID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule40(goalState);

						int currentCost = getCostForRule41(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule40(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 462;
					}
					currentCost = getCostForRule41(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 471;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule40( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 2? this.getNthChild(0).getNthChild(2): errorAnnotation);
			JBurgAnnotation factoredPath_2 = (this.getNthChild(0).getArity() > 3? this.getNthChild(0).getNthChild(3): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 4 && this.getNthChild(0).getOperator() == FunctionID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)1 + (long) ( (((long)factoredPath_2.getCost(__statement_NT)) + ((long)factoredPath_1.getCost(__return_type_name_NT)))  + ((long)factoredPath_0.getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule41( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 2? this.getNthChild(0).getNthChild(2): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 3 && this.getNthChild(0).getOperator() == FunctionID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__statement_NT)) + ((long)factoredPath_0.getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_GetterID_3 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		JBurgAnnotation_GetterID_3(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_function = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					if ( cachedCostFor_function == -1 )
					{
						cachedCostFor_function = getCostForRule42(goalState);

					}
					return(cachedCostFor_function);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule42(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 472;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(3);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule42( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) (((long)this.getNthChild(2).getCost(__statement_NT)) + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_GetterID_4 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		private JBurgAnnotation subtree3;
		JBurgAnnotation_GetterID_4(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_function = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					if ( cachedCostFor_function == -1 )
					{
						cachedCostFor_function = getCostForRule43(goalState);

					}
					return(cachedCostFor_function);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule43(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 463;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(4);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				case 3:
					return subtree3;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else if ( subtree3 == null )
				subtree3 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule43( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) ( (((long)this.getNthChild(3).getCost(__statement_NT)) + ((long)this.getNthChild(2).getCost(__return_type_name_NT)))  + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_GotoID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_GotoID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule44(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule44(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 333;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule44( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(1);
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_IdentifierID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_IdentifierID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __decl_name_NT:
				{
					return(0);
				}
				case __dottedNamePart_NT:
				{
					return(0);
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = 2000;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __import_name_NT:
				{
					return(0);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(1);
				}
				case __name_NT:
				{
					return(0);
				}
				case __new_type_name_NT:
				{
					return(0);
				}
				case __qualifiedNamePart_NT:
				{
					return(0);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(1);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(1);
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = 1;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __decl_name_NT:
				{
					return(437);
				}
				case __dottedNamePart_NT:
				{
					return(505);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 2000;
					rule = 7;
					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __import_name_NT:
				{
					return(439);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(93);
				}
				case __name_NT:
				{
					return(436);
				}
				case __new_type_name_NT:
				{
					return(501);
				}
				case __qualifiedNamePart_NT:
				{
					return(438);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					return(498);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					return(4);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 1;
					rule = 6;
					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
	}

	class JBurgAnnotation_IfStatementID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_IfStatementID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule45(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule45(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 339;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule45( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( (this.getArity() >= 1) && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ConditionalID )
				return(normalizeCost((long)0 + (long) ( (((long)getNaryCost(this, __conditionalElements_NT, 1)) + ((long)factoredPath_1.getCost(__statement_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_ImportID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_ImportID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule46(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule46(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 340;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule46( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__import_name_NT))));
		}
	}

	class JBurgAnnotation_InstructionListID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_InstructionListID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(2);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					return(268435457);
				}
				case __statement_NT:
				{
					return(2);
				}
				case __type_param_expression_NT:
				{
					return(1);
				}
				case __void_expression_NT:
				{
					return(2);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(343);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __statement_NT:
				{
					return(496);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(1);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LabledStatementID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_LabledStatementID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule47(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule47(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 348;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule47( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)this.getNthChild(0).getCost(__non_resolving_identifier_NT))) ));
		}
	}

	class JBurgAnnotation_LiteralBooleanID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralBooleanID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					return(0);
				}
				case __boolean_literal_NT:
				{
					return(1);
				}
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(1);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __literal_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > 1 )  )
						bestCost = 1;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					return(276);
				}
				case __boolean_literal_NT:
				{
					return(92);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(86);
				}
				case __expression_NT:
				{
					return(12);
				}
				case __literal_NT:
				{
					return(508);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					if ( ( bestCost > 1 )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralDoubleID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralDoubleID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(4);
				}
				case __double_constant_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(4);
				}
				case __numeric_constant_NT:
				{
					return(3);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = 4;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(87);
				}
				case __double_constant_NT:
				{
					return(300);
				}
				case __expression_NT:
				{
					return(90);
				}
				case __numeric_constant_NT:
				{
					return(507);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 4;
					rule = 510;
					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralIntegerID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralIntegerID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(1);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __integer_constant_NT:
				{
					return(0);
				}
				case __numeric_constant_NT:
				{
					return(0);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > 1 )  )
						bestCost = 1;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(87);
				}
				case __expression_NT:
				{
					return(10);
				}
				case __integer_constant_NT:
				{
					return(344);
				}
				case __numeric_constant_NT:
				{
					return(509);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					if ( ( bestCost > 1 )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralIntegerZeroID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralIntegerZeroID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = 2;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					if ( ( bestCost > 2 )  )
						bestCost = 2;
					return(bestCost);
				}
				case __integer_constant_NT:
				{
					return(1);
				}
				case __numeric_constant_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __uint_constant_NT:
				{
					return(1);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 2;
					rule = 10;
					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 89;
					}
					if ( ( bestCost > 2 )  )
					{
						rule = 11;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					return(83);
				}
				case __numeric_constant_NT:
				{
					return(509);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __uint_constant_NT:
				{
					return(84);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralNullID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralNullID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(0);
				}
				case __expression_NT:
				{
					return(0);
				}
				case __literal_NT:
				{
					return(1);
				}
				case __object_literal_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = 0;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(382);
				}
				case __expression_NT:
				{
					return(90);
				}
				case __literal_NT:
				{
					return(503);
				}
				case __object_literal_NT:
				{
					return(383);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 0;
					rule = 510;
					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralNumberID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralNumberID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(4);
				}
				case __double_constant_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(4);
				}
				case __numeric_constant_NT:
				{
					return(3);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = 4;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(87);
				}
				case __double_constant_NT:
				{
					return(384);
				}
				case __expression_NT:
				{
					return(90);
				}
				case __numeric_constant_NT:
				{
					return(507);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 4;
					rule = 510;
					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralObjectID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralObjectID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(0);
				}
				case __expression_NT:
				{
					return(0);
				}
				case __literal_NT:
				{
					return(1);
				}
				case __object_literal_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = 0;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(484);
				}
				case __expression_NT:
				{
					return(90);
				}
				case __literal_NT:
				{
					return(503);
				}
				case __object_literal_NT:
				{
					return(485);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 0;
					rule = 510;
					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralRegexID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralRegexID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(6);
				}
				case __expression_NT:
				{
					return(5);
				}
				case __literal_NT:
				{
					return(5);
				}
				case __object_literal_NT:
				{
					return(5);
				}
				case __required_constant_value_NT:
				{
					return(268435461);
				}
				case __statement_NT:
				{
					return(6);
				}
				case __type_param_expression_NT:
				{
					return(5);
				}
				case __void_expression_NT:
				{
					return(6);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(506);
				}
				case __literal_NT:
				{
					return(503);
				}
				case __object_literal_NT:
				{
					return(426);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __statement_NT:
				{
					return(496);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(1);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralStringID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralStringID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(1);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > 1 )  )
						bestCost = 1;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __string_constant_NT:
				{
					return(0);
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(85);
				}
				case __expression_NT:
				{
					return(9);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					if ( ( bestCost > 1 )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __string_constant_NT:
				{
					return(444);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralUintID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralUintID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(1);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __numeric_constant_NT:
				{
					return(0);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > 1 )  )
						bestCost = 1;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __uint_constant_NT:
				{
					return(0);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(87);
				}
				case __expression_NT:
				{
					return(11);
				}
				case __numeric_constant_NT:
				{
					return(500);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					if ( ( bestCost > 1 )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __uint_constant_NT:
				{
					return(476);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_LiteralXMLID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_LiteralXMLID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(1);
				}
				case __e4x_literal_NT:
				{
					return(0);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > 1 )  )
						bestCost = 1;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __string_constant_NT:
				{
					return(0);
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					return(85);
				}
				case __e4x_literal_NT:
				{
					return(103);
				}
				case __expression_NT:
				{
					return(9);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					if ( ( bestCost > 1 )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __string_constant_NT:
				{
					return(499);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_MXMLEventSpecifierID_0_n extends JBurgSpecializedAnnotation
	{
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_MXMLEventSpecifierID_0_n(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					return(normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0))));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __statement_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						rule = 361;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				default:
				{
					return narySubtrees.get(index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
				narySubtrees.add(child);
		}
	}

	class JBurgAnnotation_MemberAccessExpressionID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_MemberAccessExpressionID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_name = -1;
		private int cachedCostFor_mxml_data_binding_setter_expression = -1;
		private int cachedCostFor_dottedNamePart = -1;
		private int cachedCostFor_constant_value = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					if ( cachedCostFor_constant_value == -1 )
					{
						cachedCostFor_constant_value = getCostForRule48(goalState);

						int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
					}
					return(cachedCostFor_constant_value);
				}
				case __dottedNamePart_NT:
				{
					if ( cachedCostFor_dottedNamePart == -1 )
					{
						cachedCostFor_dottedNamePart = getCostForRule49(goalState);

					}
					return(cachedCostFor_dottedNamePart);
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule4a(goalState);

						int currentCost = getCostForRule4b(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule4c(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule4d(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule4e(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule4f(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					if ( cachedCostFor_mxml_data_binding_setter_expression == -1 )
					{
						cachedCostFor_mxml_data_binding_setter_expression = getCostForRule50(goalState);

						int currentCost = getCostForRule51(goalState);

						if ( ( cachedCostFor_mxml_data_binding_setter_expression > currentCost )  )
							cachedCostFor_mxml_data_binding_setter_expression = currentCost;
						currentCost = getCostForRule52(goalState);
						if ( ( cachedCostFor_mxml_data_binding_setter_expression > currentCost )  )
							cachedCostFor_mxml_data_binding_setter_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));
						if ( ( cachedCostFor_mxml_data_binding_setter_expression > currentCost )  )
							cachedCostFor_mxml_data_binding_setter_expression = currentCost;
					}
					return(cachedCostFor_mxml_data_binding_setter_expression);
				}
				case __name_NT:
				{
					if ( cachedCostFor_name == -1 )
					{
						cachedCostFor_name = getCostForRule53(goalState);

						int currentCost = getCostForRule54(goalState);

						if ( ( cachedCostFor_name > currentCost )  )
							cachedCostFor_name = currentCost;
						currentCost = getCostForRule55(goalState);
						if ( ( cachedCostFor_name > currentCost )  )
							cachedCostFor_name = currentCost;
						currentCost = getCostForRule56(goalState);
						if ( ( cachedCostFor_name > currentCost )  )
							cachedCostFor_name = currentCost;
					}
					return(cachedCostFor_name);
				}
				case __new_type_name_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					int currentCost = getCost(__name_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = getCost(__expression_NT);

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule48(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 282;
					}
					currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __dottedNamePart_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule49(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 297;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule4a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 357;
					}
					currentCost = getCostForRule4b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 415;
					}
					currentCost = getCostForRule4c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 416;
					}
					currentCost = getCostForRule4d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 421;
					}
					currentCost = getCostForRule4e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 423;
					}
					currentCost = getCostForRule4f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 479;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 7;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule50(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 358;
					}
					currentCost = getCostForRule51(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 422;
					}
					currentCost = getCostForRule52(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 424;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 93;
					}
					return(rule);
				}
				case __name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule53(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 298;
					}
					currentCost = getCostForRule54(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 299;
					}
					currentCost = getCostForRule55(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 446;
					}
					currentCost = getCostForRule56(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 449;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 5;
					}
					currentCost = getCost(__name_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 501;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 4;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 502;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 6;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
		
		private int getCostForRule48( int goalState)
		{

			return(normalizeCost((long)cachedCost_4411a827() + (long) (((long)this.getNthChild(1).getCost(__name_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		private int cachedCostFunctionResult_12095b4c = -1;
		
		private int cachedCost_4411a827( )
		{
			if ( cachedCostFunctionResult_12095b4c == -1 )
				cachedCostFunctionResult_12095b4c = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_12095b4c);
		}
		
		private int getCostForRule49( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
		
		private int getCostForRule53( int goalState)
		{

			return(normalizeCost((long)cachedCost_b05ac882() + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
		private int cachedCostFunctionResult_f25f3279 = -1;
		
		private int cachedCost_b05ac882( )
		{
			if ( cachedCostFunctionResult_f25f3279 == -1 )
				cachedCostFunctionResult_f25f3279 = isDottedName(m_node);
			return(cachedCostFunctionResult_f25f3279);
		}
		
		private int getCostForRule54( int goalState)
		{

			return(normalizeCost((long)cachedCost_609fc9ba() + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
		private int cachedCostFunctionResult_1ec55d2c = -1;
		
		private int cachedCost_609fc9ba( )
		{
			if ( cachedCostFunctionResult_1ec55d2c == -1 )
				cachedCostFunctionResult_1ec55d2c = isPackageName(m_node);
			return(cachedCostFunctionResult_1ec55d2c);
		}
		
		private int getCostForRule4a( int goalState)
		{

			return(normalizeCost((long)10 + (long) (((long)this.getNthChild(1).getCost(__name_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule50( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__name_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule4b( int goalState)
		{
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 1 && this.getNthChild(1).getOperator() == Op_AtID && this.getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)factoredPath_3.getCost(__name_NT)) + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule4c( int goalState)
		{
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 1 && this.getNthChild(1).getOperator() == Op_AtID && this.getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)factoredPath_3.getCost(__expression_NT)) + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule4d( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule51( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule4e( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)100 + (long) ( (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule52( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)100 + (long) ( (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule55( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)0 + (long)((long)this.getNthChild(1).getCost(__name_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule56( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == FunctionCallID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == SuperID && this.getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(1).getOperator() == ContainerID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)cachedCost_4dc0513d() + (long)((long)this.getNthChild(1).getCost(__name_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		private int cachedCostFunctionResult_526494ba = -1;
		
		private int cachedCost_4dc0513d( )
		{
			if ( cachedCostFunctionResult_526494ba == -1 )
				cachedCostFunctionResult_526494ba = isSuperThisForFieldAccess(m_node);
			return(cachedCostFunctionResult_526494ba);
		}
		
		private int getCostForRule4f( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_NamespaceAccessExpressionID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_NamespaceAccessExpressionID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_runtime_name_expression = -1;
		private int cachedCostFor_name = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = normalizeCost((long)1 + (long)getCost(__runtime_name_expression_NT));
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					int currentCost = normalizeCost((long)1 + (long)getCost(__runtime_name_expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __name_NT:
				{
					if ( cachedCostFor_name == -1 )
					{
						cachedCostFor_name = getCostForRule57(goalState);

						int currentCost = getCostForRule58(goalState);

						if ( ( cachedCostFor_name > currentCost )  )
							cachedCostFor_name = currentCost;
					}
					return(cachedCostFor_name);
				}
				case __new_type_name_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					int currentCost = getCost(__name_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __runtime_name_expression_NT:
				{
					if ( cachedCostFor_runtime_name_expression == -1 )
					{
						cachedCostFor_runtime_name_expression = getCostForRule59(goalState);

						int currentCost = getCostForRule5a(goalState);

						if ( ( cachedCostFor_runtime_name_expression > currentCost )  )
							cachedCostFor_runtime_name_expression = currentCost;
						currentCost = getCostForRule5b(goalState);
						if ( ( cachedCostFor_runtime_name_expression > currentCost )  )
							cachedCostFor_runtime_name_expression = currentCost;
					}
					return(cachedCostFor_runtime_name_expression);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 7;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__runtime_name_expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 8;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 93;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__runtime_name_expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 94;
					}
					return(rule);
				}
				case __name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule57(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 362;
					}
					currentCost = getCostForRule58(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 363;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 5;
					}
					currentCost = getCost(__name_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 501;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __runtime_name_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule59(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 369;
					}
					currentCost = getCostForRule5a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 370;
					}
					currentCost = getCostForRule5b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 371;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 4;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 6;
					}
					currentCost = getCost(__expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
		
		private int getCostForRule57( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == NamespaceIdentifierID )
				return(normalizeCost((long)cachedCost_d3ce5471() + (long)((long)this.getNthChild(1).getCost(__name_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		private int cachedCostFunctionResult_af76905a = -1;
		
		private int cachedCost_d3ce5471( )
		{
			if ( cachedCostFunctionResult_af76905a == -1 )
				cachedCostFunctionResult_af76905a = qualifierIsCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_af76905a);
		}
		
		private int getCostForRule58( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == NamespaceIdentifierID )
				return(normalizeCost((long)ERROR_TRAP + (long)((long)this.getNthChild(1).getCost(__name_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule59( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == NamespaceIdentifierID )
				return(normalizeCost((long)cachedCost_d3ce5471() + (long)((long)this.getNthChild(1).getCost(__expression_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule5a( int goalState)
		{

			return(normalizeCost((long)2000 + (long) (((long)this.getNthChild(1).getCost(__name_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule5b( int goalState)
		{

			return(normalizeCost((long)2000 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_NamespaceID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_NamespaceID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule5c(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule5c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 366;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule5c( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_NamespaceID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_NamespaceID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule5d(goalState);

						int currentCost = getCostForRule5e(goalState);

						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule5d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 367;
					}
					currentCost = getCostForRule5e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 368;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule5d( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule5e( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__name_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
	}

	class JBurgAnnotation_NamespaceIdentifierID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_NamespaceIdentifierID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = 1;

					if ( ( bestCost > 2001 )  )
						bestCost = 2001;
					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(2);
				}
				case __name_NT:
				{
					return(1);
				}
				case __new_type_name_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(2);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(2);
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = 2;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 1;
					rule = 365;
					if ( ( bestCost > 2001 )  )
					{
						bestCost = 2001;
						rule = 7;
					}
					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(93);
				}
				case __name_NT:
				{
					return(364);
				}
				case __new_type_name_NT:
				{
					return(501);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					return(498);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					return(4);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					bestCost = 2;
					rule = 6;
					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
	}

	class JBurgAnnotation_NilID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_NilID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(1);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					return(268435457);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(1);
				}
				case __void_expression_NT:
				{
					return(0);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(380);
				}
				case __expression_NT:
				{
					return(379);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(378);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_NonResolvingIdentifierID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_NonResolvingIdentifierID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(2);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __non_resolving_identifier_NT:
				{
					return(0);
				}
				case __required_constant_value_NT:
				{
					return(268435457);
				}
				case __statement_NT:
				{
					return(2);
				}
				case __type_param_expression_NT:
				{
					return(1);
				}
				case __void_expression_NT:
				{
					return(2);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(91);
				}
				case __non_resolving_identifier_NT:
				{
					return(381);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __statement_NT:
				{
					return(496);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(1);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_ObjectLiteralExpressionID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_ObjectLiteralExpressionID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_object_literal = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					return(getCost(__literal_NT));
				}
				case __literal_NT:
				{
					return(getCost(__object_literal_NT));
				}
				case __object_literal_NT:
				{
					if ( cachedCostFor_object_literal == -1 )
					{
						cachedCostFor_object_literal = getCostForRule5f(goalState);

					}
					return(cachedCostFor_object_literal);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 506;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__object_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 503;
					}
					return(rule);
				}
				case __object_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule5f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 385;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule5f( int goalState)
		{

			if ( this.getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)3 + (long)((long)getNaryCost(this.getNthChild(0), __object_literal_element_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_ObjectLiteralValuePairID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_ObjectLiteralValuePairID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_object_literal_element = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __object_literal_element_NT:
				{
					if ( cachedCostFor_object_literal_element == -1 )
					{
						cachedCostFor_object_literal_element = getCostForRule60(goalState);

					}
					return(cachedCostFor_object_literal_element);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __object_literal_element_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule60(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 386;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule60( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_AddAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_AddAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule61(goalState);

						int currentCost = getCostForRule62(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule63(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule64(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule65(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule66(goalState);

						int currentCost = getCostForRule67(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule68(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule69(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule6a(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule61(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 211;
					}
					currentCost = getCostForRule62(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 214;
					}
					currentCost = getCostForRule63(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 216;
					}
					currentCost = getCostForRule64(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 218;
					}
					currentCost = getCostForRule65(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 220;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule66(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 212;
					}
					currentCost = getCostForRule67(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 213;
					}
					currentCost = getCostForRule68(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 215;
					}
					currentCost = getCostForRule69(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 217;
					}
					currentCost = getCostForRule6a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 219;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule61( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule66( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule67( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule62( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule68( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule63( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule69( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule64( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule6a( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule65( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_AddID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_AddID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule6b(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule6c(goalState);

						int currentCost = getCostForRule6d(goalState);

						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule6b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 478;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule6c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 41;
					}
					currentCost = getCostForRule6d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 42;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule6c( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__numeric_constant_NT))));
		}
		
		private int getCostForRule6d( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__constant_value_NT))));
		}
		
		private int getCostForRule6b( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_Op_AddID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_AddID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		private int cachedCostFor_string_constant = -1;
		private int cachedCostFor_constant_value = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					if ( cachedCostFor_constant_value == -1 )
					{
						cachedCostFor_constant_value = getCostForRule6e(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
					}
					return(cachedCostFor_constant_value);
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule6f(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule70(goalState);

					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __string_constant_NT:
				{
					if ( cachedCostFor_string_constant == -1 )
					{
						cachedCostFor_string_constant = getCostForRule71(goalState);

						int currentCost = getCostForRule72(goalState);

						if ( ( cachedCostFor_string_constant > currentCost )  )
							cachedCostFor_string_constant = currentCost;
						currentCost = getCostForRule73(goalState);
						if ( ( cachedCostFor_string_constant > currentCost )  )
							cachedCostFor_string_constant = currentCost;
					}
					return(cachedCostFor_string_constant);
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule6e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 21;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 87;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 85;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule6f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 104;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 89;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 9;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule70(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 20;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __string_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule71(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 22;
					}
					currentCost = getCostForRule72(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 23;
					}
					currentCost = getCostForRule73(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 24;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule70( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule6e( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule71( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule72( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule73( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule6f( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_AsID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_AsID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule74(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule74(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 265;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule74( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_AssignId_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_AssignId_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule75(goalState);

						int currentCost = getCostForRule76(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule77(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule78(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule79(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule7a(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule7b(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule7c(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule7d(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule7e(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule7f(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule80(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule81(goalState);

						int currentCost = getCostForRule82(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule83(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule84(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule85(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule86(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule87(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule88(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule89(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule8a(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule8b(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule8c(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule8d(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule75(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 2;
					}
					currentCost = getCostForRule76(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 232;
					}
					currentCost = getCostForRule77(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 234;
					}
					currentCost = getCostForRule78(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 236;
					}
					currentCost = getCostForRule79(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 238;
					}
					currentCost = getCostForRule7a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 240;
					}
					currentCost = getCostForRule7b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 242;
					}
					currentCost = getCostForRule7c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 246;
					}
					currentCost = getCostForRule7d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 248;
					}
					currentCost = getCostForRule7e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 250;
					}
					currentCost = getCostForRule7f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 252;
					}
					currentCost = getCostForRule80(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 254;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule81(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 231;
					}
					currentCost = getCostForRule82(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 233;
					}
					currentCost = getCostForRule83(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 235;
					}
					currentCost = getCostForRule84(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 237;
					}
					currentCost = getCostForRule85(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 239;
					}
					currentCost = getCostForRule86(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 241;
					}
					currentCost = getCostForRule87(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 243;
					}
					currentCost = getCostForRule88(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 244;
					}
					currentCost = getCostForRule89(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 245;
					}
					currentCost = getCostForRule8a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 247;
					}
					currentCost = getCostForRule8b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 249;
					}
					currentCost = getCostForRule8c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 251;
					}
					currentCost = getCostForRule8d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 253;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule75( int goalState)
		{

			return(normalizeCost((long)ERROR_TRAP + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule81( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule76( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule82( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule77( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule83( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule78( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule84( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule79( int goalState)
		{

			return(normalizeCost((long)2 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule85( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_4 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(1).getOperator() == Op_AtID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_5.getCost(__name_NT)))  + ((long)factoredPath_4.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule7a( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_4 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(1).getOperator() == Op_AtID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_5.getCost(__name_NT)))  + ((long)factoredPath_4.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule86( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__name_NT)))  + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule7b( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__name_NT)))  + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule87( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_4 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(1).getOperator() == Op_AtID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_5.getCost(__expression_NT)))  + ((long)factoredPath_4.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule88( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_4 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 0? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_5 = (((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getArity() > 1? ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 1 && this.getNthChild(0).getNthChild(1).getOperator() == Op_AtID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_5.getCost(__expression_NT)))  + ((long)factoredPath_4.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule89( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule7c( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 0? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule8a( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule7d( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule8b( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule7e( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(0).getOperator() == SuperID )
				return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule8c( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule7f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule8d( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule80( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_3.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_Op_AtID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_AtID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_name = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __name_NT:
				{
					if ( cachedCostFor_name == -1 )
					{
						cachedCostFor_name = getCostForRule8e(goalState);

					}
					return(cachedCostFor_name);
				}
				case __new_type_name_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					int currentCost = getCost(__name_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 7;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 93;
					}
					return(rule);
				}
				case __name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule8e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 266;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 5;
					}
					currentCost = getCost(__name_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 501;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 4;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 6;
					}
					currentCost = getCost(__expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
		
		private int getCostForRule8e( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_Op_BitwiseAndAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_BitwiseAndAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule8f(goalState);

						int currentCost = getCostForRule90(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule91(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule92(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule93(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule94(goalState);

						int currentCost = getCostForRule95(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule96(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule97(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule98(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule8f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 109;
					}
					currentCost = getCostForRule90(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 112;
					}
					currentCost = getCostForRule91(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 114;
					}
					currentCost = getCostForRule92(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 116;
					}
					currentCost = getCostForRule93(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 118;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule94(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 110;
					}
					currentCost = getCostForRule95(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 111;
					}
					currentCost = getCostForRule96(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 113;
					}
					currentCost = getCostForRule97(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 115;
					}
					currentCost = getCostForRule98(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 117;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule8f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule94( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule95( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule90( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule96( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule91( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule97( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule92( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule98( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule93( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_BitwiseAndID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_BitwiseAndID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_integer_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule99(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __integer_constant_NT:
				{
					if ( cachedCostFor_integer_constant == -1 )
					{
						cachedCostFor_integer_constant = getCostForRule9a(goalState);

						int currentCost = getCostForRule9b(goalState);

						if ( ( cachedCostFor_integer_constant > currentCost )  )
							cachedCostFor_integer_constant = currentCost;
					}
					return(cachedCostFor_integer_constant);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__integer_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule99(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 268;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 10;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule9a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 33;
					}
					currentCost = getCostForRule9b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 34;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__integer_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 509;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule9a( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule9b( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule99( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_BitwiseNotID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_BitwiseNotID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_integer_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule9c(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __integer_constant_NT:
				{
					if ( cachedCostFor_integer_constant == -1 )
					{
						cachedCostFor_integer_constant = getCostForRule9d(goalState);

						int currentCost = getCostForRule9e(goalState);

						if ( ( cachedCostFor_integer_constant > currentCost )  )
							cachedCostFor_integer_constant = currentCost;
					}
					return(cachedCostFor_integer_constant);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__integer_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule9c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 267;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 10;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule9d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 43;
					}
					currentCost = getCostForRule9e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 44;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__integer_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 509;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule9d( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__numeric_constant_NT))));
		}
		
		private int getCostForRule9e( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__constant_value_NT))));
		}
		
		private int getCostForRule9c( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_Op_BitwiseOrAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_BitwiseOrAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule9f(goalState);

						int currentCost = getCostForRulea0(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulea1(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulea2(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulea3(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRulea4(goalState);

						int currentCost = getCostForRulea5(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRulea6(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRulea7(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRulea8(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule9f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 119;
					}
					currentCost = getCostForRulea0(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 122;
					}
					currentCost = getCostForRulea1(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 124;
					}
					currentCost = getCostForRulea2(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 126;
					}
					currentCost = getCostForRulea3(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 128;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulea4(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 120;
					}
					currentCost = getCostForRulea5(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 121;
					}
					currentCost = getCostForRulea6(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 123;
					}
					currentCost = getCostForRulea7(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 125;
					}
					currentCost = getCostForRulea8(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 127;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule9f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea4( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea5( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea0( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea6( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea1( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulea7( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRulea2( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRulea8( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRulea3( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_BitwiseOrID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_BitwiseOrID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_integer_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulea9(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __integer_constant_NT:
				{
					if ( cachedCostFor_integer_constant == -1 )
					{
						cachedCostFor_integer_constant = getCostForRuleaa(goalState);

						int currentCost = getCostForRuleab(goalState);

						if ( ( cachedCostFor_integer_constant > currentCost )  )
							cachedCostFor_integer_constant = currentCost;
					}
					return(cachedCostFor_integer_constant);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__integer_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulea9(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 270;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 10;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleaa(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 35;
					}
					currentCost = getCostForRuleab(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 36;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__integer_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 509;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuleaa( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRuleab( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRulea9( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_BitwiseXorAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_BitwiseXorAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRuleac(goalState);

						int currentCost = getCostForRulead(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRuleae(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRuleaf(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRuleb0(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRuleb1(goalState);

						int currentCost = getCostForRuleb2(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuleb3(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuleb4(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuleb5(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleac(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 129;
					}
					currentCost = getCostForRulead(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 132;
					}
					currentCost = getCostForRuleae(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 134;
					}
					currentCost = getCostForRuleaf(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 136;
					}
					currentCost = getCostForRuleb0(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 138;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleb1(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 130;
					}
					currentCost = getCostForRuleb2(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 131;
					}
					currentCost = getCostForRuleb3(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 133;
					}
					currentCost = getCostForRuleb4(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 135;
					}
					currentCost = getCostForRuleb5(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 137;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuleac( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleb1( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleb2( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulead( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleb3( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleae( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleb4( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRuleaf( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRuleb5( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRuleb0( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_BitwiseXorID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_BitwiseXorID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_integer_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRuleb6(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __integer_constant_NT:
				{
					if ( cachedCostFor_integer_constant == -1 )
					{
						cachedCostFor_integer_constant = getCostForRuleb7(goalState);

						int currentCost = getCostForRuleb8(goalState);

						if ( ( cachedCostFor_integer_constant > currentCost )  )
							cachedCostFor_integer_constant = currentCost;
					}
					return(cachedCostFor_integer_constant);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__integer_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleb6(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 273;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 10;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleb7(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 37;
					}
					currentCost = getCostForRuleb8(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 38;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__integer_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 509;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuleb7( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRuleb8( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRuleb6( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_CommaID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_Op_CommaID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRuleb9(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleb9(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 280;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRuleb9( int goalState)
		{

			if ( (this.getArity() >= 2) )
				return(normalizeCost((long)0 + (long) (((long)getNaryCost(this, __void_expression_NT, 1)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_Op_DeleteID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_DeleteID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRuleba(goalState);

						int currentCost = getCostForRulebb(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulebc(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulebd(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulebe(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulebf(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulec0(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleba(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 287;
					}
					currentCost = getCostForRulebb(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 288;
					}
					currentCost = getCostForRulebc(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 289;
					}
					currentCost = getCostForRulebd(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 290;
					}
					currentCost = getCostForRulebe(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 291;
					}
					currentCost = getCostForRulebf(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 292;
					}
					currentCost = getCostForRulec0(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 293;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuleba( int goalState)
		{

			return(normalizeCost((long)2000 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
		
		private int getCostForRulebb( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getArity() > 1? (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID && this.getNthChild(0).getNthChild(1).getArity() == 2 && this.getNthChild(0).getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(0).getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(0).getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_2.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulebc( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulebd( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulebe( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulebf( int goalState)
		{

			return(normalizeCost((long)2 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
		
		private int getCostForRulec0( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__runtime_name_expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_Op_DescendantsID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_DescendantsID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulec1(goalState);

						int currentCost = getCostForRulec2(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulec3(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulec4(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulec5(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulec6(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulec1(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 294;
					}
					currentCost = getCostForRulec2(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 417;
					}
					currentCost = getCostForRulec3(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 418;
					}
					currentCost = getCostForRulec4(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 419;
					}
					currentCost = getCostForRulec5(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 420;
					}
					currentCost = getCostForRulec6(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 480;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulec1( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__name_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRulec2( int goalState)
		{
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 1 && this.getNthChild(1).getOperator() == Op_AtID && this.getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)factoredPath_3.getCost(__name_NT)) + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulec3( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)10 + (long) ( (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulec4( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulec5( int goalState)
		{
			JBurgAnnotation factoredPath_2 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 0? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_3 = ((this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getArity() > 1? (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 1 && this.getNthChild(1).getOperator() == Op_AtID && this.getNthChild(1).getNthChild(0).getArity() == 2 && this.getNthChild(1).getNthChild(0).getOperator() == NamespaceAccessExpressionID )
				return(normalizeCost((long)1 + (long) ( (((long)factoredPath_3.getCost(__expression_NT)) + ((long)factoredPath_2.getCost(__name_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulec6( int goalState)
		{
			JBurgAnnotation factoredPath_1 = (this.getNthChild(1).getArity() > 1? this.getNthChild(1).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(1).getArity() == 2 && this.getNthChild(1).getOperator() == ArrayIndexExpressionID && this.getNthChild(1).getNthChild(0).getArity() == 0 && this.getNthChild(1).getNthChild(0).getOperator() == Op_AtID )
				return(normalizeCost((long)1 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_Op_DivideAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_DivideAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulec7(goalState);

						int currentCost = getCostForRulec8(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulec9(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRuleca(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulecb(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRulecc(goalState);

						int currentCost = getCostForRulecd(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRulece(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRulecf(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuled0(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulec7(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 139;
					}
					currentCost = getCostForRulec8(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 142;
					}
					currentCost = getCostForRulec9(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 144;
					}
					currentCost = getCostForRuleca(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 146;
					}
					currentCost = getCostForRulecb(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 148;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulecc(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 140;
					}
					currentCost = getCostForRulecd(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 141;
					}
					currentCost = getCostForRulece(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 143;
					}
					currentCost = getCostForRulecf(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 145;
					}
					currentCost = getCostForRuled0(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 147;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulec7( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulecc( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulecd( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulec8( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulece( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulec9( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulecf( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRuleca( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRuled0( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRulecb( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_DivideID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_DivideID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRuled1(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRuled2(goalState);

						int currentCost = getCostForRuled3(goalState);

						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuled1(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 295;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuled2(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 15;
					}
					currentCost = getCostForRuled3(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 16;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuled2( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRuled3( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRuled1( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_EqualID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_EqualID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRuled4(goalState);

						int currentCost = getCostForRuled5(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRuled6(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRuled7(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRuled8(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRuled9(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuled4(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 53;
					}
					currentCost = getCostForRuled5(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 54;
					}
					currentCost = getCostForRuled6(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 55;
					}
					currentCost = getCostForRuled7(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 56;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuled8(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 305;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuled9(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 306;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuled4( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__boolean_constant_NT)) + ((long)this.getNthChild(0).getCost(__boolean_constant_NT))) ));
		}
		
		private int getCostForRuled5( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRuled6( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRuled7( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRuled8( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRuled9( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_GreaterThanEqualsID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_GreaterThanEqualsID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRuleda(goalState);

						int currentCost = getCostForRuledb(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRuledc(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRuledd(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleda(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 75;
					}
					currentCost = getCostForRuledb(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 76;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuledc(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 334;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuledd(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 335;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRuleda( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRuledb( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRuledc( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRuledd( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_GreaterThanID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_GreaterThanID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRulede(goalState);

						int currentCost = getCostForRuledf(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRulee0(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRulee1(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulede(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 73;
					}
					currentCost = getCostForRuledf(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 74;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee0(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 336;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee1(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 337;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulede( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRuledf( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRulee0( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRulee1( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_InID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_InID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulee2(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee2(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 341;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulee2( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_InstanceOfID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_InstanceOfID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulee3(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee3(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 342;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulee3( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_IsID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_IsID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulee4(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee4(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 345;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulee4( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LeftShiftAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LeftShiftAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulee5(goalState);

						int currentCost = getCostForRulee6(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulee7(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulee8(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulee9(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRuleea(goalState);

						int currentCost = getCostForRuleeb(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuleec(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuleed(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRuleee(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulee5(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 149;
					}
					currentCost = getCostForRulee6(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 152;
					}
					currentCost = getCostForRulee7(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 154;
					}
					currentCost = getCostForRulee8(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 156;
					}
					currentCost = getCostForRulee9(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 158;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleea(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 150;
					}
					currentCost = getCostForRuleeb(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 151;
					}
					currentCost = getCostForRuleec(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 153;
					}
					currentCost = getCostForRuleed(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 155;
					}
					currentCost = getCostForRuleee(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 157;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulee5( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleea( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleeb( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulee6( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleec( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulee7( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleed( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRulee8( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRuleee( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRulee9( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LeftShiftID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LeftShiftID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_integer_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRuleef(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __integer_constant_NT:
				{
					if ( cachedCostFor_integer_constant == -1 )
					{
						cachedCostFor_integer_constant = getCostForRulef0(goalState);

						int currentCost = getCostForRulef1(goalState);

						if ( ( cachedCostFor_integer_constant > currentCost )  )
							cachedCostFor_integer_constant = currentCost;
					}
					return(cachedCostFor_integer_constant);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__integer_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleef(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 269;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 10;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef0(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 27;
					}
					currentCost = getCostForRulef1(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 28;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__integer_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 509;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulef0( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRulef1( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRuleef( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LessThanEqualsID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LessThanEqualsID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRulef2(goalState);

						int currentCost = getCostForRulef3(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRulef4(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRulef5(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef2(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 71;
					}
					currentCost = getCostForRulef3(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 72;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef4(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 350;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef5(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 351;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulef2( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRulef3( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRulef4( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRulef5( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LessThanID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LessThanID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRulef6(goalState);

						int currentCost = getCostForRulef7(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRulef8(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRulef9(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef6(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 69;
					}
					currentCost = getCostForRulef7(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 70;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef8(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 352;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulef9(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 353;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulef6( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRulef7( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRulef8( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRulef9( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LogicalAndAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LogicalAndAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRulefa(goalState);

						int currentCost = getCostForRulefb(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulefc(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulefd(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRulefe(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRuleff(goalState);

						int currentCost = getCostForRule100(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule101(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule102(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule103(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule104(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRulefa(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 159;
					}
					currentCost = getCostForRulefb(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 163;
					}
					currentCost = getCostForRulefc(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 165;
					}
					currentCost = getCostForRulefd(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 167;
					}
					currentCost = getCostForRulefe(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 169;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRuleff(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 160;
					}
					currentCost = getCostForRule100(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 161;
					}
					currentCost = getCostForRule101(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 162;
					}
					currentCost = getCostForRule102(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 164;
					}
					currentCost = getCostForRule103(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 166;
					}
					currentCost = getCostForRule104(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 168;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRulefa( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRuleff( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule100( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule101( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulefb( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule102( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRulefc( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule103( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRulefd( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule104( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRulefe( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LogicalAndID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LogicalAndID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		private int cachedCostFor_string_constant = -1;
		private int cachedCostFor_constant_value = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRule105(goalState);

					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					if ( cachedCostFor_constant_value == -1 )
					{
						cachedCostFor_constant_value = getCostForRule106(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
					}
					return(cachedCostFor_constant_value);
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule107(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__literal_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule108(goalState);

					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __string_constant_NT:
				{
					if ( cachedCostFor_string_constant == -1 )
					{
						cachedCostFor_string_constant = getCostForRule109(goalState);

					}
					return(cachedCostFor_string_constant);
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule105(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 45;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule106(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 48;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 86;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 87;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 85;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule107(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 354;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 89;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 9;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule108(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 46;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __string_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule109(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 47;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule105( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__boolean_constant_NT)) + ((long)this.getNthChild(0).getCost(__boolean_constant_NT))) ));
		}
		
		private int getCostForRule108( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule109( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule106( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule107( int goalState)
		{

			return(normalizeCost((long)5 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LogicalNotID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_LogicalNotID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRule10a(goalState);

						int currentCost = getCostForRule10b(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule10c(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule10d(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule10e(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__literal_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule10a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 77;
					}
					currentCost = getCostForRule10b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 78;
					}
					currentCost = getCostForRule10c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 79;
					}
					currentCost = getCostForRule10d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 80;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule10e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 355;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 506;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule10a( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__boolean_constant_NT))));
		}
		
		private int getCostForRule10b( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__numeric_constant_NT))));
		}
		
		private int getCostForRule10c( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__string_constant_NT))));
		}
		
		private int getCostForRule10d( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__constant_value_NT))));
		}
		
		private int getCostForRule10e( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_Op_LogicalOrAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LogicalOrAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule10f(goalState);

						int currentCost = getCostForRule110(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule111(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule112(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule113(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule114(goalState);

						int currentCost = getCostForRule115(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule116(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule117(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule118(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule119(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule10f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 170;
					}
					currentCost = getCostForRule110(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 174;
					}
					currentCost = getCostForRule111(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 176;
					}
					currentCost = getCostForRule112(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 178;
					}
					currentCost = getCostForRule113(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 180;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule114(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 171;
					}
					currentCost = getCostForRule115(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 172;
					}
					currentCost = getCostForRule116(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 173;
					}
					currentCost = getCostForRule117(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 175;
					}
					currentCost = getCostForRule118(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 177;
					}
					currentCost = getCostForRule119(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 179;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule10f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule114( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule115( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule116( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule110( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule117( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule111( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule118( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule112( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule119( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule113( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_LogicalOrID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_LogicalOrID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		private int cachedCostFor_string_constant = -1;
		private int cachedCostFor_constant_value = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRule11a(goalState);

					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					if ( cachedCostFor_constant_value == -1 )
					{
						cachedCostFor_constant_value = getCostForRule11b(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
						if ( ( cachedCostFor_constant_value > currentCost )  )
							cachedCostFor_constant_value = currentCost;
					}
					return(cachedCostFor_constant_value);
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule11c(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__literal_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule11d(goalState);

					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __string_constant_NT:
				{
					if ( cachedCostFor_string_constant == -1 )
					{
						cachedCostFor_string_constant = getCostForRule11e(goalState);

					}
					return(cachedCostFor_string_constant);
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 49;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 52;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 86;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 87;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 85;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 356;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 89;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__string_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 9;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 50;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __string_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 51;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule11a( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__boolean_constant_NT)) + ((long)this.getNthChild(0).getCost(__boolean_constant_NT))) ));
		}
		
		private int getCostForRule11d( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule11e( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule11b( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule11c( int goalState)
		{

			return(normalizeCost((long)5 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_ModuloAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_ModuloAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule11f(goalState);

						int currentCost = getCostForRule120(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule121(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule122(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule123(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule124(goalState);

						int currentCost = getCostForRule125(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule126(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule127(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule128(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule11f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 191;
					}
					currentCost = getCostForRule120(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 194;
					}
					currentCost = getCostForRule121(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 196;
					}
					currentCost = getCostForRule122(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 198;
					}
					currentCost = getCostForRule123(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 200;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule124(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 192;
					}
					currentCost = getCostForRule125(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 193;
					}
					currentCost = getCostForRule126(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 195;
					}
					currentCost = getCostForRule127(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 197;
					}
					currentCost = getCostForRule128(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 199;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule11f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule124( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule125( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule120( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule126( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule121( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule127( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule122( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule128( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule123( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_ModuloID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_ModuloID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		private int cachedCostFor_double_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __double_constant_NT:
				{
					if ( cachedCostFor_double_constant == -1 )
					{
						cachedCostFor_double_constant = getCostForRule129(goalState);

					}
					return(cachedCostFor_double_constant);
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule12a(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__double_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule12b(goalState);

						int currentCost = getCostForRule12c(goalState);

						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
						currentCost = getCost(__double_constant_NT);
						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __double_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule129(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 17;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule12a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 359;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 89;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__double_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 88;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule12b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 18;
					}
					currentCost = getCostForRule12c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 19;
					}
					currentCost = getCost(__double_constant_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 507;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule129( int goalState)
		{

			if ( this.getNthChild(1).getArity() == 0 && this.getNthChild(1).getOperator() == LiteralIntegerZeroID )
				return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__numeric_constant_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule12b( int goalState)
		{

			return(normalizeCost((long)2000 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule12c( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule12a( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_MultiplyAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_MultiplyAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule12d(goalState);

						int currentCost = getCostForRule12e(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule12f(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule130(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule131(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule132(goalState);

						int currentCost = getCostForRule133(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule134(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule135(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule136(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule12d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 201;
					}
					currentCost = getCostForRule12e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 204;
					}
					currentCost = getCostForRule12f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 206;
					}
					currentCost = getCostForRule130(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 208;
					}
					currentCost = getCostForRule131(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 210;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule132(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 202;
					}
					currentCost = getCostForRule133(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 203;
					}
					currentCost = getCostForRule134(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 205;
					}
					currentCost = getCostForRule135(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 207;
					}
					currentCost = getCostForRule136(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 209;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule12d( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule132( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule133( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule12e( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule134( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule12f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule135( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule130( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule136( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule131( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_MultiplyID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_MultiplyID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule137(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule138(goalState);

						int currentCost = getCostForRule139(goalState);

						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule137(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 360;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule138(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 13;
					}
					currentCost = getCostForRule139(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 14;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule138( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule139( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule137( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_NotEqualID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_NotEqualID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRule13a(goalState);

						int currentCost = getCostForRule13b(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule13c(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule13d(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRule13e(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRule13f(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule13a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 61;
					}
					currentCost = getCostForRule13b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 62;
					}
					currentCost = getCostForRule13c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 63;
					}
					currentCost = getCostForRule13d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 64;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule13e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 372;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule13f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 373;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule13a( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__boolean_constant_NT)) + ((long)this.getNthChild(0).getCost(__boolean_constant_NT))) ));
		}
		
		private int getCostForRule13b( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule13c( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule13d( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule13e( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule13f( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_PostDecrID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_PostDecrID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule140(goalState);

						int currentCost = getCostForRule141(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule142(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule143(goalState);

						int currentCost = getCostForRule144(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule145(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule140(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 391;
					}
					currentCost = getCostForRule141(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 393;
					}
					currentCost = getCostForRule142(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 395;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule143(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 392;
					}
					currentCost = getCostForRule144(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 394;
					}
					currentCost = getCostForRule145(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 396;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule140( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule143( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule141( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule144( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule142( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
		
		private int getCostForRule145( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_Op_PostIncrID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_PostIncrID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule146(goalState);

						int currentCost = getCostForRule147(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule148(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule149(goalState);

						int currentCost = getCostForRule14a(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule14b(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule146(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 397;
					}
					currentCost = getCostForRule147(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 399;
					}
					currentCost = getCostForRule148(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 401;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule149(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 398;
					}
					currentCost = getCostForRule14a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 400;
					}
					currentCost = getCostForRule14b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 402;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule146( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule149( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule147( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule14a( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule148( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
		
		private int getCostForRule14b( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_Op_PreDecrID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_PreDecrID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule14c(goalState);

						int currentCost = getCostForRule14d(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule14e(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule14f(goalState);

						int currentCost = getCostForRule150(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule151(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule14c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 403;
					}
					currentCost = getCostForRule14d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 405;
					}
					currentCost = getCostForRule14e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 407;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule14f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 404;
					}
					currentCost = getCostForRule150(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 406;
					}
					currentCost = getCostForRule151(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 408;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule14c( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule14f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule14d( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule150( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule14e( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
		
		private int getCostForRule151( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_Op_PreIncrID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_PreIncrID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule152(goalState);

						int currentCost = getCostForRule153(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule154(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule155(goalState);

						int currentCost = getCostForRule156(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule157(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule152(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 409;
					}
					currentCost = getCostForRule153(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 411;
					}
					currentCost = getCostForRule154(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 413;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule155(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 410;
					}
					currentCost = getCostForRule156(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 412;
					}
					currentCost = getCostForRule157(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 414;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule152( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule155( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__expression_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule153( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule156( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)8 + (long) (((long)factoredPath_1.getCost(__name_NT)) + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule154( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
		
		private int getCostForRule157( int goalState)
		{

			return(normalizeCost((long)7 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_Op_RightShiftAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_RightShiftAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule158(goalState);

						int currentCost = getCostForRule159(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule15a(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule15b(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule15c(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule15d(goalState);

						int currentCost = getCostForRule15e(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule15f(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule160(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule161(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule158(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 221;
					}
					currentCost = getCostForRule159(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 224;
					}
					currentCost = getCostForRule15a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 226;
					}
					currentCost = getCostForRule15b(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 228;
					}
					currentCost = getCostForRule15c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 230;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule15d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 222;
					}
					currentCost = getCostForRule15e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 223;
					}
					currentCost = getCostForRule15f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 225;
					}
					currentCost = getCostForRule160(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 227;
					}
					currentCost = getCostForRule161(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 229;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule158( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule15d( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule15e( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule159( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule15f( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule15a( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule160( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule15b( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule161( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule15c( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_RightShiftID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_RightShiftID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_integer_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule162(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __integer_constant_NT:
				{
					if ( cachedCostFor_integer_constant == -1 )
					{
						cachedCostFor_integer_constant = getCostForRule163(goalState);

						int currentCost = getCostForRule164(goalState);

						if ( ( cachedCostFor_integer_constant > currentCost )  )
							cachedCostFor_integer_constant = currentCost;
					}
					return(cachedCostFor_integer_constant);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__integer_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule162(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 271;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__integer_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 10;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __integer_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule163(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 29;
					}
					currentCost = getCostForRule164(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 30;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__integer_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 509;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule163( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule164( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule162( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_StrictEqualID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_StrictEqualID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRule165(goalState);

						int currentCost = getCostForRule166(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule167(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule168(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRule169(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRule16a(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule165(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 57;
					}
					currentCost = getCostForRule166(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 58;
					}
					currentCost = getCostForRule167(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 59;
					}
					currentCost = getCostForRule168(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 60;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule169(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 440;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule16a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 441;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule165( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__boolean_constant_NT)) + ((long)this.getNthChild(0).getCost(__boolean_constant_NT))) ));
		}
		
		private int getCostForRule166( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule167( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule168( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule169( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule16a( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_StrictNotEqualID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_StrictNotEqualID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_conditionalJump = -1;
		private int cachedCostFor_comparison_expression = -1;
		private int cachedCostFor_boolean_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					if ( cachedCostFor_boolean_constant == -1 )
					{
						cachedCostFor_boolean_constant = getCostForRule16b(goalState);

						int currentCost = getCostForRule16c(goalState);

						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule16d(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
						currentCost = getCostForRule16e(goalState);
						if ( ( cachedCostFor_boolean_constant > currentCost )  )
							cachedCostFor_boolean_constant = currentCost;
					}
					return(cachedCostFor_boolean_constant);
				}
				case __boolean_literal_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __comparison_expression_NT:
				{
					if ( cachedCostFor_comparison_expression == -1 )
					{
						cachedCostFor_comparison_expression = getCostForRule16f(goalState);

					}
					return(cachedCostFor_comparison_expression);
				}
				case __conditionalJump_NT:
				{
					if ( cachedCostFor_conditionalJump == -1 )
					{
						cachedCostFor_conditionalJump = getCostForRule170(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_conditionalJump > currentCost )  )
							cachedCostFor_conditionalJump = currentCost;
					}
					return(cachedCostFor_conditionalJump);
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__boolean_constant_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __literal_NT:
				{
					return(getCost(__boolean_literal_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __boolean_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule16b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 65;
					}
					currentCost = getCostForRule16c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 66;
					}
					currentCost = getCostForRule16d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 67;
					}
					currentCost = getCostForRule16e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 68;
					}
					return(rule);
				}
				case __boolean_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 92;
					}
					return(rule);
				}
				case __comparison_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule16f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 442;
					}
					return(rule);
				}
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule170(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 443;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 86;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__boolean_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 12;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = getCost(__literal_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 506;
					}
					currentCost = getCost(__comparison_expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 511;
					}
					return(rule);
				}
				case __literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__boolean_literal_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 508;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule16b( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__boolean_constant_NT)) + ((long)this.getNthChild(0).getCost(__boolean_constant_NT))) ));
		}
		
		private int getCostForRule16c( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule16d( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__string_constant_NT)) + ((long)this.getNthChild(0).getCost(__string_constant_NT))) ));
		}
		
		private int getCostForRule16e( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule16f( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
		
		private int getCostForRule170( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_SubtractAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_SubtractAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule171(goalState);

						int currentCost = getCostForRule172(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule173(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule174(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule175(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule176(goalState);

						int currentCost = getCostForRule177(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule178(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule179(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule17a(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule171(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 181;
					}
					currentCost = getCostForRule172(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 184;
					}
					currentCost = getCostForRule173(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 186;
					}
					currentCost = getCostForRule174(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 188;
					}
					currentCost = getCostForRule175(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 190;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule176(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 182;
					}
					currentCost = getCostForRule177(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 183;
					}
					currentCost = getCostForRule178(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 185;
					}
					currentCost = getCostForRule179(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 187;
					}
					currentCost = getCostForRule17a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 189;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule171( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule176( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule177( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule172( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule178( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule173( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule179( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule174( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule17a( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule175( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_SubtractID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_SubtractID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule17b(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule17c(goalState);

						int currentCost = getCostForRule17d(goalState);

						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule17b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 477;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule17c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 39;
					}
					currentCost = getCostForRule17d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 40;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule17c( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__numeric_constant_NT))));
		}
		
		private int getCostForRule17d( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__constant_value_NT))));
		}
		
		private int getCostForRule17b( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_Op_SubtractID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_SubtractID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_numeric_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule17e(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					if ( cachedCostFor_numeric_constant == -1 )
					{
						cachedCostFor_numeric_constant = getCostForRule17f(goalState);

						int currentCost = getCostForRule180(goalState);

						if ( ( cachedCostFor_numeric_constant > currentCost )  )
							cachedCostFor_numeric_constant = currentCost;
					}
					return(cachedCostFor_numeric_constant);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule17e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 445;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule17f(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 25;
					}
					currentCost = getCostForRule180(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 26;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule17f( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule180( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule17e( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_TypeOfID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_TypeOfID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule181(goalState);

						int currentCost = getCostForRule182(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule181(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 474;
					}
					currentCost = getCostForRule182(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 475;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule181( int goalState)
		{

			return(normalizeCost((long)10 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
		
		private int getCostForRule182( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_Op_UnsignedRightShift_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_UnsignedRightShift_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_uint_constant = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__numeric_constant_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule183(goalState);

						int currentCost = normalizeCost((long)1 + (long)getCost(__uint_constant_NT));

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCost(__constant_value_NT);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __numeric_constant_NT:
				{
					return(getCost(__uint_constant_NT));
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __uint_constant_NT:
				{
					if ( cachedCostFor_uint_constant == -1 )
					{
						cachedCostFor_uint_constant = getCostForRule184(goalState);

						int currentCost = getCostForRule185(goalState);

						if ( ( cachedCostFor_uint_constant > currentCost )  )
							cachedCostFor_uint_constant = currentCost;
					}
					return(cachedCostFor_uint_constant);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__numeric_constant_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 87;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule183(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 272;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__uint_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 11;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 90;
					}
					currentCost = normalizeCost((long)5 + (long)getCost(__numeric_constant_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 89;
					}
					return(rule);
				}
				case __numeric_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__uint_constant_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 500;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __uint_constant_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule184(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 31;
					}
					currentCost = getCostForRule185(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 32;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule184( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__numeric_constant_NT)) + ((long)this.getNthChild(0).getCost(__numeric_constant_NT))) ));
		}
		
		private int getCostForRule185( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__constant_value_NT)) + ((long)this.getNthChild(0).getCost(__constant_value_NT))) ));
		}
		
		private int getCostForRule183( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_UnsignedRightShiftAssignID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_Op_UnsignedRightShiftAssignID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule186(goalState);

						int currentCost = getCostForRule187(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule188(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule189(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
						currentCost = getCostForRule18a(goalState);
						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = getCostForRule18b(goalState);

						int currentCost = getCostForRule18c(goalState);

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule18d(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule18e(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = getCostForRule18f(goalState);
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
						currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule186(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 255;
					}
					currentCost = getCostForRule187(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 258;
					}
					currentCost = getCostForRule188(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 260;
					}
					currentCost = getCostForRule189(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 262;
					}
					currentCost = getCostForRule18a(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 264;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule18b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 256;
					}
					currentCost = getCostForRule18c(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 257;
					}
					currentCost = getCostForRule18d(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 259;
					}
					currentCost = getCostForRule18e(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 261;
					}
					currentCost = getCostForRule18f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 263;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule186( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule18b( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == ArrayIndexExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__expression_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule18c( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule187( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == Op_DescendantsID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule18d( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule188( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == MemberAccessExpressionID )
				return(normalizeCost((long)4 + (long) ( (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)factoredPath_1.getCost(__name_NT)))  + ((long)factoredPath_0.getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule18e( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule189( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule18f( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
		
		private int getCostForRule18a( int goalState)
		{

			return(normalizeCost((long)4 + (long) (((long)this.getNthChild(1).getCost(__expression_NT)) + ((long)this.getNthChild(0).getCost(__runtime_name_expression_NT))) ));
		}
	}

	class JBurgAnnotation_Op_VoidID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_Op_VoidID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(2);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __literal_NT:
				{
					return(1);
				}
				case __object_literal_NT:
				{
					return(1);
				}
				case __required_constant_value_NT:
				{
					return(268435457);
				}
				case __statement_NT:
				{
					return(2);
				}
				case __type_param_expression_NT:
				{
					return(1);
				}
				case __void_expression_NT:
				{
					return(2);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(506);
				}
				case __literal_NT:
				{
					return(503);
				}
				case __object_literal_NT:
				{
					return(486);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __statement_NT:
				{
					return(496);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(1);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_Op_VoidID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_Op_VoidID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		private int cachedCostFor_constant_value = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					if ( cachedCostFor_constant_value == -1 )
					{
						cachedCostFor_constant_value = getCostForRule190(goalState);

					}
					return(cachedCostFor_constant_value);
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule191(goalState);

						int currentCost = getCost(__constant_value_NT);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = getCost(__constant_value_NT);

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule190(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 487;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule191(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 493;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 510;
					}
					currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule190( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__constant_value_NT))));
		}
		
		private int getCostForRule191( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_QualifiedNamespaceExpressionID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_QualifiedNamespaceExpressionID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_name = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __name_NT:
				{
					if ( cachedCostFor_name == -1 )
					{
						cachedCostFor_name = getCostForRule192(goalState);

					}
					return(cachedCostFor_name);
				}
				case __new_type_name_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					int currentCost = getCost(__name_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 7;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 93;
					}
					return(rule);
				}
				case __name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule192(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 425;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 5;
					}
					currentCost = getCost(__name_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 501;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 4;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 6;
					}
					currentCost = getCost(__expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
		
		private int getCostForRule192( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__dottedNamePart_NT)) + ((long)this.getNthChild(0).getCost(__dottedNamePart_NT))) ));
		}
	}

	class JBurgAnnotation_ReturnStatementID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_ReturnStatementID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(1);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(431);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_ReturnStatementID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_ReturnStatementID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule193(goalState);

						int currentCost = getCostForRule194(goalState);

						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule195(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule196(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule193(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 429;
					}
					currentCost = getCostForRule194(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 430;
					}
					currentCost = getCostForRule195(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 432;
					}
					currentCost = getCostForRule196(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 433;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule193( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == NilID )
				return(1);
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule194( int goalState)
		{

			return(normalizeCost((long)2 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
		
		private int getCostForRule195( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);

			if ( this.getNthChild(0).getArity() == 1 && this.getNthChild(0).getOperator() == Op_VoidID )
				return(normalizeCost((long)1 + (long)((long)factoredPath_0.getCost(__expression_NT))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule196( int goalState)
		{

			return(normalizeCost((long)2000 + (long)((long)this.getNthChild(0).getCost(__void_expression_NT))));
		}
	}

	class JBurgAnnotation_RuntimeNameExpressionID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_RuntimeNameExpressionID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule197(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule197(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 435;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule197( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_SetterID_3 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		JBurgAnnotation_SetterID_3(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_function = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					if ( cachedCostFor_function == -1 )
					{
						cachedCostFor_function = getCostForRule198(goalState);

					}
					return(cachedCostFor_function);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule198(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 473;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(3);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule198( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) (((long)this.getNthChild(2).getCost(__statement_NT)) + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_SetterID_4 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		private JBurgAnnotation subtree3;
		JBurgAnnotation_SetterID_4(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_function = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					if ( cachedCostFor_function == -1 )
					{
						cachedCostFor_function = getCostForRule199(goalState);

					}
					return(cachedCostFor_function);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __function_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule199(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 464;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(4);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				case 3:
					return subtree3;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else if ( subtree3 == null )
				subtree3 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule199( int goalState)
		{

			if ( this.getNthChild(0).getArity() == 0 && this.getNthChild(0).getOperator() == IdentifierID )
				return(normalizeCost((long)0 + (long) ( (((long)this.getNthChild(3).getCost(__statement_NT)) + ((long)this.getNthChild(2).getCost(__return_type_name_NT)))  + ((long)this.getNthChild(1).getCost(__parameterList_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_SwitchID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_SwitchID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule19a(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule19a(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 452;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule19a( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(1).getOperator() == BlockID )
				return(normalizeCost((long)0 + (long) (((long)getNaryCost(this.getNthChild(1), __conditionalElements_NT, 0)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_TernaryExpressionID_3 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private JBurgAnnotation subtree2;
		JBurgAnnotation_TernaryExpressionID_3(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule19b(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule19b(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 453;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(3);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				case 2:
					return subtree2;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else if ( subtree2 == null )
				subtree2 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule19b( int goalState)
		{

			return(normalizeCost((long)1 + (long) ( (((long)this.getNthChild(2).getCost(__expression_NT)) + ((long)this.getNthChild(1).getCost(__expression_NT)))  + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_ThrowsStatementID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_ThrowsStatementID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule19c(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule19c(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 454;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule19c( int goalState)
		{

			return(normalizeCost((long)1 + (long)((long)this.getNthChild(0).getCost(__expression_NT))));
		}
	}

	class JBurgAnnotation_TryID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_TryID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule19d(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule19d(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 95;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule19d( int goalState)
		{

			return(normalizeCost((long)ERROR_TRAP + (long)((long)this.getNthChild(0).getCost(__statement_NT))));
		}
	}

	class JBurgAnnotation_TryID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_TryID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule19e(goalState);

						int currentCost = getCostForRule19f(goalState);

						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
						currentCost = getCostForRule1a0(goalState);
						if ( ( cachedCostFor_statement > currentCost )  )
							cachedCostFor_statement = currentCost;
					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule19e(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 455;
					}
					currentCost = getCostForRule19f(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 456;
					}
					currentCost = getCostForRule1a0(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 457;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule19e( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);

			if ( (this.getArity() >= 3) && this.getNthChild(1).getArity() == 1 && this.getNthChild(1).getOperator() == FinallyID )
				return(normalizeCost((long)0 + (long) ( (((long)getNaryCost(this, __catch_block_NT, 2)) + ((long)factoredPath_0.getCost(__finally_clause_NT)))  + ((long)this.getNthChild(0).getCost(__statement_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule19f( int goalState)
		{

			if ( (this.getArity() >= 2) )
				return(normalizeCost((long)0 + (long) (((long)getNaryCost(this, __catch_block_NT, 1)) + ((long)this.getNthChild(0).getCost(__statement_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1a0( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(1).getArity() > 0? this.getNthChild(1).getNthChild(0): errorAnnotation);

			if ( this.getArity() == 2 && this.getNthChild(1).getArity() == 1 && this.getNthChild(1).getOperator() == FinallyID )
				return(normalizeCost((long)0 + (long) (((long)factoredPath_0.getCost(__finally_clause_NT)) + ((long)this.getNthChild(0).getCost(__statement_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_TypedExpressionID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_TypedExpressionID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_type_name = -1;
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule1a1(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __new_type_name_NT:
				{
					return(normalizeCost((long)20 + (long)getCost(__type_name_NT)));
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					if ( cachedCostFor_type_name == -1 )
					{
						cachedCostFor_type_name = getCostForRule1a2(goalState);

					}
					return(cachedCostFor_type_name);
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a1(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 389;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 5;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a2(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 388;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule1a2( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__type_name_NT)) + ((long)this.getNthChild(0).getCost(__name_NT))) ));
		}
		
		private int getCostForRule1a1( int goalState)
		{

			return(normalizeCost((long)1 + (long) (((long)this.getNthChild(1).getCost(__type_param_expression_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_UseID_1 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		JBurgAnnotation_UseID_1(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule1a3(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a3(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 481;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule1a3( int goalState)
		{

			return(normalizeCost((long)0 + (long)((long)this.getNthChild(0).getCost(__name_NT))));
		}
	}

	class JBurgAnnotation_VariableExpressionID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_VariableExpressionID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_name = -1;
		private int cachedCostFor_void_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __constant_value_NT:
				{
					return(normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT)));
				}
				case __expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __name_NT:
				{
					if ( cachedCostFor_name == -1 )
					{
						cachedCostFor_name = getCostForRule1a4(goalState);

					}
					return(cachedCostFor_name);
				}
				case __new_type_name_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					int currentCost = getCost(__name_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __required_constant_value_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					int currentCost = getCost(__constant_value_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __return_type_name_NT:
				{
					return(getCost(__type_name_NT));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_name_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__name_NT)));
				}
				case __type_param_expression_NT:
				{
					int bestCost;

					bestCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
						bestCost = currentCost;
					return(bestCost);
				}
				case __void_expression_NT:
				{
					if ( cachedCostFor_void_expression == -1 )
					{
						cachedCostFor_void_expression = normalizeCost((long)0 + (long)((long)getNaryCost(this, __var_decl_NT, 0)));

						int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

						if ( ( cachedCostFor_void_expression > currentCost )  )
							cachedCostFor_void_expression = currentCost;
					}
					return(cachedCostFor_void_expression);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)getCostFunctionResult_4411a827() + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 82;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)2000 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 7;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 90;
					}
					return(rule);
				}
				case __mxml_data_binding_setter_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 93;
					}
					return(rule);
				}
				case __name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a4(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 468;
					}
					return(rule);
				}
				case __new_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)20 + (long)getCost(__type_name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 5;
					}
					currentCost = getCost(__name_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 501;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 81;
					}
					currentCost = getCost(__constant_value_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 510;
					}
					return(rule);
				}
				case __return_type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__type_name_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 498;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_name_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 4;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__name_NT));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 6;
					}
					currentCost = getCost(__expression_NT);
					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)0 + (long)((long)getNaryCost(this, __var_decl_NT, 0)));

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 482;
					}
					currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));
					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		private int cachedCostFunctionResult_cde68443 = -1;
		
		private int getCostFunctionResult_4411a827( )
		{
			if ( cachedCostFunctionResult_cde68443 == -1 )
				cachedCostFunctionResult_cde68443 = isCompileTimeConstant(m_node);
			return(cachedCostFunctionResult_cde68443);
		}
		
		private int getCostForRule1a4( int goalState)
		{
			JBurgAnnotation factoredPath_0 = (this.getNthChild(0).getArity() > 0? this.getNthChild(0).getNthChild(0): errorAnnotation);
			JBurgAnnotation factoredPath_1 = (this.getNthChild(0).getArity() > 1? this.getNthChild(0).getNthChild(1): errorAnnotation);

			if ( this.getArity() == 1 && this.getNthChild(0).getArity() == 2 && this.getNthChild(0).getOperator() == VariableID )
				return(normalizeCost((long)0 + (long) (((long)factoredPath_1.getCost(__type_name_NT)) + ((long)factoredPath_0.getCost(__decl_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_VariableID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_VariableID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_var_decl = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					return(getCost(__var_decl_NT));
				}
				case __var_decl_NT:
				{
					if ( cachedCostFor_var_decl == -1 )
					{
						cachedCostFor_var_decl = getCostForRule1a5(goalState);

						int currentCost = getCostForRule1a6(goalState);

						if ( ( cachedCostFor_var_decl > currentCost )  )
							cachedCostFor_var_decl = currentCost;
						currentCost = getCostForRule1a7(goalState);
						if ( ( cachedCostFor_var_decl > currentCost )  )
							cachedCostFor_var_decl = currentCost;
					}
					return(cachedCostFor_var_decl);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__var_decl_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 504;
					}
					return(rule);
				}
				case __var_decl_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a5(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 465;
					}
					currentCost = getCostForRule1a6(goalState);
					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 466;
					}
					currentCost = getCostForRule1a7(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 467;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule1a5( int goalState)
		{

			if ( (this.getArity() >= 2) )
				return(normalizeCost((long)0 + (long) ( (((long)getNaryCost(this, __var_decl_NT, 2)) + ((long)this.getNthChild(1).getCost(__type_name_NT)))  + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1a6( int goalState)
		{

			if ( (this.getArity() >= 3) )
				return(normalizeCost((long)0 + (long) ( ( (((long)getNaryCost(this, __var_decl_NT, 3)) + ((long)this.getNthChild(2).getCost(__constant_value_NT)))  + ((long)this.getNthChild(1).getCost(__type_name_NT)))  + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1a7( int goalState)
		{

			if ( (this.getArity() >= 3) )
				return(normalizeCost((long)0 + (long) ( ( (((long)getNaryCost(this, __var_decl_NT, 3)) + ((long)this.getNthChild(2).getCost(__expression_NT)))  + ((long)this.getNthChild(1).getCost(__type_name_NT)))  + ((long)this.getNthChild(0).getCost(__decl_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_VectorLiteralID_2_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_VectorLiteralID_2_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_vector_literal = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __vector_literal_NT:
				{
					if ( cachedCostFor_vector_literal == -1 )
					{
						cachedCostFor_vector_literal = getCostForRule1a8(goalState);

					}
					return(cachedCostFor_vector_literal);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __vector_literal_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a8(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 483;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					return narySubtrees.get(index - 2);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule1a8( int goalState)
		{

			if ( this.getArity() == 2 && this.getNthChild(1).getOperator() == ContainerID )
				return(normalizeCost((long)1 + (long) (((long)getNaryCost(this.getNthChild(1), __expression_NT, 0)) + ((long)this.getNthChild(0).getCost(__type_name_NT))) ));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_VoidID_0 extends JBurgSpecializedAnnotation
	{
		JBurgAnnotation_VoidID_0(IASNode node)
		{
			super(node);
		}
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(2);
				}
				case __expression_NT:
				{
					return(1);
				}
				case __new_type_name_NT:
				{
					return(20);
				}
				case __required_constant_value_NT:
				{
					return(268435457);
				}
				case __return_type_name_NT:
				{
					return(0);
				}
				case __statement_NT:
				{
					return(2);
				}
				case __type_name_NT:
				{
					return(0);
				}
				case __type_param_expression_NT:
				{
					return(1);
				}
				case __void_expression_NT:
				{
					return(2);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(3);
				}
				case __expression_NT:
				{
					return(492);
				}
				case __new_type_name_NT:
				{
					return(5);
				}
				case __required_constant_value_NT:
				{
					return(81);
				}
				case __return_type_name_NT:
				{
					return(488);
				}
				case __statement_NT:
				{
					return(496);
				}
				case __type_name_NT:
				{
					return(491);
				}
				case __type_param_expression_NT:
				{
					return(502);
				}
				case __void_expression_NT:
				{
					return(1);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(0);
		}
	}

	class JBurgAnnotation_WhileLoopID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_WhileLoopID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule1a9(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1a9(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 494;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule1a9( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_WithID_2 extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private JBurgAnnotation subtree1;
		JBurgAnnotation_WithID_2(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_statement = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					if ( cachedCostFor_statement == -1 )
					{
						cachedCostFor_statement = getCostForRule1aa(goalState);

					}
					return(cachedCostFor_statement);
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1aa(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 495;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(2);
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				case 1:
					return subtree1;
				default:
				{
					throw new IllegalStateException("Invalid index " + index);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else if ( subtree1 == null )
				subtree1 = child;
			else
				throw new IllegalStateException("too many children");
		}
		
		private int getCostForRule1aa( int goalState)
		{

			return(normalizeCost((long)0 + (long) (((long)this.getNthChild(1).getCost(__statement_NT)) + ((long)this.getNthChild(0).getCost(__expression_NT))) ));
		}
	}

	class JBurgAnnotation_XMLContentID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_XMLContentID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule1ab(goalState);

					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1ab(goalState);

					if ( ( bestCost > currentCost )  )
					{
						rule = 100;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule1ab( int goalState)
		{

			if ( this.getArity() == 1 && (this.getNthChild(0).getArity() >= 1) && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)1 + (long)((long)getNaryCost(this.getNthChild(0), __expression_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
	}

	class JBurgAnnotation_XMLListContentID_1_n extends JBurgSpecializedAnnotation
	{
		private JBurgAnnotation subtree0;
		private java.util.Vector narySubtrees = new java.util.Vector();
		JBurgAnnotation_XMLListContentID_1_n(IASNode node)
		{
			super(node);
		}
		private int cachedCostFor_expression = -1;
		
		public int getCost( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
				case __expression_NT:
				{
					if ( cachedCostFor_expression == -1 )
					{
						cachedCostFor_expression = getCostForRule1ac(goalState);

						int currentCost = getCostForRule1ad(goalState);

						if ( ( cachedCostFor_expression > currentCost )  )
							cachedCostFor_expression = currentCost;
					}
					return(cachedCostFor_expression);
				}
				case __required_constant_value_NT:
				{
					return(normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT)));
				}
				case __statement_NT:
				{
					return(getCost(__void_expression_NT));
				}
				case __type_param_expression_NT:
				{
					return(getCost(__expression_NT));
				}
				case __void_expression_NT:
				{
					return(normalizeCost((long)1 + (long)getCost(__expression_NT)));
				}
			}
			return(Integer.MAX_VALUE);
		}
		
		public int getRule( int goalState)
		{
			switch( goalState )
			{
				case __conditionalJump_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 3;
					}
					return(rule);
				}
				case __expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCostForRule1ac(goalState);

					if ( ( bestCost > currentCost )  )
					{
						bestCost = currentCost;
						rule = 101;
					}
					currentCost = getCostForRule1ad(goalState);
					if ( ( bestCost > currentCost )  )
					{
						rule = 102;
					}
					return(rule);
				}
				case __required_constant_value_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)ERROR_TRAP + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 81;
					}
					return(rule);
				}
				case __statement_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__void_expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 496;
					}
					return(rule);
				}
				case __type_param_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = getCost(__expression_NT);

					if ( ( bestCost > currentCost )  )
					{
						rule = 502;
					}
					return(rule);
				}
				case __void_expression_NT:
				{
					int rule = -1;

					int bestCost = Integer.MAX_VALUE;

					int currentCost = normalizeCost((long)1 + (long)getCost(__expression_NT));

					if ( ( bestCost > currentCost )  )
					{
						rule = 1;
					}
					return(rule);
				}
			}
			return(-1);
		}
		
		public int getArity( )
		{
			return(1 + narySubtrees.size());
		}
		
		public JBurgAnnotation getNthChild( int index)
		{
			switch( index )
			{
				case 0:
					return subtree0;
				default:
				{
					return narySubtrees.get(index - 1);
				}
			}
		}
		
		public void addChild( JBurgAnnotation child)
		{
			if ( subtree0 == null )
				subtree0 = child;
			else
				narySubtrees.add(child);
		}
		
		private int getCostForRule1ac( int goalState)
		{

			if ( this.getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)2 + (long)((long)getNaryCost(this.getNthChild(0), __expression_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
		
		private int getCostForRule1ad( int goalState)
		{

			if ( this.getArity() == 1 && this.getNthChild(0).getOperator() == ContainerID )
				return(normalizeCost((long)1 + (long)((long)getNaryCost(this.getNthChild(0), __e4x_literal_NT, 0))));
			else
				return(Integer.MAX_VALUE);
		}
	}
	
	public JBurgAnnotation getJBurgAnnotation( IASNode node)
	{
		switch( node.getNodeID() )
		{
			case AnonymousFunctionID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_AnonymousFunctionID_1(node));
				break;
			}
			case ArgumentID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_ArgumentID_2(node));
				if ( SemanticUtils.getChildCount(node) == 3 )
					return(new JBurgAnnotation_ArgumentID_3(node));
				break;
			}
			case ArgumentRestID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_ArgumentRestID_2(node));
				break;
			}
			case ArrayIndexExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_ArrayIndexExpressionID_2(node));
				break;
			}
			case ArrayLiteralID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_ArrayLiteralID_1_n(node));
				break;
			}
			case BindableVariableID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_BindableVariableID_2_n(node));
				break;
			}
			case BlockID:
			{
				if ( SemanticUtils.getChildCount(node) >= 0 )
					return(new JBurgAnnotation_BlockID_0_n(node));
				break;
			}
			case BreakID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_BreakID_0(node));
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_BreakID_1(node));
				break;
			}
			case CatchID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_CatchID_2(node));
				break;
			}
			case ConditionalID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_ConditionalID_1_n(node));
				break;
			}
			case ConfigBlockID:
			{
				if ( SemanticUtils.getChildCount(node) >= 0 )
					return(new JBurgAnnotation_ConfigBlockID_0_n(node));
				break;
			}
			case ContainerID:
			{
				if ( SemanticUtils.getChildCount(node) >= 0 )
					return(new JBurgAnnotation_ContainerID_0_n(node));
				break;
			}
			case ContinueID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_ContinueID_0(node));
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_ContinueID_1(node));
				break;
			}
			case DefaultID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_DefaultID_1_n(node));
				break;
			}
			case DefaultXMLStatementID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_DefaultXMLStatementID_1(node));
				break;
			}
			case DoWhileLoopID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_DoWhileLoopID_2(node));
				break;
			}
			case E4XFilterID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_E4XFilterID_2(node));
				break;
			}
			case ElseID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_ElseID_1(node));
				break;
			}
			case EmbedID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_EmbedID_0(node));
				break;
			}
			case ForEachLoopID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_ForEachLoopID_2(node));
				break;
			}
			case ForLoopID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_ForLoopID_2_n(node));
				break;
			}
			case FullNameID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_FullNameID_2(node));
				break;
			}
			case FunctionCallID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_FunctionCallID_2_n(node));
				break;
			}
			case FunctionID:
			{
				if ( SemanticUtils.getChildCount(node) == 3 )
					return(new JBurgAnnotation_FunctionID_3(node));
				if ( SemanticUtils.getChildCount(node) == 4 )
					return(new JBurgAnnotation_FunctionID_4(node));
				break;
			}
			case FunctionObjectID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_FunctionObjectID_1(node));
				break;
			}
			case GetterID:
			{
				if ( SemanticUtils.getChildCount(node) == 3 )
					return(new JBurgAnnotation_GetterID_3(node));
				if ( SemanticUtils.getChildCount(node) == 4 )
					return(new JBurgAnnotation_GetterID_4(node));
				break;
			}
			case GotoID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_GotoID_1(node));
				break;
			}
			case IdentifierID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_IdentifierID_0(node));
				break;
			}
			case IfStatementID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_IfStatementID_1_n(node));
				break;
			}
			case ImportID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_ImportID_1(node));
				break;
			}
			case InstructionListID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_InstructionListID_0(node));
				break;
			}
			case LabledStatementID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_LabledStatementID_2(node));
				break;
			}
			case LiteralBooleanID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralBooleanID_0(node));
				break;
			}
			case LiteralDoubleID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralDoubleID_0(node));
				break;
			}
			case LiteralIntegerID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralIntegerID_0(node));
				break;
			}
			case LiteralIntegerZeroID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralIntegerZeroID_0(node));
				break;
			}
			case LiteralNullID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralNullID_0(node));
				break;
			}
			case LiteralNumberID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralNumberID_0(node));
				break;
			}
			case LiteralObjectID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralObjectID_0(node));
				break;
			}
			case LiteralRegexID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralRegexID_0(node));
				break;
			}
			case LiteralStringID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralStringID_0(node));
				break;
			}
			case LiteralUintID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralUintID_0(node));
				break;
			}
			case LiteralXMLID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_LiteralXMLID_0(node));
				break;
			}
			case MXMLEventSpecifierID:
			{
				if ( SemanticUtils.getChildCount(node) >= 0 )
					return(new JBurgAnnotation_MXMLEventSpecifierID_0_n(node));
				break;
			}
			case MemberAccessExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_MemberAccessExpressionID_2(node));
				break;
			}
			case NamespaceAccessExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_NamespaceAccessExpressionID_2(node));
				break;
			}
			case NamespaceID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_NamespaceID_1(node));
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_NamespaceID_2(node));
				break;
			}
			case NamespaceIdentifierID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_NamespaceIdentifierID_0(node));
				break;
			}
			case NilID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_NilID_0(node));
				break;
			}
			case NonResolvingIdentifierID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_NonResolvingIdentifierID_0(node));
				break;
			}
			case ObjectLiteralExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_ObjectLiteralExpressionID_1_n(node));
				break;
			}
			case ObjectLiteralValuePairID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_ObjectLiteralValuePairID_2(node));
				break;
			}
			case Op_AddAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_AddAssignID_2(node));
				break;
			}
			case Op_AddID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_AddID_1(node));
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_AddID_2(node));
				break;
			}
			case Op_AsID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_AsID_2(node));
				break;
			}
			case Op_AssignId:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_AssignId_2(node));
				break;
			}
			case Op_AtID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_AtID_1(node));
				break;
			}
			case Op_BitwiseAndAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_BitwiseAndAssignID_2(node));
				break;
			}
			case Op_BitwiseAndID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_BitwiseAndID_2(node));
				break;
			}
			case Op_BitwiseNotID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_BitwiseNotID_1(node));
				break;
			}
			case Op_BitwiseOrAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_BitwiseOrAssignID_2(node));
				break;
			}
			case Op_BitwiseOrID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_BitwiseOrID_2(node));
				break;
			}
			case Op_BitwiseXorAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_BitwiseXorAssignID_2(node));
				break;
			}
			case Op_BitwiseXorID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_BitwiseXorID_2(node));
				break;
			}
			case Op_CommaID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_Op_CommaID_2_n(node));
				break;
			}
			case Op_DeleteID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_DeleteID_1(node));
				break;
			}
			case Op_DescendantsID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_DescendantsID_2(node));
				break;
			}
			case Op_DivideAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_DivideAssignID_2(node));
				break;
			}
			case Op_DivideID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_DivideID_2(node));
				break;
			}
			case Op_EqualID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_EqualID_2(node));
				break;
			}
			case Op_GreaterThanEqualsID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_GreaterThanEqualsID_2(node));
				break;
			}
			case Op_GreaterThanID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_GreaterThanID_2(node));
				break;
			}
			case Op_InID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_InID_2(node));
				break;
			}
			case Op_InstanceOfID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_InstanceOfID_2(node));
				break;
			}
			case Op_IsID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_IsID_2(node));
				break;
			}
			case Op_LeftShiftAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LeftShiftAssignID_2(node));
				break;
			}
			case Op_LeftShiftID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LeftShiftID_2(node));
				break;
			}
			case Op_LessThanEqualsID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LessThanEqualsID_2(node));
				break;
			}
			case Op_LessThanID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LessThanID_2(node));
				break;
			}
			case Op_LogicalAndAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LogicalAndAssignID_2(node));
				break;
			}
			case Op_LogicalAndID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LogicalAndID_2(node));
				break;
			}
			case Op_LogicalNotID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_LogicalNotID_1(node));
				break;
			}
			case Op_LogicalOrAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LogicalOrAssignID_2(node));
				break;
			}
			case Op_LogicalOrID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_LogicalOrID_2(node));
				break;
			}
			case Op_ModuloAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_ModuloAssignID_2(node));
				break;
			}
			case Op_ModuloID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_ModuloID_2(node));
				break;
			}
			case Op_MultiplyAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_MultiplyAssignID_2(node));
				break;
			}
			case Op_MultiplyID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_MultiplyID_2(node));
				break;
			}
			case Op_NotEqualID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_NotEqualID_2(node));
				break;
			}
			case Op_PostDecrID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_PostDecrID_1(node));
				break;
			}
			case Op_PostIncrID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_PostIncrID_1(node));
				break;
			}
			case Op_PreDecrID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_PreDecrID_1(node));
				break;
			}
			case Op_PreIncrID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_PreIncrID_1(node));
				break;
			}
			case Op_RightShiftAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_RightShiftAssignID_2(node));
				break;
			}
			case Op_RightShiftID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_RightShiftID_2(node));
				break;
			}
			case Op_StrictEqualID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_StrictEqualID_2(node));
				break;
			}
			case Op_StrictNotEqualID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_StrictNotEqualID_2(node));
				break;
			}
			case Op_SubtractAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_SubtractAssignID_2(node));
				break;
			}
			case Op_SubtractID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_SubtractID_1(node));
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_SubtractID_2(node));
				break;
			}
			case Op_TypeOfID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_TypeOfID_1(node));
				break;
			}
			case Op_UnsignedRightShift:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_UnsignedRightShift_2(node));
				break;
			}
			case Op_UnsignedRightShiftAssignID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_Op_UnsignedRightShiftAssignID_2(node));
				break;
			}
			case Op_VoidID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_Op_VoidID_0(node));
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_Op_VoidID_1(node));
				break;
			}
			case QualifiedNamespaceExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_QualifiedNamespaceExpressionID_2(node));
				break;
			}
			case ReturnStatementID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_ReturnStatementID_0(node));
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_ReturnStatementID_1(node));
				break;
			}
			case RuntimeNameExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_RuntimeNameExpressionID_1(node));
				break;
			}
			case SetterID:
			{
				if ( SemanticUtils.getChildCount(node) == 3 )
					return(new JBurgAnnotation_SetterID_3(node));
				if ( SemanticUtils.getChildCount(node) == 4 )
					return(new JBurgAnnotation_SetterID_4(node));
				break;
			}
			case SwitchID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_SwitchID_2_n(node));
				break;
			}
			case TernaryExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 3 )
					return(new JBurgAnnotation_TernaryExpressionID_3(node));
				break;
			}
			case ThrowsStatementID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_ThrowsStatementID_1(node));
				break;
			}
			case TryID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_TryID_1(node));
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_TryID_2_n(node));
				break;
			}
			case TypedExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_TypedExpressionID_2(node));
				break;
			}
			case UseID:
			{
				if ( SemanticUtils.getChildCount(node) == 1 )
					return(new JBurgAnnotation_UseID_1(node));
				break;
			}
			case VariableExpressionID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_VariableExpressionID_1_n(node));
				break;
			}
			case VariableID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_VariableID_2_n(node));
				break;
			}
			case VectorLiteralID:
			{
				if ( SemanticUtils.getChildCount(node) >= 2 )
					return(new JBurgAnnotation_VectorLiteralID_2_n(node));
				break;
			}
			case VoidID:
			{
				if ( SemanticUtils.getChildCount(node) == 0 )
					return(new JBurgAnnotation_VoidID_0(node));
				break;
			}
			case WhileLoopID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_WhileLoopID_2(node));
				break;
			}
			case WithID:
			{
				if ( SemanticUtils.getChildCount(node) == 2 )
					return(new JBurgAnnotation_WithID_2(node));
				break;
			}
			case XMLContentID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_XMLContentID_1_n(node));
				break;
			}
			case XMLListContentID:
			{
				if ( SemanticUtils.getChildCount(node) >= 1 )
					return(new JBurgAnnotation_XMLListContentID_1_n(node));
				break;
			}
		}
		return new JBurgAnnotationGeneral(node, nStates+1);
	}
	
	public void reduce( JBurgAnnotation p, int goalState) throws java.lang.Exception
	{
		reduceAntecedent(p,goalState);
		/* Release the annotation's data. */
		p.release();
	}
	
	public void reduceAntecedent( JBurgAnnotation p, int goalState) throws java.lang.Exception
	{int iRule = -1;
		if ( ( goalState > 0 )  )
		{iRule = p.getRule(goalState);
		}
		else
		{
			/* Find the minimum-cost path. */int minCost = Integer.MAX_VALUE;int i;for( i = 0;i <= nStates;i++ )
			{
				if ( ( minCost > p.getCost(i) )  )
				{iRule = p.getRule(i);minCost = p.getCost(i);goalState = i;
				}
			}
		}
		if ( ( iRule > 0 )  )
		{
			dispatchPrologue ( (IASNode)p.getNode(), iRule );
			reduceSubgoals(p, iRule);
			dispatchAction(p, iRule );
		}
		else
		{
			{
    new UnknownTreeHandler(reducer.getProblems()).analyze(p);
    BURMAbortException.abort();
}
		}
	}
	
	private void reduceSubgoals( JBurgAnnotation p, int rule_num) throws java.lang.Exception
	{
		if ( ___subgoals_by_rule[rule_num] != null )
		{
			for ( JBurgSubgoal sg : ___subgoals_by_rule[rule_num] )
			{
				if ( !sg.isNary() )
				{
					reduce ( sg.getNode(p), sg.getGoalState());
				}
				else
				{
					/* Aggregate the operands of an n-ary operator into a single container. */
					JBurgAnnotation sub_parent = sg.getNode(p);
					java.util.Vector variadic_result = new java.util.Vector(sub_parent.getArity() - sg.startIndex);
					for ( int j = sg.startIndex; j < sub_parent.getArity(); j++ )
					{
						reduce(sub_parent.getNthChild(j), sg.getGoalState());
						variadic_result.add(__reducedValues.pop());
					}
					__reducedValues.push(variadic_result);
				}
			}
		}
	}
	
	private void dispatchPrologue( IASNode p, int iRule) throws java.lang.Exception
	{
		switch( iRule )
		{
				
			case 105:
			{	reducer.prologue_anonymousFunction(p);
				break;
			}
				
			case 274:
			{	reducer.prologue_blockStmt(p);
				break;
			}
				
			case 275:
			{	reducer.prologue_blockStmt_to_finally_clause(p);
				break;
			}
				
			case 278:
			{	reducer.prologue_catchBlock(p);
				break;
			}
				
			case 279:
			{	reducer.prologue_catchBlock(p);
				break;
			}
				
			case 281:
			{	reducer.prologue_blockStmt(p);
				break;
			}
				
			case 285:
			{	reducer.prologue_countedForStmt(p);
				break;
			}
				
			case 296:
			{	reducer.prologue_doStmt(p);
				break;
			}
				
			case 307:
			{	reducer.prologue_forEachStmt(p);
				break;
			}
				
			case 308:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 309:
			{	reducer.prologue_forEachStmt(p);
				break;
			}
				
			case 310:
			{	reducer.prologue_forEachStmt(p);
				break;
			}
				
			case 311:
			{	reducer.prologue_forEachStmt(p);
				break;
			}
				
			case 312:
			{	reducer.prologue_forEachStmt(p);
				break;
			}
				
			case 313:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 314:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 315:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 316:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 317:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 318:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 319:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 320:
			{	reducer.prologue_forInStmt(p);
				break;
			}
				
			case 348:
			{	reducer.prologue_labeledStmt(p);
				break;
			}
				
			case 361:
			{	reducer.prologue_mxmlEventSpecifier(p);
				break;
			}
				
			case 452:
			{	reducer.prologue_switchStmt(p);
				break;
			}
				
			case 455:
			{	reducer.prologue_tryCatchFinallyStmt(p);
				break;
			}
				
			case 456:
			{	reducer.prologue_tryCatchStmt(p);
				break;
			}
				
			case 457:
			{	reducer.prologue_tryFinallyStmt(p);
				break;
			}
				
			case 460:
			{	reducer.prologue_function(p);
				break;
			}
				
			case 461:
			{	reducer.prologue_typedFunction_to_statement(p);
				break;
			}
				
			case 462:
			{	reducer.prologue_functionObject(p);
				break;
			}
				
			case 463:
			{	reducer.prologue_function(p);
				break;
			}
				
			case 464:
			{	reducer.prologue_function(p);
				break;
			}
				
			case 469:
			{	reducer.prologue_function(p);
				break;
			}
				
			case 470:
			{	reducer.prologue_typelessFunction_to_statement(p);
				break;
			}
				
			case 471:
			{	reducer.prologue_functionObject(p);
				break;
			}
				
			case 472:
			{	reducer.prologue_function(p);
				break;
			}
				
			case 473:
			{	reducer.prologue_function(p);
				break;
			}
				
			case 474:
			{	reducer.prologue_typeof(p);
				break;
			}
				
			case 475:
			{	reducer.prologue_typeof(p);
				break;
			}
				
			case 494:
			{	reducer.prologue_whileStmt(p);
				break;
			}
				
			case 495:
			{	reducer.prologue_withStmt(p);
				break;
			}
		}
	}
	
	private int getNaryCost( JBurgAnnotation node, int goalState, int start_index)
	{
		int accumCost = 0;
		for ( int i = start_index; i < node.getArity() && accumCost != Integer.MAX_VALUE; i++ )
		{
			int subCost = node.getNthChild(i).getCost(goalState);
			if ( subCost != Integer.MAX_VALUE )
				accumCost += subCost;
			else
				accumCost = Integer.MAX_VALUE;
		}
		return accumCost;
	}
	
	public void burm( IASNode root) throws java.lang.Exception
	{
		/* Use the least-cost goal state available. */
		burm(root, 0);
	}
	
	public void burm( IASNode root, int goal_state) throws java.lang.Exception
	{
		JBurgAnnotation annotatedTree = label(root);
		try
		{
			reduce ( annotatedTree, goal_state);
		}
		catch ( Exception cant_reduce )
		{
			this.__problemTree = annotatedTree;
			throw cant_reduce;
		}
	}
	private JBurgAnnotation __problemTree;
	
	public void dump( java.io.PrintWriter debug_output)
	{if ( null == __problemTree )
		{debug_output.println("");
			return;
		}debug_output.println("");
	}

void describeNode ( JBurgAnnotation node, java.io.PrintWriter debugOutput ) 
{
	if ( node == null ) return;
	String self_description;
	try {
		self_description = java.net.URLEncoder.encode(node.getNode().toString(),"UTF-8");
	} catch ( Exception cant_encode ) {self_description = node.getNode().toString();
	}
	debugOutput.print ( "");

	for (int i = 0; i <= nStates ; i++ )
	{
		if ( node.getRule(i) != 0 )
		{
			debugOutput.print ( "" );
		}
	}
	for (int i = 0; i < node.getArity(); i++ )
		describeNode ( node.getNthChild(i), debugOutput );
	debugOutput.println ( "" );
}

	static final String[] stateName = new String[] { "" , "non_resolving_identifier", "type_name", "integer_constant", "boolean_literal", "finally_clause", "literal", "conditionalJump", "decl_name", "runtime_name_expression", "double_constant", "function", "parameter", "statement", "return_type_name", "object_literal", "catch_block", "boolean_constant", "expression", "numeric_constant", "type_param_expression", "required_constant_value", "object_literal_element", "import_name", "void_expression", "conditionalElements", "comparison_expression", "constant_value", "e4x_literal", "vector_literal", "new_type_name", "qualifiedNamePart", "string_constant", "name", "parameterList", "mxml_data_binding_setter_expression", "var_decl", "dottedNamePart", "array_literal", "uint_constant"};

	
	public Object getResult( )
	{
		return __reducedValues.pop();
	}
	/* @return the input cost, limited to Integer.MAX_VALUE to avoid overflow. */
	
	public int normalizeCost( long c)
	{
		return(c < Integer.MAX_VALUE? (int) c: Integer.MAX_VALUE);
	}

	/** JBurgAnnotation is a data structure internal to the
	 *  JBurg-generated BURM that annotates a JBurgNode with
	 *  information used for dynamic programming and reduction.
	 */
	abstract class JBurgAnnotation
	{
		/**  The INode we're annotating.  */
		IASNode m_node; 
		JBurgAnnotation ( IASNode newNode)
		{
			m_node = newNode;
		}
		/** @return this node's operator. */
		public ASTNodeID getOperator() 
		{
			return m_node.getNodeID(); 
		}
		/** @return this node's wrappedIASNode. */ 
		public IASNode getNode()  
		{
			return m_node; 
		}
		/** @return the nth child of this node.  */
		public abstract JBurgAnnotation getNthChild(int idx);
		/** @return this node's child count.  */
		public abstract int getArity();
		/** Add a new child to this node.  */
		public abstract void addChild(JBurgAnnotation new_child);
		/** Release this node's data.  */
		public abstract void release();
		/** @return the wrapped node's toString().  */
		public String toString() 
		{
			return m_node.toString(); 
		}
		/** @return the current best cost to reach a goal state.  */
		public abstract int getCost( int goalState ) ;
		 /** Set the cost/rule configuration of a goal state.
		 * @throws IllegalArgumentException if this node has a fixed cost/rule.*/
		 public abstract void reset ( int goalState, int cost, int rule );
		/** * @return the rule to fire for a specific goal state. */
		public abstract int getRule ( int goalState ) ;
		/**
		 *  A closure's transformation rule succeeded.
		 *  If this path is selected for reduction, then all the actions  must be run in sequence, beginning with the original;
		 *  so the order of the rules matters.  We disallow transformation rules with  cycles (a node should never 
		 *  transition back to a goal state that has already been reduced).*/
		public abstract void recordAntecedent ( int iGoalState, int newAntecedentState );
	
	}

	abstract class JBurgSpecializedAnnotation extends JBurgAnnotation
	{
		JBurgSpecializedAnnotation(IASNode node)
		{
			super(node);
		}
		public JBurgAnnotation getNthChild(int idx)
		{
			throw new IllegalStateException(this.getClass().getName() + " has no children.");
		}
		public void addChild(JBurgAnnotation new_child)
		{
			throw new IllegalStateException(this.getClass().getName() + " cannot have children.");
		}
		public void reset ( int goalState, int cost, int rule )
		{
			throw new IllegalStateException(this.getClass().getName() + " cannot be reset.");
		}
		public void release ()
		{
		}
		public void recordAntecedent ( int iGoalState, int newAntecedentState )
		{
			throw new IllegalStateException(this.getClass().getName() + " cannot record antecedents.");
		}
	}

	class ErrorAnnotation extends JBurgSpecializedAnnotation
	{
		ErrorAnnotation()
		{
			super(null);
		}
		public int getRule(int state) { return -1; }
		public int getCost(int state) { return Integer.MAX_VALUE; }
		public int getArity() { return 0; }
	}
	final JBurgAnnotation errorAnnotation = new ErrorAnnotation();

	/**  JBurgAnnotation implementation used for general-purpose computation. */
	class JBurgAnnotationGeneral extends JBurgAnnotation
	{
		/** cost/rule matrices used during dynamic programming to compute
		 *  the most economical rules that can reduce  the input node.
		 */
		private int cost[];
		private int rule[];
		/**  Transformation rules may have antecedents: other states whose
		 *  output the transformation rule is intended to transform.
		 *  All such antecedent states must be executed in sequence when the rule is reduced.
		 */
		private int[] antecedentState = null;
		/** *  This node's children (may be empty).  */
		private java.util.Vector m_children = null;
		JBurgAnnotationGeneral ( IASNode newNode, int nRules) 
		{
			super(newNode);
			rule   = new int[nRules];
			cost   = new int[nRules];
			//  Initial cost of all rules is "infinite"
			java.util.Arrays.fill ( cost, Integer.MAX_VALUE);
			//  Initial rule for every goal is zero -- the JVM has zero-filled the rules array.
		}
		/** @return this node's operator. */
		public ASTNodeID getOperator() 
		{
			return m_node.getNodeID(); 
		}
		/** @return this node's wrappedIASNode. */ 
		public IASNode getNode()  
		{
			return m_node; 
		}
		/** @return the nth child of this node.  */
		public JBurgAnnotation getNthChild(int idx)
		{
			if ( m_children != null && m_children.size() > idx)
			{
				return (JBurgAnnotation) m_children.elementAt(idx);
			}
			else
			{
				throw new IllegalArgumentException( String.format("Index %d out of range opcode %s:", idx, this.getOperator() ));
			}
		}
		/** @return this node's child count.  */
		public int getArity()
		{
			return m_children != null? m_children.size():0;
		}
		/** Add a new child to this node.  */
		public void addChild(JBurgAnnotation new_child)
		{
			if (m_children == null)
			m_children = new java.util.Vector();
			if (new_child != null)
			m_children.add(new_child);
		}
		/** Release this node's data.  */
		public void release()
		{
			m_children = null;
			cost = null;
			rule = null;
		}
		/** @return the wrapped node's toString().  */
		public String toString() 
		{
			return m_node.toString(); 
		}
		/** @return the current best cost to reach a goal state.  */
		public int getCost( int goalState ) 
		{
			return cost[goalState]; 
		}
		 /** Set the cost/rule configuration of a goal state.
		 * @throws IllegalArgumentException if this node has a fixed cost/rule.*/
		 public void reset ( int goalState, int cost, int rule )
		{
			this.cost[goalState] = cost;
			this.rule[goalState] = rule;
			//  We have a brand new rule, therefore it has no antecedents.
			if ( this.antecedentState != null )this.antecedentState[goalState] = 0;
		}
		/** * @return the rule to fire for a specific goal state. */
		public int getRule ( int goalState ) 
		{
			return rule[goalState]; 
		}
		/**
		 *  A closure's transformation rule succeeded.
		 *  If this path is selected for reduction, then all the actions  must be run in sequence, beginning with the original;
		 *  so the order of the rules matters.  We disallow transformation rules with  cycles (a node should never 
		 *  transition back to a goal state that has already been reduced).*/
		public void recordAntecedent ( int iGoalState, int newAntecedentState )
		{
			int antecedentRule = rule[newAntecedentState];
			//  Sanity-check: we shouldn't be asked to record an antecedent state that hasn't been labelled.
			if ( antecedentRule == 0 )
			throw new IllegalStateException ( "Attempting to record an unlabelled antecedent state." );
			if ( antecedentRule == 1 )
			{
				//  Rule 1 is the simple transformation rule; it doesn't run,  but if it has antecedents, then they must run.
				if ( antecedentState != null )
				antecedentState[iGoalState] = antecedentState[newAntecedentState];
			}
			else
			{
				if ( antecedentState == null )
				antecedentState = new int[rule.length];
				antecedentState[iGoalState] = newAntecedentState;
			}
		}
	
	}
	
	static class JBurgSubgoal
	{
		private int goalState;
		private boolean isNary;
		private int startIndex;
		private int[] accessPath;
		
		public JBurgSubgoal( int goal_state, boolean is_nary, int start_index, int... access_path)
		{
			this.goalState = goal_state;
			this.isNary = is_nary;
			this.startIndex = start_index;
			this.accessPath = access_path;
		}
		public int getGoalState() { return this.goalState; }
		public boolean isNary() { return this.isNary; }
		public JBurgAnnotation getNode(JBurgAnnotation root)
		{
			JBurgAnnotation result = root;
			for ( int idx: this.accessPath )
				result = result.getNthChild(idx);
			return result;
		}
	
	}

}